Изменения, внесенные в файлы, /etc/sudoers.d
остаются в силе при обновлении системы. Это может предотвратить блокировку пользователя при обновлении системы. Ubuntu любит это поведение. Другие дистрибутивы также используют этот макет.
По моему опыту, правила для файлов в этом каталоге более строгие, чем для /etc/sudoers
. Это включает в себя:
- Ошибки в файле не вызывают
sudo
сбой. Тем не менее, файл был проигнорирован.
- Правила доступа кажутся менее строгими. Это позволяет соответствующей группе или другому читать файл. Я не верю, что это было возможно с
/etc/sudoers
. Разрешения на запись должны быть ограничены root
для поддержания безопасности. Текущая версия sudo для Ubuntu предоставляет разрешения на чтение для группы или других пользователей. (Эта возможность позволяет проверять доступ sudo, не требуя root-доступа.)
Команда visudo
только по умолчанию /etc/sudoers
. Он отредактирует и проверит любой файл, который вы укажете с помощью -f
опции. Я использую эту возможность для редактирования файлов, которые будут автоматически установлены как /etc/sudoers
или в /etc/sudoders.d
. Однако определения из других файлов могут быть не найдены. Лучше сделать файл независимым.
Возможность иметь автономные файлы упрощает для приложения sudo
возможность установки и удаления их, когда оно не установлено. Инструменты автоматической настройки также могут использовать эту возможность.
Я использовал эту возможность, чтобы изолировать изменения, необходимые для предоставления доступа к определенным группам пользователей в определенных системах.
sudo
к сбою». Я сломал sudo на RHEL с неверным синтаксисом в файле из /etc/sudoers.d. Это потребовало значительных усилий для исправления, и я думаю, что рекомендуется всегда использоватьvisudo -f
для редактирования этих файлов.Да, вы можете использовать
visudo
для редактирования этих файлов. Все, что вам нужно сделать, это указать имя файла, который вы хотите редактировать с помощью-f
опции. Например:Или, если необходимо:
Документация
От
man visudo
:В итоге:
Синтаксис: оба
visudo
иvisudo -f
выполняют одинаковую проверку синтаксиса .Полномочия / Владение: как функция, добавленная для помощи в администрировании больших систем , файлы, отредактированные в соответствии с этим
visudo -f
, не проверяются на предмет владения или прав: это позволяет проверять синтаксис файла в автономном режиме или как часть системы контроля версий.Зачем использовать
/etc/sudoers.d/
Обычно
/etc/sudoers
находится под контролем диспетчера пакетов вашего дистрибутива. Если вы внесли изменения в этот файл и менеджер пакетов хочет обновить его, вам придется вручную проверить изменения и утвердить их объединение в новую версию. Поместив свои локальные изменения в файл в/etc/sudoers.d/
каталоге, вы избегаете этого шага вручную, и обновления могут выполняться автоматически.Когда
sudo
игнорировать файл в/etc/sudoers
?Если ваш
/etc/sudoers
файл содержит строку:затем
sudo
будет читать файлы в каталоге/etc/sudoers.d
.Исключения:
~
.
символЭто делается (а) для удобства менеджеров пакетов, а также (б), чтобы файлы резервных копий из редакторов игнорировались.
источник
visudo -f
безопасно?visudo -f
редактируется безопасным способом, как обычноvisudo
. Вот почему у нас естьvisudo
и почему он предоставляет-f
возможность.-f
как это может сделать байт кому-то, кто затем скопирует его в /etc/sudoers.d/ без двойной проверки./etc/sudoers.d/mysudorules.sudo
и не смог понять, почему правила внутри не были применены, прежде чем читать твой ответ./sudoers.d/mysite.co.uk
не работал и после переименования вmysite
него работает! :)Потому что автоматизированным инструментам (таким как Chef или Puppet) проще помещать отдельные файлы в этот каталог, а не вносить изменения
/etc/sudoers
, которые могут быть хрупкими.Файлы в
/etc/sudoers.d
(по сути) объединены. Вы увидите несколько других экземпляров этого шаблона/etc
, например,/etc/cron.d
и/etc/logrotate.d
.источник
Другое преимущество использования,
visudo -f
как упомянуто в некоторых ответах, заключается в наличии соответствующей опции-c
или--check
проверки того, что у вас нет неверной информации в файле sudoers.d или в любом другом файле, который вы, возможно, захотите поместить в sudoers.d. Это действительно удобно в случаях, упомянутых с помощью автоматизированных инструментов, так как вы можете запустить, например,Это автоматически проверяет файл (нет вывода из-за -q) и только если это НЕ возвращает ошибку (выход 1 означает недопустимый файл sudoers), тогда он скопирует файл в sudoers.d, таким образом, вы можете создать файл и работать над этим без необходимости делать это правильно с первого раза (использование
sudo visudo -f /etc/sudoers.d/myfile
должно быть успешным или оно отбрасывает содержимое, если вы не исправите это).Также, предостережение относительно этих утверждений из других ответов.
Файлы в /etc/sudoers.d должны придерживаться того же синтаксиса, что и / etc / sudoers, потому что под прикрытием система просто объединяет все файлы с последним в «победе», если есть несколько записей для одного и того же особая обстановка.
Если права доступа к файлам в /etc/sudoers.d/ ужасно неверны (доступны для записи), то они игнорируются, возможно, именно из-за этого пропущены неверные файлы, в противном случае вы можете серьезно нарушить
sudo
команду, имея недопустимые sudoers. D файл с правильными разрешениями.Вы можете позволить файлам sudoers быть доступными для чтения всем, если вы случайно разрешите «другому» разрешение на запись, которое вам нужно sudo как другой пользователь или из корневого терминала, запустите эту команду. Это также может сломаться, если файл принадлежит кому-то, кроме root: root.
Я только что подтвердил, что если я бегу,
chmod o+w /etc/sudoers.d/vagrant
я больше не могу использовать sudo в качестве бродячего пользователя, он запрашивает у меня пароль и затем терпит неудачу.Когда я запустил
sudo -l
просмотр разрешений для примененной команды как другой действительный пользователь sudo, я также получил предупреждение о разрешениях для файлов. Это та же команда, которую я использовал, чтобы подтвердить, что «бродячий» пользователь потерял sudo, когда я применилo+w
разрешения к файлу, предоставив этому пользователю разрешения sudo.источник
Просто краткое дополнение к любому общему ответу ... ни один из других ответов не устранил мою проблему, которая заключалась в том, что порядок имеет значение.
Если ваши строки работают в sudoers, но не в sudoers.d, попробуйте переместить #include или изменить порядок файлов sudoers.d (с помощью префикса с номером). Кажется, что наиболее конкретная вещь должна быть первой в файле.
У меня было что-то вроде:
И 2-й не имел никакого эффекта, потому что первый уже соответствовал. NOPASSWD - это не условие, а какой-то способ изменить действие.
И это не было очевидно, потому что это не было в одном файле, из-за каталога sudoers.d.
источник