Я установил 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
Есть ли другой способ запустить eJabberd команды, использующие PHP ?
Любая ссылка будет очень полезна. Заранее спасибо.
Ваш веб-сервис будет работать как пользователь www-data
в убунту. Вы можете разрешить этому запуску запускать определенные команды от имени пользователя root, используя / etc / sudoers.
Добавьте эту строку в ваш sudoers.
www-data ALL = NOPASSWD: /[FULL PATH TO]ejabberdctl
Замените [FULL PATH TO] на полный путь к этому сценарию.
Что это будет делать, это сказать, что пользователь www-data
может запустить скрипт в этом месте как root
, Он также говорит, что пароль не требуется.
Очевидно, что это имеет некоторые соображения безопасности — убедитесь, что вы доверяете сценарию и что он не может быть заменен другим вредоносным кодом.
Альтернативным решением было бы заставить ejabberdctl всегда запускаться от имени пользователя root. Для этого используйте это на исполняемом файле.
chmod +s ejabberdctl
Еще раз это может иметь последствия, так как теперь любой пользователь в вашей системе может использовать эту команду. Вы должны продумать различные сценарии и выбрать, какой из них представляет наименьший риск для ваших данных обстоятельств.
Других решений пока нет …