Можно ли заставить пользователя веб-сервера, 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 добавит нужную папку в этот текстовый файл.
Вы можете сделать это более элегантно с помощью системы очередей/обмена сообщениями, но это на ваше усмотрение.