Найти в Дзене

Linux. Файл Sudoers.

Файл sudoers нужен для того, чтобы сопоставить пользователей, использующих команду sudo, и команды, которые им можно запустить. Этот файл сделан таким образом, что его можно использовать сразу на нескольких машинах. Доставлять на них можно, например, инструментами для управления конфигурациями такими, как Puppet, Ansible, Salt или Chef.

Редактировать файл /etc/sudoers нужно только с помощью команды visudo. Эта команда запускает редактор, настроенный в системе по умолчанию, но в отличие от открытия файла редактором напрямую, проверяет синтаксис файл. Неправильный синтаксис может нарушить работу системы и сделать недоступным получить привилегии root в системе.

Итак, давайте рассмотрим sudoers поближе. Если вы откроете этот файл в редакторе, то первое, что большинство строк закоментировано. Здесь обычно находится описание параметров, и параметры, которые не используются в данный момент в системе.

Далее, обычно идет набор строк, который определяет псевдонимы для группы хостов.

Host_Alias FILESERVERS = fs1, fs2
Host_Alias MAILSERVERS = smtp, smtp2

Такие псевдонимы можно назначить и выполняемым командам:

Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
Cmnd_Alias LOCATE = /usr/bin/updatedb
Cmnd_Alias DRIVERS = /sbin/modprobe

И пользователям:

User_Alias ADMINS = jsmith, mikem

Такие псевдонимы в будущем облегчают чтение и понимание файла sudoers, а также упрощает обновление файла. Имена псевдонимов, обычно указывают заглавными буквами.

Многие команды проверяют значения переменных окружения и меняют свое поведение в зависимости от того, что находят. По умолчанию передается только минимальный набор переменных окружения для команд. Чтобы передать дополнительные переменные окружения, их можно указать в следующем блоке файла sudoers, перечислив их в списке env_keep:

Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG"

Следующая строка:

Defaults mail_badpass

Заставляет систему отправлять уведомления о неудачных попытках ввода пароля sudo для настроенного пользователя mailto.

Строка:

Defaults secure_path = /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

задает переменную PATH. В этой переменной указываются места, где система будет искать приложения, которые запускаются с помощью команды sudo. Это поможет предотвратить запуск приложений из потенциально опасных мест.

Ну и самое главное для чего нужен файл sudoers, это строки спецификаций.

root ALL=(ALL) ALL
ADMINS ALL=(ALL) ALL
smith FILESERVERS=ALL
neo ALL=NOPASSWD: LOCATE

Эти строки означают следующее:

  • root может все и везде.
  • Пользователи, входящие в группу ADMINS, так же как и root, могут делать все что угодно.
  • smith - может запускать любую команду на серверах группы FILESERVIS. Поскольку в скобках не указан список пользователей, программа sudo будет запускаться от имени root.
  • neo - может запускать команду updatedb на всех серверах и при этом не вводить пароль.

Потенциально вызов программы может быть рассмотрен несколькими записями в файле sudoers. Давайте, рассмотрим следующую конфигурацию:

User_Alias ADMINS=smith, neo
User_Alias ZION_ADMINS = smith
%wheel ALL= (ALL) ALL
ZION_ADMINS ALL=(zion) NOPASSWD: ALL
ADMINS ALL=(ALL) NOPASSWD: /usr/sbin/logrotate

Здесь ADMINS могут запускать программу logrotate как обычный пользователь без пароля. Администраторы ZION могут выполнять любую команду от имени пользователя zion без пароля. Любой человек в группе wheel может выполнять любую команду от любого имени, но сначала должен пройти аутентификацию.

Если smith находится в группе wheel, она потенциально охватывается каждой из последней из строк. И как узнать какая строка будет определять поведение smith?

Здесь надо следовать простому правилу. sudo подчиняется последней соответствующей строке, причем совпадение определяется всеми четырьмя параметрами: имя пользователя, имя хоста, имя целевого пользователя и название команды. И если бы значение последних двух строк было бы отменено первой, то бедный smith все время бы вбивал пароль.

И, наконец, строка :

# includedir /etc/sudoers.d

Этой строкой заканчиваются все файлы sudoers. Со стороны может показаться, что это комментарий, но это не так. Эта строка говорит о том, что файлы в каталоге /etc/sudoers.d/ также рассматриваются как источники и применяются.

Заключение.

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

Ну и не забывайте подписываться в дзен и в телеге, чтобы не пропустить мои новые статьи.