Как разрешить пользователю веб-сервера запускать скрипт, которому требуются права sudo?

Как разрешить пользователю веб-сервера запускать скрипт, которому требуются права 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

Вам следует заставить корневой скрипт «тянуть» из обычного, а не заставлять последний «толкать» первый. В качестве наглядного примера:

  1. Создайте задание cron, которое проверяет список папок, которые будут созданы в текстовом файле.
  2. Пусть пользовательский скрипт lighttpd добавит нужную папку в этот текстовый файл.

Вы можете сделать это более элегантно с помощью системы очередей/обмена сообщениями, но это на ваше усмотрение.

Связанный контент