非 root 用户的星号 CLI
asterisk CLI with non root user
我正在开发一个 Web 应用程序来管理我的 asterisk 服务器(添加扩展、添加上下文管理客户端等。)我正在使用 PHP、Mysql 来做到这一点,我使用数据库添加客户端但为了扩展,我仍然使用文件 extensions.conf。
假设我从 Web 应用程序向 extensions.conf 文件添加了许多扩展名,接下来我应该重新加载拨号方案,我知道的唯一方法是在 Asterisk CLI 中键入此命令:
dialplan reload
所以如果我想从 Web 应用程序重新加载拨号方案,我应该 运行 某处 :
shell_exec ( "asterisk -rx 'dialplan reload'" );
问题是这个命令asterisk -rx
需要root权限。
有没有办法让 apache 用户 运行 这个命令。
编辑:
这是我的 /etc/asterisk/asterisk.conf 文件的内容
[directories](!)
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
[options]
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
astsbindir => /usr/sbin
runuser = asterisk ; The user to run as. The default is root.
rungroup = asterisk ; The group to run as. The default is root
您的命令不需要 root 权限。
检查 /etc/asterisk/asterisk.conf 文件和使用的权限。
您可以使用 sudoers
(不推荐)允许特定用户执行 运行:
sudo asterisk -rx 'dialplan reload'
你可以从你的用户那里调用它,尽管如果那是你的网络用户,这很危险...
或者您可以使用 AMI
要通过 Asterisk Manager Interface (AMI)
执行命令,您可以在 manager.conf
中为自己创建一个用户,然后从 PHP 使用脚本来验证和执行命令。示例:
<?php
$socket = fsockopen("127.0.0.1","5038", $errno, $errstr, 10);
if (!$socket){
echo "$errstr ($errno)\n";
}else{
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: myusername\r\n");
fputs($socket, "Secret: mypassword\r\n\r\n");
fputs($socket, "Action: Command\r\n");
fputs($socket, "Command: dialplan reload\r\n\r\n");
fputs($socket, "Action: Logoff\r\n\r\n");
while (!feof($socket)){
echo fgets($socket).'<br>';
}
fclose($socket);
}
?>
我正在开发一个 Web 应用程序来管理我的 asterisk 服务器(添加扩展、添加上下文管理客户端等。)我正在使用 PHP、Mysql 来做到这一点,我使用数据库添加客户端但为了扩展,我仍然使用文件 extensions.conf。 假设我从 Web 应用程序向 extensions.conf 文件添加了许多扩展名,接下来我应该重新加载拨号方案,我知道的唯一方法是在 Asterisk CLI 中键入此命令:
dialplan reload
所以如果我想从 Web 应用程序重新加载拨号方案,我应该 运行 某处 :
shell_exec ( "asterisk -rx 'dialplan reload'" );
问题是这个命令asterisk -rx
需要root权限。
有没有办法让 apache 用户 运行 这个命令。
编辑:
这是我的 /etc/asterisk/asterisk.conf 文件的内容
[directories](!)
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /var/lib/asterisk
astagidir => /var/lib/asterisk/agi-bin
astspooldir => /var/spool/asterisk
[options]
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
astsbindir => /usr/sbin
runuser = asterisk ; The user to run as. The default is root.
rungroup = asterisk ; The group to run as. The default is root
您的命令不需要 root 权限。
检查 /etc/asterisk/asterisk.conf 文件和使用的权限。
您可以使用 sudoers
(不推荐)允许特定用户执行 运行:
sudo asterisk -rx 'dialplan reload'
你可以从你的用户那里调用它,尽管如果那是你的网络用户,这很危险...
或者您可以使用 AMI
要通过 Asterisk Manager Interface (AMI)
执行命令,您可以在 manager.conf
中为自己创建一个用户,然后从 PHP 使用脚本来验证和执行命令。示例:
<?php
$socket = fsockopen("127.0.0.1","5038", $errno, $errstr, 10);
if (!$socket){
echo "$errstr ($errno)\n";
}else{
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: myusername\r\n");
fputs($socket, "Secret: mypassword\r\n\r\n");
fputs($socket, "Action: Command\r\n");
fputs($socket, "Command: dialplan reload\r\n\r\n");
fputs($socket, "Action: Logoff\r\n\r\n");
while (!feof($socket)){
echo fgets($socket).'<br>';
}
fclose($socket);
}
?>