У меня есть скрипт, работающий под пользователем без полномочий root, который при определенных условиях должен перезапустить apache httpd.
Каким будет самый простой способ позволить пользователю это сделать?
Я использую Ubuntu Server 8.04 LTS.
Короткий ответ:
С помощью visudo
добавьте в файл sudoers следующее, заменив имя пользователя на правильное имя пользователя:
username ALL = /etc/init.d/apache2
Если вы не хотите вводить пароль перед этим, используйте следующее:
username ALL = NOPASSWD: /etc/init.d/apache2
После этого пользователь 'username' может выполнить sudo /etc/init.d/apache2 start
(или остановить, перезапустить и т. д.)
Длинный ответ: вы, вероятно, захотите настроить для этого отдельного пользователя, если вы еще этого не сделали, а затем настроить файл / etc / sudoers, чтобы пользователь или группа могли выполнять нужную команду.
Например, чтобы позволить пользователю ben выполнять все команды от имени пользователя root, запрашивая пароль, вы должны сделать следующее:
ben ALL= ALL
Чтобы позволить Бену выполнять только одну команду (например, rm
), вы бы сделали следующее:
ben ALL= /bin/rm
Если вы запускаете сценарий от имени пользователя и не хотите запрашивать пароль, вам нужно использовать опцию NOPASSWD следующим образом:
ben ALL=NOPASSWD: /bin/commandname options
Вы можете сделать то же самое для групп, добавив к именам групп знак процента, например:
%supportstaff ALL= NOPASSWD: /bin/commandname
Краткий ответ: sudo.
Вызов будет выглядеть примерно так: sudo /etc/init.d/apache2 restart
Самый простой в использовании visudo
для настройки файла / etc / sudoers. Видеть man sudoers
и man visudo
для подробностей.
Вы также можете сделать это, написав оболочку для apache2ctl, назначив групповое владение группе веб-администрирования и установив бит suid. Это менее общее решение, чем visudo, но позволяет настраивать ограничения возможностей пользователя и проверку ошибок.
Я написал этот инструмент для своих нужд и поделился им на github: https://github.com/josiahjohnston/ltd_apache2ctl