@ Карта сайта News Автора!

Bog BOS: sudo: выполнение программ от чужого имени

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL

Последнее изменение файла: 2017.10.17
Скопировано с www.bog.pp.ru: 2024.11.23

Bog BOS: sudo: выполнение программ от чужого имени

Пакет sudo позволяет системному администратору давать права определенным пользователям (или группам) на исполнение конкретных программ с правами другого пользователя (и записывать эти действия в журнал). Возможна привязка списка допустимых команд к имени хоста, что позволяет использовать один файл настройки на нескольких хостах с различными полномочиями. Обычно требует аутентификации пользователя (например, ввода пароля). Позволяет избегать слишком частого ввода пароля (по умолчанию - 5 минут). Для борьбы с подменой динамических библиотек из окружения удаляются переменные типа LD_* и т.п., а также IFS, ENV, BASH_ENV, KRB_CONF, KRB5_CONFIG, LOCALDOMAIN, RES_OPTIONS, HOSTALIASES. Можно также удалять текущую директорию из PATH. Поддержка LDAP (/etc/sudo-ldap.conf, sudo-ldap.conf(5), sudoers.ldap(5)) и /etc/nsswitch.conf ("sudoers: ldap files").

Текущая версия 1.8.21 (сентябрь 2017, RHEL5 - 1.7.2p1, RHEL6 - 1.8.6p3, RHEL7 - 1.8.6p7 и 1.8.19p2; делавшая ветку 1.8 команда выкинула работы 1.7.5-1.7.10).

Лицензия - ISC-style (BSD-like).

Состоит из файла настройки /etc/sudoers, программы его редактирования visudo и клиентской программы sudo (проигрывание журнала), настройка политик и дополнений. В статье также описывается процедура установки (1.6) из исходных текстов и ключи configure.

visudo

Утилита visudo позволяет осуществить безопасное редактирование /etc/sudoers, она осуществляет блокировку от одновременных изменений и проверяет файл на корректность после выхода из текстового редактора. По умолчанию используется /bin/vi, можно изменить установить в переменной editor или разрешить (не советую) использование переменных окружения VISUAL и EDITOR в переменной env_editor. Не обрабатывает файлы из #includir. Ключи:

Описание прав пользователей

В файле /etc/sudoers описываются права пользователей (real uid, не euid) на выполнение команд с помощью sudo. Состоит из операторов трех типов: определение синонимов (Alias), переопределение конфигурационных параметров и описание прав пользователей. Если для одного пользователя подходит несколько описаний, то действует последнее. Можно использовать шаблоны в стиле shell (glob(3) и fnmatch(3)) для имён хостов, путей файлов и аргументов команд (опасно), обработка классов символов появилась в 1.7. Комментарии начинаются с символа '#', если это не uid и не команды #include/#includedir. Команды #include и #includedir (например, /etc/sudoers.d, файлы обрабатываются в лексикографическом порядке, не обрабатываются файлы с "~" и "." в конце имени) позволяет включить содержимое указанного файла или каталога (не более 128 уровней вложенности), макрос '%h' расширяется в короткое имя хоста. Продолжение команды на следующей строке обозначается символом '\' в конце строки. Восклицательный знак перед именем означаниет исключение из предыдущего списка (не отрицание!).

Синонимы:

Имя может состоять из прописных латинских букв, цифр и подчеркивания. Предопределены синонимы 'ALL' для каждого типа. netgroup - это NIS. Имена можно заключать в кавычки, специальные символы могут быть представлены в виде \x20 (пробел).

Пользователь может определяться:

Эффективный пользователь может определяться:

Хост может определяться (восклицательный знак перед именем означает отрицание; сетевая маска записывается в точечной записи или CIDR (число бит); при указании имени хоста можно использовать шаблоны в стиле shell, но лучше при этом использовать опцию fqdn; не стоит использовать имя localhost):

Команда может определяться (восклицательный знак перед именем означает отрицание (вычитать опасные команды из ALL - плохая идея); можно использовать шаблоны в стиле shell для имени файла и аргументов (в 1.7 появились классы POSIX); необходимо защищать обратным слешом от интерпретации разборщика символы запятой, двоеточия, равенства и обратного слеша; пустой список аргументов обозначается как ""; полное имя каталога должно оканчиваться на "/", разрешает выполнить любую команду из данного каталога, но не из подкаталога):

Конфигурационные параметры можно переопределить для всех пользователей, для определенных пользователей, для определенных хостов, для выполняемых от имени указанного пользователя, для команд (указаны в порядке приоритета разбора, используется последний подходящий):

Параметр задаётся в виде "имя = значение", "имя += значение", "имя -= значение", "имя" или "!имя" (необходимо использовать символы '"' и '\' в значениях при необходимости; += и -= добавляют и удаляют элементы списка):

Описание прав пользователей (списки через запятую, теги и имена целевых пользователей наследуются):
список-пользователей список-хостов = список-описаний-команд [: список-хостов = список-описаний-команд ] ...

описание-команды ::= [ ( список-целевых-пользователей-u[:список-целевых-пользователей-g]) ] [ ( ROLE=роль-SELinux|TYPE=тип-SELinux) {тег:} команда

Теги:

Устанавливаются переменные окружения: MAIL (-i), HOME (-i, -H, -s и set_home, always_set_home), LOGNAME, PATH, SUDO_COMMAND, SUDO_GID, SUDO_UID, SUDO_USER, USER, USERNAME.

В некоторых дистрибутивах по умолчанию добавлены непомерные разрешения: в RHEL7 пользователям из группы wheel разрешено выполнять любые команды.

Нельзя давать права на выполнение программ, которые исходный пользователь может перезаписать (не поможет даже проверка контрольной суммы).

Настройка политик и дополнений /etc/sudo.conf

Настройка политик и дополнений журнализации настраивается в /etc/sudo.conf (sudo.conf(5), sudo_plugin(8):

Команда sudo

Команда sudo выполняет указанную в качестве параметра команду от имени другого пользователя в зависимости от настроек. Извещение о неавторизованных попытках посылаются по email по адресу, указанному в mailto. Все использования sudo записываются в syslog и журнал. При отсутствии команды от имени другого пользователя выполняется редактор (-e, sudoedit) или командная оболочка (-s) или имитируется начальный вход в систему (-i). Устанавливается требуемый реальный идентификатор пользователя и группы, euid, egid и список групп. Перерабатываются переменные окружения (см. "sudo -V"). Запрашивается пароль текущего пользователя и делается отметка, чтобы не запрашивать следующие timestamp_timeout минут.

Ключи:

Утилита sudoreplay

Утилита sudoreplay проигрывает в реальном времени выходной журнал сессии sudo. В качестве параметра указывается номер сессии (см. ключ --list). Управление проигрыванием: " " - пауза, "<" - уменьшить скорость вдвое, ">" - увеличить скорость вдвое, "Ввод" - промотать до события. Ключи:

Установка 1.6.3p5 на RedHat 6.2

  1. скачать и разархивировать
  2. make distclean
  3. ./configure --sysconfdir=/usr/local/etc  --with-pam --with-logfac=authpriv --with-goodpri=info --with-badpri=err --with-ignore-dot --with-mailto=... --with-fqdn --disable-root-sudo
  4. отредактировать Makefile
  5. make
  6. make install
    1. /usr/local/bin/sudo
    2. /usr/local/bin/visudo
    3. /usr/local/etc/sudoers
    4. /usr/local/man
      1. man5/sudoers.5
      2. man8/sudo.8
      3. man8/visudo.8
  7. настройка (visudo, samples.sudoers)
  8. настройка syslog.conf (sample.syslog.conf)
  9. /etc/pam.d/sudo (в качестве образца: sample.pam или /etc/pam.d/su)

Ключи configure 1.6.3

Некоторые ключи configure:

Ссылки

@ Карта сайта News Автора!

Bog BOS: sudo: выполнение программ от чужого имени

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru