У меня есть сервер под управлением Debian Squeeze с последними обновлениями. Я пытался настроить sudoers
файл, чтобы позволить пользователю www-data
выполнение определенного shell-скрипта от имени конкретного пользователя. я использовал visudo
для этого и добавил строку:
www-data ALL=(img) NOPASSWD: /path/to/script/imgsync.sh
Затем я попытался назвать это пользовательскими www-данными (сначала я перешел от root к www-data):
sudo -u img /path/to/script/imgsync.sh
К моему удивлению, он все еще запрашивает пароль:
[sudo] password for www-data:
Я ожидал NOPASSWD:
позаботиться об этом?
Что меня действительно озадачивает: у меня есть другой сервер с такой же настройкой, где он работает без пароля. Кроме того, у меня есть другие аналогичные разрешения на том же сервере, которые также работают без пароля.
Я даже добавил строчку
Defaults:www-data !authenticate
с visudo (просто для проверки, я не хочу этого). Затем, когда я попытался снова, я получил (противоречивое) сообщение об ошибке:
К сожалению, пользовательские www-data не могут выполнять '/path/to/script/imgsync.sh' как img на имени сервера.
Как я могу заставить его работать, не вводя пароль (и не давая больше прав на www-данные)?
Оказывается, в приведенной выше настройке нет ничего плохого. В моих тестах скрипт обнаружил каталог, в котором пользователь img
не хватало разрешений, что привело к описанному результату.
Хотя сейчас все работает, я все еще немного недоволен бесполезным сообщением об ошибке / поведением dash
(по умолчанию оболочка без входа в систему).
Я оставлю пост, может быть полезным другим.