C++ 如何授予用户对Web服务的权限

C++ 如何授予用户对Web服务的权限,c++,web-services,system,asterisk,C++,Web Services,System,Asterisk,我有一个运行在ubuntu服务器上的Web服务。此Web服务有一个方法: ... main() { soap_serve(soap_new()); } ns_call(std::string who, std::string &result) { int j; j=system ("asterisk -rx \"reload\""); return SOAP_OK; } 在客户端,返回正常,但不执行命令行。为什么?请帮忙。我正在堆叠我假定该命令实际上正在运行,但它无法连接到Aster

我有一个运行在ubuntu服务器上的Web服务。此Web服务有一个方法:

...
main()
{
soap_serve(soap_new());
}
ns_call(std::string who, std::string &result)
{
int j;
j=system ("asterisk -rx \"reload\"");

return SOAP_OK;
}

在客户端,返回正常,但不执行命令行。为什么?请帮忙。我正在堆叠

我假定该命令实际上正在运行,但它无法连接到Asterisk并发出重新加载命令,因为运行web服务器的用户没有连接到Asterisk的权限

两种解决方案。第一个是推荐的

苏多 将
sudo
配置为允许web服务器用户作为
asterisk
用户执行特定命令“
asterisk-rx reload
”:

www-data    (asterisk) NOPASSWD: /usr/sbin/asterisk -rx reload
然后使用此命令传递给
system()

套接字权限
asterisk-r
使用UNIX域套接字连接到asterisk服务器。套接字的位置可能因系统而异,但请查找类似
/var/run/asterisk.ctl的内容。默认情况下,此套接字的权限可能设置为只有
asterisk
用户(或root用户)可以连接

您需要安排web服务器用户具有读写此套接字的权限。例如,您可以
chmod
将套接字连接到
a+rwx
,使系统上的任何用户都可以使用它。(如果系统上有不受信任的用户,请不要这样做!)或者您可以将组写入权限授予此套接字,并将其授予web服务器作为其运行的组


无论您如何操作,请注意,您正在为代表您的Asterisk服务器执行潜在危险操作授予权限。

您确定该命令未执行吗?也许web服务器没有进行星号重新加载的权限。我如何才能授予web服务进行星号重新加载的权限?我需要一些帮助。谢谢!!!我是新手,哪个用户执行Web服务?您必须使用“chmod+x”控制台命令授予它权限。我确实给了chmod+x wbservice。但仍然没有reloading@RenanGreinert+x不是正确的权限。Asterisk需要对控制套接字具有读写权限,以便使用-r进行连接。我必须在何处添加www-data(Asterisk)NOPASSWD:/usr/sbin/Asterisk-rx-reload1
www data
是Debian默认使用的web服务器用户。确保它适合你。2.你需要把它放在sudoers文件里。使用
visudo
命令对其进行编辑。很抱歉,我不明白。我在ubuntu上工作。你能说得更具体些吗?我很抱歉。所以我必须在命令行NOPASSWD:/usr/sbin/asterisk中编辑。。。?我确实在我的Web服务系统中加入了(…);但是客户端的应用程序写到,xml响应与我发送的不一样。@AngelDream,请阅读我的评论。它说使用
visudo
。如果你不确定
sudo
的工作原理,那么手册页和谷歌搜索结果中有大量文档。Thx for Advisements Celada。非常感谢。我测试了系统命令,结果是:用法:sudo-h |-K |-K |-K |-L |-V用法:sudo-V[-AknS][-p提示符]用法:sudo-L[L][AknS][g groupname |#gid][p提示符][U用户名|#uid][g groupname | |#gid][command]用法:sudo][-AbEHknPS][-C][-fd g groupname |用户名| gid#用户名| gid#提示][VAR=value][i |-s][]用法:sudo-e[-AknS][C fd][g groupname |#gid][p提示符]
system("sudo -u asterisk /usr/sbin/asterisk -rx reload");