як мені виконувати кореневі дії з некореневого облікового запису?


15

Я хочу мати можливість перезапустити служби з php-скрипту. працює під обліковим записом www-користувача.

Який бажаний спосіб виконати ці дії?

Я повторюю, що можу створити файл із командами que'd, прочитаними CRON, але рішення свербить.

Я думаю про те, що це крихітна служба, що працює під коренем, що дозволяє наперед задані "методи", тому довільні кореневі дії не можуть бути виконані.

Якийсь інструмент для цього?


@MadHatter, Мона Ліза надсилає свої привітання, ;-)
користувач65297

Відповіді:


27

Ви можете винаходити колесо, але, чесно кажучи, я використовую для цього паролі без паролів. Наприклад, моя система моніторингу повинна мати можливість виконувати команду для перевірки апаратного RAID. Для цього потрібна привілей на root, але я не хочу запускати всю систему моніторингу як кореневу, тому натомість я маю sudoersрядок, який говорить

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

а потім запустити команду sudo /usr/lib/nagios/plugins/check_md_raidяк моніторинг користувача, коли мені потрібно перевірити RAID.

Ви можете мати лінію судорів, яка сказала

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

тоді у вас буде виконати php sudo /etc/rc.d/init.d/myservice restart.


2
Це шлях до ІМО. Я використовував цей процес для подібного завдання. Він працює у виробництві вже понад 3 роки. Ніколи не виходило з ладу, і ризик для безпеки майже не існує, якщо ви захищаєте код PHP, який спрацьовує належним чином за допомогою логіки вашої програми.
Ендрю Енслі

1
Дякую, нові sudoers для мене і стукають по мішені. @Andrew, дякую за додаткову інформацію.
користувач65297

1
user65927, вибач, якщо це не новина для тебе, але місцевий етикет полягає в тому, що коли ти маєш задовільну відповідь на запитання, ти приймаєш його, натискаючи на контур біля нього.
MadHatter

1
Вам також може знадобитися прокоментувати рядок "За замовчуванням Requtty" у вашому файлі sudoers. Цей крок мені кілька разів дістався. (Наприклад, змініть "За замовчуванням requtty" на "
#Defaults Requtty

6

Погляньте на sudo : він дозволяє вказати дії, які можна виконати як інший користувач (root у вашому випадку).

Наприклад, ви можете додати до свого /etc/sudoers(не редагуйте файл безпосередньо, використовуючи visudo)

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

Дивіться man sudoдеталі та синтаксис файлу


2
Будьте ДУЖЕ обережними під час редагування /etc/sudoersфайлу. Якщо це в будь-якому випадку синтаксично неправильне, повернення його назад - це кошмар, який вам потрібно sudoповернути назад, але ви не можете, якщо ви просто витерли судо. Вам потрібно використовувати рятувальний компакт-диск / DVD та змонтувати розділ вручну.
puk

1
@puk Насправді для редагування збитків вам потрібен кореневий доступ, і якщо файл пошкоджений, ви можете увійти як root, а потім відновити його (із резервної копії) або виправити вручну. visudo також виконує перевірку правильності файлу перед його написанням.
Маттео

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