URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 92341
[ Назад ]

Исходное сообщение
"sudo, php, ejabberd и прочая мистика"

Отправлено stakado , 28-Сен-11 16:17 
Драсьте!
Пытаюсь взаимодействовать с ejabberd: с помощью php выполняю bash-скрипт, в котором учавствует sudo.
Есть скрипт jab.sh:
#!/bin/bash
echo "id by bash: `id`"
echo "id by sudo: `sudo id`"
sudo /opt/ejabberd-2.1.8/bin/ejabberdctl status

Есть так же php-скрипт jab.php:
<?php
$output = shell_exec('id');
echo "<pre>id by php:  $output</pre>";
$output = shell_exec('./jab.sh');
echo "<pre>$output</pre>";
?>

При выполнение из консоли:
[root@zeus httpd]# sudo -u apache -g apache ./jab.sh
id by bash: uid=77(apache) gid=77(apache) groups=77(apache)
id by sudo: uid=0(root) gid=0(root) groups=0(root),512(Domain Admins)
The node ejabberd@localhost is started with status: started
ejabberd 2.1.7 is running in that node

[root@zeus httpd]# sudo -u apache -g apache php ./jab.php
<pre>id by php:  uid=77(apache) gid=77(apache) groups=77(apache)
</pre><pre>id by bash: uid=77(apache) gid=77(apache) groups=77(apache)
id by sudo: uid=0(root) gid=0(root) groups=0(root),512(Domain Admins)
The node ejabberd@localhost is started with status: started
ejabberd 2.1.7 is running in that node
</pre>[root@zeus httpd]#

А когда открываю в браузере jab.php вижу следующее:
id by php:  uid=77(apache) gid=77(apache) groups=77(apache)

id by bash: uid=77(apache) gid=77(apache) groups=77(apache)
id by sudo: uid=0(root) gid=0(root) groups=0(root),512(Domain Admins)
Failed RPC connection to the node ejabberd@localhost: nodedown

Commands to start an ejabberd node:
  start  Start an ejabberd node in server mode
  debug  Attach an interactive Erlang shell to a running ejabberd node
  live   Start an ejabberd node in live (interactive) mode

Почему из консоли скрипты выполняются нормально, а когда они вызываются httpd нет?


Содержание

Сообщения в этом обсуждении
"sudo, php, ejabberd и прочая мистика"
Отправлено stakado , 28-Сен-11 16:24 
Забыл показать /etc/sudoers:
root    ALL=(ALL:ALL) ALL
apache        ALL = (ALL:ALL) NOPASSWD: ALL

"sudo, php, ejabberd и прочая мистика"
Отправлено stakado , 28-Сен-11 17:08 
Проблема решена:
Замысловатым способ смог увидеть поток ошибок из php (сам по себе он их не показывает, и не сам по себе тоже, пришлось поизвращаца).
В общем ошибка была такая:
erlexec: HOME must be set

Решил заменой sudo в скрипте на sudo -H