Как запустить скрипт с полномочиями root в Linux - PullRequest
1 голос
/ 25 мая 2011

Мне нужно разработать веб-сайт, написанный на CGI.

Я хотел бы знать, как запустить скрипт с полномочиями root из CGI.

Скажем, имя скрипта hello, я запускаю его из CGI как system ("pathToTheFile / привет ") .

Теперь я хотел бы запустить этот привет-файл от имени пользователя root;Кто-нибудь может мне помочь с этим?

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

Как правило, самый безопасный способ сделать это - использовать функцию setuid в UNIX-подобных ОС.Если вы установите для владельца программы hello значение root, а затем установите бит setuid:

chmod u+s hello

Тогда, независимо от того, кто выполнит программу, она выполнитсякак корень.Это работает для собственных исполняемых файлов, но не для интерпретируемых сценариев.Если «hello» должен быть сценарием, то это не сработает для вас.

Теперь я должен сказать, что в общем случае root-программы setuid не очень хорошая идея.Часто вы можете создать специального пользователя, который будет владеть сценарием, и дать ему необходимые ограниченные привилегии, а затем настроить сценарий для этого пользователя.

1 голос
/ 25 мая 2011

Гораздо более безопасный способ получения прав root с веб-страницы - отключить выполнение программы от веб-страницы.Вместо этого используйте локальные сокеты Unix, именованные каналы или каталог заданий в очереди.

Этот каталог, вероятно, является самым простым в обращении.Настройте каталог, в который ваша веб-страница может записывать файлы.Когда вашей странице нужно что-то сделать, напишите файл с описанием работы.Затем у вас есть программа, работающая с правами суперпользователя и ожидающая новых заданий.Он может работать непрерывно, если требуется быстрый ответ, или он может запускаться каждую минуту или каждые несколько минут с использованием записи в crontab.

1 голос
/ 25 мая 2011

Обычным методом будет иметь исполняемый файл, принадлежащий пользователю, от которого вы хотите его запустить, затем установите SUID бит.

Метод использования sudo обычнотребует ввода пароля пользователем (есть способы обойти это, но они ужасно сложны).

Полагаю, мне не нужно упоминать, что установка бита SUID - очень опасная вещь, да?Если есть любой другой способ сделать то, что вы хотите, вы должны его использовать.


Одна вещь, которую вы можете рассмотреть, это поставить вопрос не с точки зрения решения, которое вынужно, но с точки зрения проблемы, которую вы хотите решить.Запуск от имени root - это решение , которое не обязательно является хорошим.Отправьте что вы пытаетесь достичь, а не как, , и мы можем помочь вам гораздо менее опасным способом.

...