我已经安装了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
这可能会再次产生影响,因为现在系统上的任何用户都可以使用该命令。你必须仔细考虑不同的情况,并选择在特定情况下风险最小的情况。