【问题标题】:asterisk CLI with non root user [closed]具有非 root 用户的星号 CLI [关闭]
【发布时间】:2020-09-23 22:47:47
【问题描述】:

我正在开发一个 Web 应用程序来管理我的星号服务器(添加扩展程序、添加管理客户端的上下文等。)我正在使用 PHP、Mysql 来执行此操作,我使用数据库来添加客户端,但用于扩展,我还是用extensions.conf这个文件。 假设我从 web 应用程序中向 extensions.conf 文件添加了许多扩展,接下来我应该重新加载拨号计划,我知道的唯一方法是在 Asterisk CLI 中输入以下命令:

dialplan reload

所以如果我想从网络应用重新加载拨号方案,我应该在某个地方运行:

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

【问题讨论】:

    标签: php centos7 asterisk pbx


    【解决方案1】:

    您可以使用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);
        }
    ?>
    
    

    【讨论】:

    • 非常感谢您的回答。稍后我会了解 AMI。
    【解决方案2】:

    您的命令不需要 root 权限。

    检查 /etc/asterisk/asterisk.conf 中使用的文件和权限。

    【讨论】:

    • 我会在问题中提供我的 asterisk.conf,直到我有什么问题,请
    • "runuser = asterisk" 所以你应该使用星号用户或更改网络服务器上的用户/或星号用户与网络服务器相同
    • 非常感谢您的回答,有没有办法将apache用户添加到与星号用户相同的组中
    • 是的,但是您已将 astctlpermissions 更改为组可写 voip-info.org/asterisk-config-asteriskconf
    • 非常感谢,它对我有用,但我想知道在哪里可以了解更多关于为什么它第一次不起作用以及现在为什么起作用的更多信息。我的意思是 astctlpermissions 的作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多