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

427
Hugo Paiva

Можно ли заставить пользователя веб-сервера 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 ответ на вопрос

0
Andre Terra

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

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

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

Инструменты Inotify также могут быть использованы для получения мгновенного ответа от серверного скрипта Sampo Sarrala 7 лет назад 0
Андре Терра спасибо за предложение о том, как подойти к проблеме. Теперь, когда вы упомянули об этом, я не могу смотреть на проблему по-другому. Работа cron может определенно работать, но, как вы сказали, это не будет очень элегантным решением. Я постараюсь использовать Inotify (спасибо @Sampo Sarrala), так как его проще настроить, чем систему очередей / обмена сообщениями. Я дам вам, ребята, знать результат как можно скорее. Hugo Paiva 7 лет назад 1

Похожие вопросы