Название может запутать, поэтому сформулирую техническое задание точнее. Есть некоторый хост, на котором необходимо выполнить некоторые команды посредством remote ssh. Как настроить собственно remote ssh я писал в предыдущим заметках. Допустим такая команда

# /usr/local/bin/sudo -u sshuser /usr/bin/ssh sshuser@192.168.0.2 /usr/local/bin/sudo /sbin/ipfw -f flush

отрабатывает правильно. Обратите внимание, что доступ по ssh происходит от имени пользователя sshuser, поэтому в команде 2 раза происходит вызов sudo:

  • первый раз на хосте, с которого осуществляется удаленное управление, запускает ssh-подключение от имени пользователя sshuser;
  • второй раз sudo вызывается для разрешения пользователю sshuser выполнить команду ipfw от имени суперпользователя.

Для этого в файл /usr/local/etc/sudoerc на хосте, который управляется удаленно необходимо добавить строку

sshuser      ALL = NOPASSWD: /sbin/ipfw *

Из командной строки с правами суперпользователя проблем нет. А теперь попробуем настроить такие же действия из веб-интерфейса.

Помещаем в php-скрипт  строку

$cmd = "usr/local/bin/sudo -u sshuser /usr/bin/ssh sshuser@192.168.0.2 /usr/local/bin/sudo /sbin/ipfw -f flush";
($cmd);

а сам скрипт работает от имени пользователя www. Естественно, что у www нет прав для выполнения команды sudo -u sshuser, поэтому придется пойти  на добавление в команду ЕЩЕ ОДНОГО вызова sudo для запуска приведенной выше команды с правами суперпользователя, вот так:

$cmd = "/usr/local/bin/sudo /usr/local/bin/sudo -u sshuser /usr/bin/ssh sshuser@192.168.0.2 /usr/local/bin/sudo /sbin/ipfw -f flush";
($cmd);

А  в файл /usr/local/etc/sudoerc на хосте, на котором работает php-скрипт управления  необходимо добавить строку

www       ALL = NOPASSWD: /usr/local/bin/sudo *

Вот такой вот cloaking позволяет выполнять необходимые команды на хосте без прямого доступа по ssh через веб-интерфейс.