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

时间:2012-01-12 10:46:15

标签: 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;
}

在客户端返回是OK但是没有执行命令行。为什么?请帮忙。我堆积了

1 个答案:

答案 0 :(得分:1)

我假设该命令实际上正在运行但它无法连接到Asterisk并发出reload命令,因为运行Web服务器的用户无权连接到Asterisk。

两种解决方案。建议使用第一个。

须藤

配置sudo以允许Web服务器用户以asterisk -rx reload用户身份执行特定命令“asterisk”:

www-data    (asterisk) NOPASSWD: /usr/sbin/asterisk -rx reload

然后将其用作传递给system()的命令:

system("sudo -u asterisk /usr/sbin/asterisk -rx reload");

套接字权限

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

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

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