Выполнить команду sudo в приложении Ruby on Rails - PullRequest
3 голосов
/ 03 мая 2011

Я пытаюсь выполнить такую ​​команду из приложения Ruby on Rails:

sudo service squid3 restart

Если я попробую это с этим кодом:

output = ´sudo service squid3 retsart´

Это не работает, в консоли я вижу, что Linux спрашивает пароль.Как я могу передать пароль с помощью этой команды?Или другие предложения ...

Ответы [ 4 ]

8 голосов
/ 03 мая 2011

Вы можете добавить следующую строку в свой файл sudoers (/ etc / sudoers)

rails_user ALL=(root) NOPASSWD:/usr/sbin/service

Это в основном позволит пользователю rails_user выполнять команду service как sudo, и система не будет спрашивать васдля пароля.

rails_user следует заменить любым пользователем, под которым вы запускаете процесс rails.Также вы должны убедиться, что

Defaults requiretty

отсутствует в вашем / etc / sudoers.Если нет, вы не сможете использовать sudo из скрипта.

3 голосов
/ 03 мая 2011

Вы можете попробовать флаг sudo -S, если он доступен в вашей системе (проверьте man):

echo secretPasswd | sudo -S service squid3 restart

Это означает, что пароль будет чист, поэтому вы можете добавить пользователя, который должен выполнитьзадача для sudoers (что, кстати, создает еще одну проблему безопасности).

0 голосов
/ 03 мая 2011

Есть ли у вашего sudo переключатель -A?

-A
Обычно, если sudo требует пароль, он будет читать его с текущего терминала. Если указан параметр -A (askpass), выполняется вспомогательная программа, которая считывает пароль пользователя и выводит пароль на стандартный вывод. Если установлена ​​переменная окружения SUDO_ASKPASS, она указывает путь к вспомогательной программе. В противном случае используется значение, указанное параметром askpass в sudoers (5) .

Я бы не рекомендовал, чтобы пароль был каким-либо образом доступен для процессов вашего веб-сервера, поэтому вы можете использовать файл sudoers .

0 голосов
/ 03 мая 2011

Вы можете использовать ожидаемый метод , чтобы перехватить запрос пароля и отправить пароль.Однако, может быть, лучше предоставить пользователю Rails доступ к сервисной команде без пароля, используя параметр NOPASSWD в /etc/sudoers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...