Разрешение, предоставляемое в etc / sudoers, длится только 10 минут. - PullRequest
1 голос
/ 11 декабря 2011

У меня есть PHP-скрипт, который содержит shell_execute(), и обычно выполняемая команда требует sudo. Я отредактировал sudoers с помощью visudo, чтобы он содержал следующее:

www-data ALL = NOPASSWD: /var/root/node/npm/node_modules/less/
%users ALL = NOPASSWD: /var/root/node/npm/node_modules/less/

Я подозреваю, что любой из них должен сработать, но я, конечно, выбрал подход с поясом и подтяжками.

Я редактирую etc / sudoers с помощью vim, поэтому после добавления этих строк я делаю: x и все работает. Мой PHP-скрипт делает то, что должен ... минут 10-15. Тогда скрипт перестает работать. В частности, shell_exec() перестает работать.

Если я сделаю sudo visudo снова, мои новые строки все еще там. Но только когда я снова сохраню его, скрипт снова начнет работать.

Может кто-нибудь сказать мне, почему это может происходить? У меня есть два предположения, которые не очень хороши:

  1. Существует некоторый льготный период, который начинается, когда я sudo visudo, и это то, что позволяет моему сценарию работать (но только до его истечения).
  2. Новые данные в etc / sudoers находятся в sudoers.tmp («Файл блокировки») ... Ни один из них не складывается со мной.

Ответы [ 2 ]

1 голос
/ 11 декабря 2011
0 голосов
/ 11 декабря 2011

Согласно комментарию в документации по PHP, это будет работать.

system('echo "PASS" | sudo -u root -S COMMAND');

Я не проверял его.

...