#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.