У меня есть shell_exec()
которая обращается к каталогу выше моего корня документа, поэтому мне нужно использовать sudo «как root», чтобы это произошло. (Я понимаю проблемы безопасности и принимаю меры для его решения).
Проблема в том, когда я запускаю shell_exec()
я получаю ошибку «sudo: должно быть setuid root» в файле apache error_log.
Я думал, что решение было для chmod 4750 сценария bash, который вызывается моим sheel_exec()
но это не делает работу.
Что такое «sudo: должен быть setuid root», пытаясь рассказать мне и как я могу его решить?
Является ли сам исполняемый файл sudo
setuid root? Возможно, вам понадобится
chown root: /usr/bin/sudo chmod u+s /usr/bin/sudo
В качестве альтернативы, вообще пропустите sudo
. Если ваш скрипт принадлежит root и имеет свой собственный бит setuid, тогда вам не нужно использовать sudo для получения привилегий root. На самом деле, это может быть более безопасным таким образом; вы гарантируете, что ваш веб-пользователь может использовать только этот скрипт, без необходимости редактировать sudoers. Для этого удалите sudo из shell_exec()
:
<?php shell_exec('/path/to/your/command'); ?>
Вы проверяли разрешения для своего скрипта?
Кто владеет сценарием?
Имеет ли пользователь сети права на sudo?
Чтобы устранить эту проблему, вам необходимо выполнить chown и chmod sudo file как root, как показано ниже.
chown root:root /usr/bin/sudo chmod 4111 /usr/bin/sudo chmod 0440 /etc/sudoers