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



我有一个在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服务器的用户没有连接到Asterick的权限。

两种解决方案。推荐使用第一种。

sudo

配置sudo以允许web服务器用户作为asterisk用户执行特定命令"asterisk -rx reload":

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服务器执行潜在危险操作授予权限。

相关内容

  • 没有找到相关文章

最新更新