Как: sudo -u в sudoer?

#linux #raspberry-pi #visudo

Вопрос:

Мне нужно запустить команду с правами sudo из файла php (пользователь: www-данные), явно как пользователь www-data :

 lt;?php  $command = 'sudo -u www-data /usr/bin/python3 /var/www/html/script.py';  shell_exec($command); ?gt;  

чтобы иметь возможность использовать sudo www-data , я хочу поместить команду в sudoers ( sudo visudo ), например:

 www-data ALL=NOPASSWD: sudo -u www-data /usr/bin/python3 /var/www/html/script.py  

или

 www-data ALL=NOPASSWD: -u www-data /usr/bin/python3 /var/www/html/script.py  

но синтаксис неправильный (сообщение об ошибке от visudo). Ниже приведена работа с sudoers (правильный синтаксис)

 www-data ALL=NOPASSWD: /usr/bin/python3 /var/www/html/script.py  

но не работает для моего скрипта (ошибка apache в файле журнала):

 Sorry, user www-data is not allowed to execute '/usr/bin/python3 /var/www/html/script.py' as www-data on raspberrypi.  

кажется, это необходимо sudo -u www-data . Как я могу решить эту проблему?

Комментарии:

1. это не python, для которого вам нужен sudo, это был бы скрипт. поэтому сделайте скрипт исполняемым, а затем принадлежащим www-данным, тогда это будет www-data ALL=(ALL:ALL) NOPASSWD: /var/www/html/script.py

Ответ №1:

Нет смысла использовать sudo , чтобы разрешить www-data запускать команды как www-data , но вы можете легко это сделать:

 www-data ALL=(www-data) NOPASSWD: /usr/bin/python3 /var/www/html/script.py  

Проблема с вашими подходами заключалась в том, что вы пытались добавить команду sudo -u www-data .. в sudoers, что соответствует двойному sudo sudo sudo -u www-data ..

Комментарии:

1. Да, спасибо вам! Теперь это имеет смысл, и это прекрасно работает. visudo = www-данные ВСЕ=(www-данные) NOPASSWD: /usr/bin/python3 /var/www/html/script.py И shell_exec() с ‘sudo -u www-данные /usr/bin/python3 /var/www/html/script.py» в сочетании с чаевыми от @Lawrence Cherone chown www-данные script.py и chmod x script.py.