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


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.