Назад | Перейти на главную страницу

Перезапустите или перезагрузите Apache как пользователь «www-data».

У меня есть сценарий веб-перехватчика, написанный на Python на моем сервере Debian / Apache2.4, так что он запускает сценарий развертывания .sh при нажатии на GitHub. Итак, скрипт выполняется стандартным пользователем Apache "www-data". Моему сценарию необходимо перезапустить или перезагрузить Apache, но в выходных данных указано, что у пользователя нет разрешения на это: Reloading apache2 configuration (via systemctl): apache2.serviceFailed to reload apache2.service: Access denied. Такое же поведение при выполнении вручную как www-data (sudo -u www-data /etc/init.d/apache2 reload).

Итак, я попытался сделать www-data разрешениями на перезагрузку или перезапуск Apache, добавив следующую строку в свой visudo: www-data ALL = NOPASSWD: /etc/init.d/apache2 (в соответствии с этот документ).

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

Поскольку httpd привязывается к портам 80 и 443, которые зарезервированы, вам нужны привилегии root для их перезапуска. Это означает, что пользователь www-data не имеет для этого достаточных прав.

Итак, что вам нужно сделать, это разрешить пользователю www-data чтобы запустить эту команду как root. Вы делаете это, добавляя эту строку в конфигурацию sudo (или в отдельный файл в /etc/sudoers.d, если ваша система это использует):

www-data ALL = (root) NOPASSWD: /etc/init.d/apache2 reload

Ваш www-data Теперь пользователь сможет запускать эту единственную команду как root. Вам нужно будет отредактировать свой скрипт, чтобы он содержал

sudo /etc/init.d/apache2 reload

вместо просто

/etc/init.d/apache2 reload.

Возможно, ваша система настроена на использование tty при использовании sudo. Часто это делается специально для предотвращения сценариев, использующих sudo, поскольку это вектор атаки. Если это так, ваш файл sudoers должен быть немного более сложным:

Cmnd_Alias APACHERELOAD = /etc/init.d/apache2 reload
Defaults!APACHERELOAD !requiretty
www-data ALL = (root) NOPASSWD: APACHERELOAD

Это означает, что только команда /etc/init.d/apache2 reload может быть запущен без необходимости в tty.