Почему эта команда sudoer не запускается от имени пользователя root?
Я хочу дать PHP доступ к очень конкретному скрипту, используя конфигурацию под /etc/sudoers.d
,
Итак, я сделал следующее:
visudo -f /etc/sudoers.d/99-php
И ввел это правило sudo:
www-data ALL = (root) NOPASSWD: /etc/my_script.sh
Внутри /etc/my_script.sh
скрипт я создаю папку и несколько файлов под /tmp
прежде чем удалить их снова.
Тестировать:
su www-data
/etc/my_script.sh
Это дает мне много ошибок разрешения как это:
rm: cannot remove «/tmp/my_file.txt»: Access denied
Предполагается, что мой скрипт вообще не запускается от имени root.
Так что я могу сделать, чтобы это работало?
2 ответа
Вы должны выполнить команду, используя sudo.
sudo /etc/my_script.sh
Редактирование файла suduoers не означает, что каждый вызов скрипта выполняется от имени пользователя root, просто им разрешено делать это, если он вызывается правильно.
Имеет ли смысл помещать скрипт в / etc, это отдельный вопрос.
Во-первых, как сказал dmourati, вам все равно нужно вызвать скрипт с sudo
, а не просто запустить его.
Во-вторых, вы действительно не должны помещать сценарии в /etc
- особенно если эти сценарии должны запускаться веб-сервером.
В-третьих, предоставление пользователю доступа к запуску сценария оболочки в качестве пользователя root в значительной степени равнозначно предоставлению им полного доступа root. Слишком легко спастись в оболочку, когда у тебя есть такой большой доступ к sudo. Вместо того, чтобы помещать весь сценарий оболочки в файл sudoers, вы должны выяснить, какие конкретные команды внутри сценариев оболочки требуют привилегий root и изменить сценарий для вызова этих конкретных команд с помощью sudo
, Другими словами, в сценарии, где у вас есть строка с надписью
rm /tmp/myfile.txt
это должно сказать
sudo rm /tmp/myfile.txt
И соответствующая строка sudoers должна быть
www-data ALL = (root) NOPASSWD: rm /tmp/myfile.txt