У меня ситуация, когда я хочу, чтобы главный пользователь-администратор (с sudo для всех) имел беспарольный sudo как другой пользователь для одной команды. Насколько мне известно, это должно дать следующее в /etc/sudoers:
ramo ALL=(otherUser) NOPASSWD: /usr/bin/command
ramo ALL=(ALL) ALL
Но похоже, что эти две строки конфликтуют, или вторая перезаписывает первую. Есть идеи, как это сделать?
Ваше здоровье
Рамо
EDIT: Оказывается, я немного не понял, как работает sudo при указании пользователя. У меня было впечатление, что если у вас ALL=(otherUser), то вам не нужно «sudo -u otherUser», а можно просто sudo. Это не так.
решение1
Порядок важен, а поведение описано на странице руководства sudoers(5):
Когда для пользователя совпадают несколько записей, они применяются по порядку. При наличии нескольких совпадений используется последнее совпадение (которое не обязательно является наиболее конкретным совпадением).
Согласно вашим исходным правилам, «(ALL) ALL» является последним совпадением, поэтому sudo запрашивает пароль.
Работает следующий /etc/sudoers:
ramo ALL=(ALL) ALL
ramo ALL=(otherUser) NOPASSWD: /bin/whoami
например:
$ sudo -k /bin/whoami
[sudo] password for ramo:
root
$ sudo -k -u otherUser /bin/whoami
otherUser
$ sudo -k -u otherUser /bin/true
[sudo] password for ramo:
$ sudo -k /bin/true
[sudo] password for ramo:
Протестировано на Fedora 19 с sudo-1.8.6p7-1
решение2
Я думаю, что можно отрицать с помощью '!'. Попробуйте вторую строку
ramo ALL=(ALL) !/usr/bin/command