Как разрешить пользователю веб-сервера запускать скрипт, которому требуются разрешения sudo?
Можно ли сделать пользователь веб-сервера, lighttpd
в моем случае, чтобы вызвать конкретный скрипт, который нужно запустить с sudo
разрешения?
Я хочу только lighttpd
пользователь сможет запустить этот сценарий с sudo
разрешения.
Сценарий, давайте назовем это createFolder.sh
, создает папку из шаблона на верхнем уровне общего ресурса. Пользователи не имеют разрешений на запись на верхнем уровне общего ресурса, но должны иметь разрешение на запись во вновь созданной структуре папок. Таким образом, сценарий устанавливает правильные разрешения для подпапок, и именно здесь необходимо использовать sudo
происходит от (chown
, chmod
а также setfacl
).
Причина, по которой я хотел бы использовать для этого веб-интерфейс, заключается в том, что пользователи могут вставлять данные для имени папки и параметров, которые будут определять точную структуру папки.
Я думал, что это будет так же просто, как добавить запись в /etc/sudoers
чтобы позволить lighttpd
пользователь запустить createFolder.sh
без пароля Похоже, я ошибся, так как получаю следующую ошибку:
sudo: невозможно mkdir /var/db/sudo/lighttpd: разрешение отклонено
Мы надеемся, что вы получили обычную лекцию от местного системного администратора. Обычно это сводится к этим трем вещам:
1) Уважать частную жизнь других.
2) Подумайте, прежде чем печатать.
3) С большой силой приходит большая ответственность.sudo: tty отсутствует и не задана программа askpass
Если бы можно было настроить сценарий на постоянную работу от имени пользователя с необходимыми правами, он бы разобрался с ним, но я не смог найти, как это сделать или возможно ли это.
Как примечание, я изучил Linux самостоятельно, и даже если я чувствую уверенность в своих силах, я не специалист и всегда стремлюсь к улучшению.
Я использую CentOS 7
РЕДАКТИРОВАТЬ: я решил проблему с помощью inotify, чтобы вызвать мой createFolder.sh
скрипт при изменении текстового файла. Смотрите правильный ответ и его комментарии. Спасибо, что указали мне правильное направление, ребята.
1 ответ
У вас должен быть корневой скрипт "тянуть" из обычного, а не последний "толкать" к первому. В качестве иллюстративного примера:
- Создайте задание cron, которое проверяет список папок, которые будут созданы в текстовом файле.
- Пользовательский скрипт lighttpd должен добавить нужную папку в этот текстовый файл.
Вы можете сделать это более элегантно с системой очередей / обмена сообщениями, но это ваше дело.