Последнее изменение файла: 2007.06.22
Скопировано с www.bog.pp.ru: 2012.02.04
Bog BOS: sudo: выполнение программ от чужого имени
Пакет sudo позволяет системному администратору давать права определенным пользователям
(или группам) на исполнение конкретных программ с правами другого пользователя
(и записывать эти действия в журнал). Возможна привязка списка допустимых команд к имени хоста,
что позволяет использовать один файл настройки на нескольких хостах
с различными полномочиями.
Обычно требует аутентификации пользователя (например, ввода пароля).
Позволяет избегать слишком частого ввода пароля (по умолчанию - 5 минут).
Для борьбы с подменой динамических библиотек
из окружения удаляются переменные типа LD_* и т.п., а также IFS, ENV, BASH_ENV,
KRB_CONF, KRB5_CONFIG, LOCALDOMAIN, RES_OPTIONS, HOSTALIASES. Можно также
удалять текущую директорию из PATH.
В файле /etc/sudoers описываются права пользователей на выполнение
команд с помощью sudo.
Состоит из операторов трех типов: определение синонимов (Alias), переопределение
конфигурационных параметров и описание прав пользователей.
Если для одного пользователя подходит несколько описаний, то действует последнее.
Комментарии начинаются с символа '#', если это не uid.
Продолжение команды на следующей строке обозначается символом '\' в конце строки.
Синонимы (предопределен синоним ALL):
User_Alias имя = список-пользователей-через-запятую
Runas_Alias имя = список-пользователей-через-запятую
Host_Alias имя = список-хостов-через-запятую
Cmnd_Alias имя = список-команд-через-запятую
Имя может состоять из прописных латинских букв, цифр и подчеркивания.
Предопределены синонимы 'ALL' для каждого типа. На одной строке может размещать
несколько описаний синонимов, разделяя их символом ':'.
netgroup - это NIS.
Пользователь может определяться (восклицательный знак перед именем
означает отрицание):
имя
%имя-группы
+netgroup
User_Alias
Эффективный пользователь может определяться
(восклицательный знак перед именем означает отрицание):
имя
#uid
%имя-группы
+netgroup
Runas_Alias
Хост может определяться (восклицательный знак перед
именем означает отрицание; сетевая маска записывается в точечной записи или CIDR;
при указании имени хоста можно использовать шаблоны в стиле shell, но лучше при
этом использовать опцию fqdn; не стоит использовать имя localhost):
имя-хоста
IP-адрес
network/netmask
+netgroup
Host_Alias
Команда может определяться
(восклицательный знак перед именем означает отрицание;
можно использовать шаблоны в стиле shell для имени файла и аргументов;
необходимо защищать обратным слешом от интерпретации разборщика
символы запятой, двоеточия, равенства и обратного слеша;
пустой список аргументов обозначается как "";
полное имя каталога должно оканчиваться на "/", разрешает выполнить
любую команду из данного каталога, но не из подкаталога):
полное-имя-файла
полное-имя-файла аргументы
каталог
Cmnd_Alias
Конфигурационные параметры можно переопределить для всех
пользователей, для определенных пользователей, для определенных хостов,
для команд, выполняемых от имени указанного пользователя:
Параметр задаётся в виде "имя = значение", "имя += значение",
"имя -= значение", "имя" или "!имя" из следующего списка (необходимо использовать
символы '"' и '\' в значениях при необходимости; += и -= добавляют и удаляют
элементы списка):
флаги
authenticate (on; пользователь должен вводить свой пароль)
env_editor (off; visudo будет использовать переменную окружения VISUAL
или EDITOR; очень не рекомендуется)
syslog_badpri (alert; какой приоритет syslog использовать при неудачах)
syslog_goodpri (notice; какой приоритет syslog использовать
при удачном выполнении)
timestampdir (/var/run/sudo)
verifypw (all; запрашивать ли пароль при использовании ключа "-v": all,
any, never, always)
список
env_check (переменные окружения удаляются, если содержат '%' или '/')
env_delete
env_keep (список переменных, не сбрасываемых по env_reset)
Описание прав пользователей (списки через запятую,
теги и имена целевых пользователей наследуются):
список-пользователей список-хостов = список-описаний-команд [: список-хостов = список-описаний-команд]
описание-команды ::= [ (список-целевых-пользователей) ] {тег:} команда
Теги: NOPASSWD (не запрашивать пароль текущего пользователя),
PASSWD, NOEXEC, EXEC.
Команда sudo выполняет указанную в качестве параметра команду
от имени другого пользователя в зависимости от настроек.
При отсутствии команды от имени другого пользователя выполняется редактор (-e)
или командная оболочка (-s) или имитируется начальный вход в систему (-i).
Устанавливается требуемый реальный идентификатор
пользователя и группы, euid, egid и список групп. Может запрашиваться
пароль текущего пользователя.
Ключи:
-H (установить HOME как описано в /etc/passwd для целевого пользователя)
-L (показать список возможных параметров с оисанием)
-P (не устанавливать список групп)
-S (читать пароль с stdin вместо tty)
-V (показать версию sudo; для root выдаются также параметры установки)
-k (обнулить допустимое время использования sudo без повторного введения
пароля)
-K (аналогично, но более действенным способом)
-b (выполнить команду в фоновом режиме)
-e имя-файла (редактировать указанный файл, в настройках должно быть разрешено
выполнять команду sudoedit)
-h (вывести описание команды)
-i (имитируется начальный вход в систему)
-l (показать список разрешенных команд)
-p формат (задаёт текст приглашения при вводе пароля)
-s (запустить командную оболочку)
-u имя-пользователя (с правами какого пользователя исполнить команду; по
умолчанию - root)
-u #uid
-v (продлевает допустимое время использования sudo без повторного введения
пароля на очередные 5 минут)
--with-goodpri= (какой приоритет syslog использовать при удачном выполнении)
--with-badpri= (какой приоритет syslog использовать при неудачах)
--with-logpath=/var/log/sudo.log
--with-loglen=80 (длина строк в файле; 0 - бесконечная)
--with-ignore-dot (игнорировать "." в $PATH)
--with-mailto=root (кому посылать письма)
--with-mailsubject="*** SECURITY information for %h ***"
--without-mail-if-no-user (не ябедничать, если пользователя нет в sudoers)
--with-mail-if-no-host (ябедничать, если хоста нет в sudoers)
--with-mail-if-noperms (ябедничать, если команды нет в списке разрешённых)
--with-passprompt="Password:" (%h расширяется в имя хоста, %u - в имя пользователя)
--with-fqdn (помещать в журнал и sudoers полное доменное имя хоста)
--with-umask=022 (umask для выполняемой команды)
--without-umask (не менять umask при выполнении команды)
--with-runas-default=root
--with-exempt=группа (пользователи из данной группы не должны вводить пароль, лучше
использовать NOPASSWD в sudoers)
--with-secure-path=/bin:/usr/ucb:/usr/bin:/usr/sbin:/sbin:/usr/etc:/etc
(использовать вместо $PATH, не действует на пользователей из группы исключений)
--without-lecture (не закатывать лекцию при первом вызове)
--with-editor=имя-программы (текстовый редактор, используемый visudo)
--with-env-editor (visudo будет использовать переменную окружения VISUAL или EDITOR;
очень не рекомендуется)
--disable-authentication (не запрашивать пароль)
--disable-root-sudo (запрещать использование sudo для root, очень рекомендуется)
--enable-log-host (записывать имя хоста в журнал)
--enable-noargs-shell (разрешать запуск sudo без параметров - выход в shell)
--disable-path-info (не уточнять причину отказа выполнения команды)