Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 以root/normal用户身份运行eJabberd register user命令_Php_Ubuntu_Ejabberd - Fatal编程技术网

Php 以root/normal用户身份运行eJabberd register user命令

Php 以root/normal用户身份运行eJabberd register user命令,php,ubuntu,ejabberd,Php,Ubuntu,Ejabberd,我已经安装了eJabberd,并且工作正常。现在我必须将注册和其他功能与PHP代码集成 我正在尝试运行以下脚本以使用PHP代码注册用户: <?php error_reporting(E_ALL); ini_set('display_errors', '-1'); $username = 'user1'; $password = '123456'; $node = 'localhost'; exec('echo <password> | sudo -u r

我已经安装了eJabberd,并且工作正常。现在我必须将注册和其他功能与PHP代码集成

我正在尝试运行以下脚本以使用PHP代码注册用户:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '-1');

$username   = 'user1';
$password   = '123456';
$node       = 'localhost';

exec('echo <password> | sudo -u root -S ejabberdctl register '.$username.' '.$node.' '.$password.' 2>&1',$output,$status);

if($output == 0)
{
    echo "User created successfully.";
}
else
{
    // Failure, $output has the details
    echo '<pre>';
    foreach($output as $o)
    {
        echo $o."\n";
    }
    echo '</pre>';
}
?>
使用PHP运行eJabberd命令还有其他方法吗


任何参考资料都会很有帮助。提前感谢。

您的web服务将以用户身份在Ubuntu中运行。您可以使用/etc/sudoers以root用户身份运行特定命令

将此行添加到您的sudoers

chmod +s ejabberdctl
将[FULL PATH TO]替换为该脚本的完整路径

这将意味着用户
www-data
可以在该位置作为
root
运行脚本。它还说不需要密码

显然,这有一些安全考虑-确保您信任该脚本,并且它不能被其他恶意代码替换

另一种解决方案是使ejabberdctl始终以root用户身份运行。在可执行文件上使用此选项


这可能会再次产生影响,因为现在系统上的任何用户都可以使用该命令。您必须仔细考虑不同的场景,并选择在给定情况下风险最小的场景。

PHP是以什么用户的身份运行的?换句话说,您是以当前用户的身份从cmd行运行PHP还是通过Web服务器运行PHP?我是通过Web服务器运行PHP。第二个选项面临同样的问题,但第一个选项对我有效。所以,谢谢。有趣的反馈-我会自己尝试一下,并找出答案。感谢解决方案在我的本地系统上运行,但在服务器上遇到问题,我在这里发布了新问题:。请给出一些建议,谢谢。
www-data  ALL = NOPASSWD: /[FULL PATH TO]ejabberdctl
chmod +s ejabberdctl