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

15

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

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

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

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

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

user65297
источник
@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подробности и синтаксис файла

Matteo
источник
2
будьте ОЧЕНЬ осторожны при редактировании /etc/sudoersфайла. Если это каким-либо образом синтаксически неверно, его изменение - это кошмар, потому что вам нужно sudoвернуться в него, но вы не можете этого сделать, просто уничтожив sudo. Вам в конечном итоге придется использовать аварийный CD / DVD и монтировать раздел вручную.
PUK
1
@puk На самом деле для редактирования дрожания вам необходим доступ с правами суперпользователя, и в случае повреждения файла вы можете войти в систему как пользователь root, а затем восстановить его (из резервной копии) или исправить это вручную. visudo также выполняет проверку работоспособности файла перед его записью.
Маттео
что такое shudders? Это правда, что visudo проводит проверки работоспособности, но они не помогают после нанесения ущерба: P
puk