sudo не работает по определенным командам

15

У меня довольно странная проблема с sudoDebian 8. Пользователи не могут выполнять некоторые команды в /etc/sudoers.d. Я использую Chef для распространения конфигураций, поэтому все файлы создаются автоматически.

Пример:

Этот конфиг работает отлично

root@server:~# cat /etc/sudoers.d/nginx 
# This file is managed by Chef.
# Do NOT modify this file directly.

user  ALL=(root) NOPASSWD:/usr/sbin/nginx

И это не удается

root@server:~# cat /etc/sudoers.d/update-rc.d 
# This file is managed by Chef.
# Do NOT modify this file directly.

user  ALL=(root) NOPASSWD:/usr/sbin/update-rc.d

user@www42:~$ sudo update-rc.d 
[sudo] password for user: 
Sorry, user user is not allowed to execute '/usr/sbin/update-rc.d' as root on server.

Что может быть не так?

Диагностика:

Mar  5 12:12:51 server sudo:    user : command not allowed ; TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/sbin/update-rc.d
Mar  5 12:14:25 www42 su[1209]: pam_unix(su:session): session closed for user user

root@server:~# sudo --version
Sudo version 1.8.10p3
Configure options: --prefix=/usr -v --with-all-insults --with-pam --with-fqdn --with-logging=syslog --with-logfac=authpriv --with-env-editor --with-editor=/usr/bin/editor --with-timeout=15 --with-password-timeout=0 --with-passprompt=[sudo] password for %p:  --disable-root-mailer --with-sendmail=/usr/sbin/sendmail --with-rundir=/var/lib/sudo --mandir=/usr/share/man --libexecdir=/usr/lib/sudo --with-sssd --with-sssd-lib=/usr/lib/x86_64-linux-gnu --with-selinux --with-linux-audit
Sudoers policy plugin version 1.8.10p3
Sudoers file grammar version 43
Лейн Ивакура
источник

Ответы:

28

Проблема в точке update-rc.d/etc/sudoers.d/update-rc.d); от man sudo:

Директива #includedir может использоваться для создания каталога sudo.d, в который системный менеджер пакетов может перетаскивать правила sudoers как часть установки пакета. Например, учитывая:

#includedir /etc/sudoers.d

sudo будет читать каждый файл в /etc/sudoers.d, пропуская имена файлов, оканчивающиеся на ~ или содержащие. символ, чтобы избежать проблем с менеджером пакетов или редактором временных / резервных файлов.

Безумный Шляпник
источник
3
Это 2 сомнительных дизайнерских решения в sudoers. Использование #в качестве комментария и как часть директивы, а также игнорирование файлов. Интересно (раздражает) visudo -f some.file не предупреждает, что это может быть проигнорировано при выходе. Quarulous альбатрос может быть успокоен с помощью простого upvote.
user9517
1
@istheEnglishway полностью согласен. Но странный альбатрос остается странным.
MadHatter
Игнорирование файлов с ~ (или с некоторыми расширениями) на самом деле очень хорошая идея, поскольку вы определенно не хотите, чтобы старая конфигурация в файле резервной копии была активной после редактирования. И вы, вероятно, не хотите вручную проверять, оставил ли редактор на этом компьютере файл резервной копии. Хотя, конечно, это можно сделать, просто включив только файлы с расширением из белого списка (например *.cf), но тогда может случиться так, что функция будет добавлена ​​впоследствии, и некоторые пользователи будут жаловаться на то, что их заставят использовать расширение набора.
ilkkachu
Что касается хеш-знака, используемого как в комментариях, так и в директивах include, кто-нибудь до проверки того, что обратная совместимость является причиной этого тоже?
ilkkachu
5

Попробуйте запустить, sudo -llчтобы получить список команд / настроек, применимых к вашему пользователю.

Если (как может показаться так) ваше предложение update-rc.d не отображается, вы можете подумать о корректировке своих рецептов chef для развертывания одного файла sudoers.d на пользователя, а не нескольких.

Вы также можете подумать, может ли быть оправданным файл sudoers, связанный с группой.

Ответы на этот вопрос могут помочь: /ubuntu/246455/how-to-give-nopasswd-access-to-multiple-commands-via-sudoers

iwaseatenbyagrue
источник