Почему эта команда 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
Другие вопросы по тегам