добавление локального контента в /etc/sudoers.d/ вместо прямой модификации файла sodoers через visudo

32

Можете ли вы привести меня к некоторым примерам и более подробным инструкциям на /etc/sudoers.d/

Я хотел бы дать группе разрешение на выполнение некоторых команд, но не создавать ненужные лазейки в модели безопасности Ubuntu на многопользовательской машине.

В древние времена я делал несколько простых настроек sudoers, но теперь, видимо, /etc/sudoers.d/ - более правильный способ, и я хотел бы лучше понять его.

Павел Дебски
источник

Ответы:

43

Как следует из этого вопроса , /etc/sudoersэто системный файл конфигурации, который может автоматически изменяться при обновлении системы и является очень хрупким по отношению к неправильным изменениям. Вы можете потерять доступ или сделать вашу систему не загружаемой из-за неправильного изменения.

$ sudo cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#

(... some other content ...)

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

Вопреки тому, что вы могли ожидать, #includedirдиректива не является комментарием . Это также приводит sudoк тому, что все файлы в /etc/sudoers.dкаталоге считываются и анализируются (которые не заканчиваются на «~» или не содержат символ «.»).

$ ls -l /etc/sud*
-r--r----- 1 root root  755 sty 20 17:03 /etc/sudoers

/etc/sudoers.d:
total 7
-r--r----- 1 root root 958 mar 30  2016 README
$ sudo cat /etc/sudoers.d/README
#
# As of Debian version 1.7.2p1-1, the default /etc/sudoers file created on
# installation of the package now includes the directive:
# 
#   #includedir /etc/sudoers.d
# 
# This will cause sudo to read and parse any files in the /etc/sudoers.d 
# directory that do not end in '~' or contain a '.' character.
# 
# Note that there must be at least one file in the sudoers.d directory (this
# one will do), and all files in this directory should be mode 0440.
# 
# Note also, that because sudoers contents can vary widely, no attempt is 
# made to add this directive to existing sudoers files on upgrade.  Feel free
# to add the above directive to the end of your /etc/sudoers file to enable 
# this functionality for existing installations if you wish!
#
# Finally, please note that using the visudo command is the recommended way
# to update sudoers content, since it protects against many failure modes.
# See the man page for visudo for more information.
#

В отличие /etc/sudoersот содержимого /etc/sudoers.dвыживших обновлений системы, поэтому лучше создать файл там, чем модифицировать /etc/sudoers.

Вы можете редактировать файлы в этом каталоге с помощью visudoкоманды:

$ sudo visudo -f /etc/sudoers.d/veracrypt
  GNU nano 2.5.3        File: /etc/sudoers.d/veracrypt.tmp                      

# Users in the veracryptusers group are allowed to run veracrypt as root.
%veracryptusers ALL=(root) NOPASSWD:/usr/bin/veracrypt

Обратите внимание, что visudoможет использовать другой редактор вместо того, nanoкак описано в https://help.ubuntu.com/community/Sudoers

Вот еще несколько ссылок, которые я нашел полезными:

Павел Дебски
источник
4
Это не правда, что ошибки в файлах в /etc/sudoers.dне могут сбить sudo. Эти файлы объединены в /etc/sudoers. Те же правила применяются к этим файлам.
Tobltobs
2
Это верно, что вы МОЖЕТЕ сломать систему неподходящим файлом, как бы то ни было. #includedir - это не просто глупая конкатенация, в то время как есть некоторая проверка, которая позволяет обнаруживать наиболее очевидные ошибки и легко исправить. Однако будьте осторожны - вы всегда можете пораниться острым ножом, поэтому обращайтесь с ним осторожно ;-)
Павел Дебски
4
@RichardRiley, см. Unix.stackexchange.com/questions/244064/…
Xunnamius,