как выполнить действия root от учетной записи без полномочий root?


15

Я хочу иметь возможность перезапустить сервисы из php-скрипта. работает под учетной записью www-пользователя.

Какой предпочтительный способ выполнить эти действия?

Я решил, что могу создать файл с командами que'd, прочитанными CRON, но решение чешется.

Я имею в виду крошечный сервис, работающий под root, позволяющий предопределенные «методы», поэтому произвольные действия root не могут быть выполнены.

Есть какой-нибудь инструмент для этого?


@MadHatter, Мона Лиза передает свои поздравления ;-)
— user65297

Ответы:


27

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

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

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

Вы могли бы иметь линию sudoers, которая сказала

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 и удар по цели. @ Андрей, спасибо за дополнительную информацию.
— user65297

1
user65927, простите, если это не новость для вас, но местный этикет состоит в том, что когда у вас есть удовлетворительный ответ на вопрос, вы принимаете его, нажимая на схему галочки рядом с ним.
— MadHatter

1
Вам также может понадобиться закомментировать строку «Defaults requiretty» в вашем файле sudoers. Этот шаг получил меня несколько раз. (Например, измените «По умолчанию requiretty» на «#Defaults requiretty»)
— steve.lippert

6

Взгляните на sudo : он позволяет указать действия, которые могут быть выполнены от имени другого пользователя (root в вашем случае).

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

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

Смотрите man sudoподробности и синтаксис файла


2
будьте ОЧЕНЬ осторожны при редактировании /etc/sudoersфайла. Если это каким-либо образом синтаксически неверно, его изменение - это кошмар, потому что вам нужно sudoвернуться в него, но вы не можете этого сделать, просто уничтожив sudo. Вам в конечном итоге придется использовать аварийный CD / DVD и монтировать раздел вручную.
— PUK

1
@puk На самом деле для редактирования дрожания вам необходим доступ с правами суперпользователя, и в случае повреждения файла вы можете войти в систему как пользователь root, а затем восстановить его (из резервной копии) или исправить это вручную. visudo также выполняет проверку работоспособности файла перед его записью.
— Маттео

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