Linux: як надати користувачеві дозвіл на перезапуск apache?


35

У мене є сценарій, що працює під користувачем, котрий не має root, який за певних умов повинен перезапустити apache httpd.

Який був би найпростіший спосіб для мене дозволити користувачеві це зробити?

Я використовую Ubuntu Server 8.04 LTS.

Відповіді:


84

Коротка відповідь:

Використовуючи visudo, додайте у файл sudoers наступне, замінивши ім'я користувача на власне ім’я користувача:

username ALL = /etc/init.d/apache2 

Якщо вам не потрібно вводити пароль, перш ніж це зробити, використовуйте наступне:

username ALL = NOPASSWD: /etc/init.d/apache2 

Після цього користувач 'ім'я користувача' може виконати sudo /etc/init.d/apache2 start(або зупинити, перезапустити тощо)

Довга відповідь: Ви, швидше за все, захочете встановити окремого користувача для цього, якщо цього ще не зробили, а потім налаштуйте файл / etc / sudoers, щоб дозволити користувачеві або групі виконувати потрібну команду.

Наприклад, щоб дозволити користувачеві "ben" виконувати всі команди як кореневий запит на пароль, ви зробите наступне:

ben ALL= ALL

Щоб дозволити 'ben' виконувати лише одну команду (наприклад, скажімо, rm), ви зробите наступне:

ben ALL= /bin/rm 

Якщо ви користуєтеся сценарієм як користувач і не хочете запитувати пароль, вам потрібно скористатися параметром "NOPASSWD", наприклад:

ben ALL=NOPASSWD: /bin/commandname options

Ви можете зробити те ж саме для груп, поставивши назви груп зі знаком відсотка, наприклад:

%supportstaff          ALL= NOPASSWD: /bin/commandname 

2
Можна usernameобмежитися підмножиною параметрів? Скажи, start restartале ні stop?
ThorSummoner

visudoкоманда виконує перевірку безпеки на ваші зміни , щоб не порушувати sudo/ suкоманду випадково: unix.stackexchange.com/a/27595/61349
ThorSummoner

1

Коротка відповідь: судо.

Виклик виглядатиме так: sudo /etc/init.d/apache2 restart

Найпростіше це використовувати visudoдля налаштування файлу / etc / sudoers. Див man sudoersі man visudoдля деталей.


ОП сказав, що робити це через сценарій - сценарій не зможе ввести пароль, тому ця відповідь не матиме сенсу.
Метт Флетчер

@MattFletcher, якщо ви не використовуєте NOPASSWD
Robin Kanters

0

Ви також можете досягти цього, написавши обгортку до apache2ctl, призначивши власність групи групі веб-адміністрування та встановивши біт suid. Це менш загальне рішення, ніж візуальне, але дозволяє користувацькі обмеження у можливостях користувача та перевірку помилок.

Я написав цей інструмент для власних потреб і поділився ним на github: https://github.com/josiahjohnston/ltd_apache2ctl

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.