Как запустить из PHP скрипт bash под пользователем root

Как запустить из PHP скрипт bash под пользователем root (со всеми разрешениями), а не с пользователем user – php default user?

thats мой результат после sudo visudo:

Defaults env_keep += "LINES COLUMNS" Defaults env_keep += "LSCOLORS" Defaults env_keep += "SSH_AUTH_SOCK" Defaults env_keep += "TZ" Defaults env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" Defaults env_keep += "EDITOR VISUAL" Defaults env_keep += "HOME MAIL" #User privilege specification root ALL=(ALL) ALL %admin ALL=(ALL) ALL # Uncomment to allow people in group wheel to run all commands # %wheel ALL=(ALL) ALL # Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL # Samples # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom # %users localhost=/sbin/shutdown -h now 

Вы можете использовать sudo:

 exec("sudo /your/script"); 

Вы должны разрешить выполнение скрипта без запроса пароля. Запустите sudo visudo в консоли и добавьте следующую строку в конец:

 nobody ALL = NOPASSWD: /your/script 

Вы должны правильно настроить режим файла, чтобы никто не мог модифицировать этот скрипт и помещать в него опасное содержимое (в корневой консоли):

 chown root:root /your/script chmod 755 /your/script 

Вы можете создать программу, которая является set-uid root. Это заставляет программу всегда запускаться с правами root. Это не работает со сценариями оболочки, поэтому вам нужно использовать программу, которая вызывает ваш скрипт .

В Linux вы обычно делаете это с помощью sudo . Постарайтесь быть как можно более конкретными, чтобы не давать сценарию слишком много разрешений.

Примеры использования sudo : http://aplawrence.com/Basics/sudo.html

Я бы добавил определенное правило, позволяющее этому скрипту вызываться nobody , используя sudo .

Недавно я опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash (в качестве пользователя: apache / www-data или root при необходимости). Получить его здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

 $shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); $return1 = $shell->exeCmd('/full/path/to/script.sh');