Назад | Перейти на главную страницу

Предоставить разрешение без пароля для определенного скрипта от имени конкретного пользователя с помощью sudo

У меня есть сервер под управлением 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 (по умолчанию оболочка без входа в систему).

Я оставлю пост, может быть полезным другим.