以root/普通用户身份运行eJabberd-register-user命令


Run eJabberd register user command as root/normal user

我已经安装了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>';
}
?>

但它给了我以下错误:

[sudo] password for www-data: Sorry, try again.
[sudo] password for www-data:
sudo: 1 incorrect password attempt

有没有其他方法可以使用PHP运行eJabberd命令?

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

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

将这一行添加到您的sudoers中。

www-data  ALL = NOPASSWD: /[FULL PATH TO]ejabberdctl

将[FULL PATH TO]替换为该脚本的完整路径。

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

显然,这有一些安全考虑因素——确保您信任脚本,并且它不会被其他恶意代码取代。

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

chmod +s ejabberdctl

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