The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

sudoers ()
  • >> sudoers (5) ( Русские man: Форматы файлов )
  • sudoers (5) ( Linux man: Форматы файлов )
  •  

    НАЗВАНИЕ

    sudoers - список пользователей, с указанием того, что они могут выполнять  

    ОПИСАНИЕ

    Файл sudoers содержит два типа данных: псевдонимы (в основном переменные) и определения пользователей (где определяется кто что может выполнять). Грамматика sudoers будет описана ниже в Расширенной Форме Бэкуса-Наура (EBNF). Не отчаивайтесь, если вы не знаете,что такое EBNF; это довольно просто, и к определениям, приводимым далее, будут даваться пояснения.  

    Краткое руководство по -1EBNF

    -1EBNF это краткий и точный способ описания грамматики языка. Каждое определение -1EBNF происходит из последовательности правил. Т.е.

    символ ::= определение | альтернатива1 | альтернатива2 ...

    Каждая последовательность правил ссылается на другие и, таким образом, образует грамматику языка. -1EBNF также содержит следующие операторы, которые наверняка покажутся знакомыми многим читателям. Однако, не спутайте их со знаками подстановки, которые имеют другое значение.

    "?"
    Означает, что предшествующий символ (или группа символов) является необязательным. То есть, может встречаться или вовсе отсутствовать.
    "*"
    Означает, что предшествующий символ (или группа символов) может встречаться ноль или более раз.
    "+"
    Означает, что предшествующий символ (или группа символов) может встречаться один или более раз.

    Круглые скобки могут использоваться для объединения символов в группы. Для ясности, мы будем использовать одинарные ('') кавычки для выделения выражений, которые следует читать и понимать буквально (в противоположность символическим именам).  

    Псевдонимы

    Имеется четыре типа псевдонимов: User_Alias, Runas_Alias, Host_Alias и Cmnd_Alias.

    Псевдоним ::= 'User_Alias' User_Alias (':' User_Alias)* |
                  'Runas_Alias' Runas_Alias (':' Runas_Alias)* |
                  'Host_Alias'  Host_Alias (':' Host_Alias)* |
                  'Cmnd_Alias'  Cmnd_Alias (':' Cmnd_Alias)*

    User_Alias ::= NAME '=' User_List

    Runas_Alias ::= NAME '=' Runas_User_List

    Host_Alias ::= NAME '=' Host_List

    Cmnd_Alias ::= NAME '=' Cmnd_List

    NAME ::= [A-Z]([A-Z][0-9]_)*

    Каждое определение псевдонима имеет форму


     Тип_Псевдонима НАЗВАНИЕ = элемент1, элемент2, ...

    где Тип_Псевдонима является одним из User_Alias, Runas_Alias, Host_Alias, или Cmnd_Alias. НАЗВАНИЕ это набор символов, набранных в верхнем регистре, цифр, и символов подчеркивания ('_'). НАЗВАНИЕ должно начинаться с символа, набранного в верхнем регистре. Это позволяет размещать несколько определений псевдонимов одного типа в одной строке, разделенных знаком двоеточия (':'). Т.е.


     Тип_Псевдонима НАЗВАНИЕ = элемент1, элемент2, элемент3 : НАЗВАНИЕ = элемент4, элемент5

    За определением следует допустимое значение псевдонима.


     User_List ::= User |
                   User ',' User_List


     User ::= '!'* username |
              '!'* '%'group |
              '!'* '+'netgroup |
              '!'* User_Alias

    User_List состоит из одного, или более, имени пользователя (username), идентификатора пользователя (uid), начинающегося со знака #', cистемной группы (group), начинающейся со знака %'), сетевой группы (netgroup), начинающейся со знака +', и других псевдонимов (User_Alias). Каждый элемент списка может начинаться с одного, или более, оператора !. Отрицающее значение оператора ! отрицает значение элемента; положительное значение только отменяет значение другого.


     Runas_List ::= Runas_User |
                    Runas_User ',' Runas_List


     Runas_User ::= '!'* username |
                    '!'* '#'uid |
                    '!'* '%'group |
                    '!'* +netgroup |
                    '!'* Runas_Alias

    Runas_List аналогичен User_List, за исключением того, что хоть в нём и присутствуют идентификаторы пользователей uid (начинающиеся со знака '#'), однако вместо User_Alias он содержит Runas_Alias


     Host_List ::= Host |
                   Host ',' Host_List


     Host ::= '!'* hostname |
              '!'* ip_addr |
              '!'* network(/netmask)? |
              '!'* '+'netgroup |
              '!'* Host_Alias

    Host_List состоит из одного, или более, имен машин (hostname), -1IP адресов (ip_addr), номеров сетей (network), сетевых групп (netmask, начинающихся со знака +') и других псевдонимов (Host_Alias). Опять-же, значение может отрицаться оператором !. Если вы не укажете маску сети с номером сети, то будет использоваться подходящая сетевая маска внешнего сетевого интерфейса машины. Сетевая маска может быть указана либо четырьмя группами чисел, разделенных между собой точками, (т.е. 255.255.255.0) или указанием -1CIDR (числом бит, т.е. 24). Имя машины может содержать символы подстановки в стиле интерпретатора команд (см. ниже секцию `Символы подстановки), но если команда hostname на вашей машине возвращает полное имя машины, то для использования маски вы должны будете использовать опцию fqdn.


     Cmnd_List ::= Cmnd |
                   Cmnd ',' Cmnd_List


     commandname ::= filename |
                     filename args |
                     filename '""'


     Cmnd ::= '!'* commandname |
              '!'* directory |
              '!'* Cmnd_Alias

    Cmnd_List это список имен комманд (commandnames), каталогов (directory), и других псевдонимов (Cmnd_Alias). Имя команды это полное имя файла, которое может содержать символы подстановки используемые интерпретатором команд (см. секцию `Символы подстановки). Простое имя файла позволяет пользователю выполнять команду с любыми аргументами, какие он пожелает. Также вы можете использовать аргументы командной строки (включая символы подстановки). Дополнительно вы можете использовать "" для указания, что эта команда может быть выполнена без параметров командной строки. Каталог, это полное имя имя пути, заканчивающееся с /. Если вы укажите каталог в Cmnd_List, то пользователь сможет выполнить любой файл, в пределах того каталога (но не в его подкаталогах).

    Если Cmnd имеет ассоциированные аргументы командной строки, то аргументы, указанные пользователем в Cmnd, должны точно соответствовать аргументам в командной строке (или соответствовать символам подстановки, если таковые имеются). Обратите внимание, что следующие символы должны начинаться с \, если они используются в аргументах команд: ,, :, =, \.  

    Значения по умолчанию

    Некоторые значения параметров конфигурации по умолчанию могут быть изменены во время выполнения через одну или несколько записей Default_Entry. Они могут касаться всех пользователей на любом компьютере, всех пользователей на определенном компьютере, или только определенного пользователя. Когда имеется множество значений, то они применяются поочередно. Если имеются конфликтующие значения, то эффект будет иметь последнее из них в строке.


     Default_Type ::= 'Defaults' ||
                      'Defaults' ':' User ||
                      'Defaults' '@' Host


     Default_Entry ::= Default_Type Parameter_List


     Parameter ::= Parameter '=' Value ||          Parameter '+=' Value ||
             Parameter '-=' Value ||

                   '!'* Parameter ||

    Параметры могут быть флагами, целочисленными значениями, выражениями или списками. Флаги являются булевыми и могут быть выключены при помощи оператора !. Некоторые параметры, целочисленные, выражения и списки, могут быть так же использованы в булевом контексте для его отключения. Значения могут быть заключены в двойные кавычки ("), если они содержат повторяющиеся слова. Специальные символы могут начинаться с символа "обратный слэш" (\).

    Флаги:

    "long_otp_prompt"
    При идентификации по схеме One Time Password (S/Key или -1OPIE), используется двойная командная строка, чтобы облегчить возможность "вырезать и вставлять" вызов в локальное окно. Это не так хорошо выглядит, как значение по умолчанию, но некоторые люди найдут это более удобным. По умолчанию этот флаг выключен.
    "ignore_dot"
    Если этот флаг установлен, то sudo будет игнорировать . или (текущий каталог) в $PATH; сам $PATH при этом не меняется. Этот флаг включен по умолчанию.
    "mail_always"
    Отправить сообщение пользователю mailto каждый раз, когда пользователи выполняют sudo. По умолчанию этот флаг выключен.
    "mail_badpass"
    Отправить сообщение пользователю mailto, если пользователь выполняющий sudo ввёл неверный пароль. По умолчанию этот флаг выключен.
    "mail_no_user"
    Если этот флаг установлен, сообщение будет отправлено пользователю mailto, если пользователь, выполняющий sudo, отсутствует в файле sudoers. По умолчанию этот флаг включен.
    "mail_no_host"
    Если этот флаг установлен, пользователю mailto будет отправлено сообщение, если вызывающий пользователь присутствует в файле sudoers, но не имеет прав на выполнение команд на данной машине. По умолчанию этот флаг выключен.
    "mail_no_perms"
    Если этот флаг установлен, пользователю mailto будет отправлено сообщение, если вызывающий пользователь имеет право выполнять sudo, но команда, которую он пытается выполнить, отсутствует в записи этого пользователя в файле sudoers. По умолчанию этот флаг выключен.
    "tty_tickets"
    Если этот флаг установлен, sudo будет использовать ticket dir (каталог вида /var/run/sudo/имя_ticketа, где имя_ticketa совпадает с именем пользователя или терминала, с которого пользователь вошел в систему) для по-терминальной аутентификации пользователей. Это механизм, с помощью которого sudo отслеживает, что данный пользователь уже вызывал sudo (используется, в частности, для lecture) и момент времени, когда была произведена последняя успешная аутентификация данного пользователя (или терминала, если используется tty_tickets). По умолчанию этот флаг выключен.
    "lecture"
    Если этот флаг установлен, то при первом использовании sudo пользователь получит короткую лекцию. По умолчанию этот флаг включен.
    "authenticate"
    Если этот флаг установлен, то пользователи должны аутентифицировать себя при помощи пароля (или другим способом аутентификации) прежде, чем они смогут выполнять команды. Эта установка может быть изменена при помощи тэгов PASSWD и NOPASSWD. По умолчанию этот флаг включен.
    "root_sudo"
    Если этот флаг установлен, то супер-пользователю (root) также разрешено выполнять sudo. Отключение этого позволит предотвратить выполнение пользователями цепочек команд sudo, подобных "sudo sudo /bin/sh", в целях получения ими командной оболочки с правами супер-пользователя (root). Этот флаг включен по умолчанию.
    "log_host"
    Если этот флаг установлен, то имя машины будет записано в (не системном) файле журнала sudo. По умолчанию этот флаг выключен.
    "log_year"
    Если установлен этот флаг, то год будет записан в (не системном) файле журнала sudo в четырехразрядном формате. По умолчанию этот флаг выключен.
    "shell_noargs"
    Если этот флаг установлен и sudo вызвано без параметров, то это равносильно вызову с флагом -s. То-есть, это запускает оболочку от имени супер-пользователя (root) (оболочка определена переменной окружения SHELL, если она указана, если нет, то происходит обращение к оболочке, указанной в учетной записи пользователя вызывающего команду файла /etc/passwd). По умолчанию этот флаг выключен.
    "set_home"
    Если этот флаг установлен и sudo вызвано с флагом -s, переменная окружения HOME будет установлена в домашний каталог целевого пользователя (которым является супер-пользователь (root), если не указан параметр -u). Это заставит подразумевать вместо флага -s флаг -H. По умолчанию этот флаг выключен.
    "always_set_home"
    Если этот флаг установлен, то sudo установит переменную окружения HOME к домашнему каталогу целевого пользователя (которым является супер-пользователь (root), если не указан параметр -u). Это подразумевает, что флаг -H используется постоянно. По умолчанию этот флаг выключен.
    "path_info"
    Обычно, sudo сообщает пользователю, что команда не найдена в его переменной окружения $PATH. Некоторые сайты могут отключить эту функцию, так как это может быть использовано для сбора информации о месторасположении исполняемых файлов к которым обычный пользователь не имеет доступа. Неудобство состоит в том, что если программа просто не найдена в пользовательском $PATH, то sudo сообщит, что пользователь не имеет права на ее выполнение, что может вызвать путаницу. По умолчанию этот флаг выключен.
    "preserve_groups"
    По умолчанию sudo инициализирует групповой вектор к списку групп, которому принадлежит целевой пользователь. Когда preserve_groups установлен, то существующий вектор группы пользователя остаётся неизменным. А реальный и эффективный ID группы, наоборот, приводятся в соответствие с целевым пользователем. По умолчанию этот флаг выключен.
    "fqdn"
    Установите этот флаг если вы хотите поместить полные имена машин в файл sudoers. То-есть, вместо myhost вы бы использовали myhost.mydomain.edu. Вы все-равно можете, при желании, использовать краткую форму (и даже смешивать две). Остерегайтесь! Для включения fqdn sudo требуется сделать поисковую таблицу -1DNS, из-за чего sudo может перестать реагировать, если -1DNS прекратит свою работу (например, если машина не подключена к сети). Так же обратите внимание, что вы должны использовать только официальное имя машины под которым она известна -1DNS. То есть, Вы не можете использовать псевдоним машины (запись CNAME) из-за проблем производительности и факта, что не возможно получить все псевдонимы от -1DNS. Если имя вашей машины полное (как сообщает вывод команды hostname), то у вас нет необходимости задействовать fqfn. По умолчанию этот флаг выключен.
    "insults"
    Если этот флаг установлен, то sudo сообщит пользователям, когда они вводят неверный пароль. По умолчанию этот флаг выключен.
    "requiretty"
    Если этот флаг установлен, sudo будет выполнено только в том случае, если пользователь вошел в систему с реального терминала. Это предотвращает вещи, подобные "rsh somehost sudo ls", так как rsh(1) не назначает терминал. Так как нет возможности отключить отклик, если терминал отсутствует, некоторые сайты могут устанавливать этот флаг для предотвращения ввода пользователем пароля открытым текстом. По умолчанию этот флаг выключен.
    "env_editor"
    Если этот флаг установлен, visudo будет использовать значение переменной -1EDITOR или -1VISUAL и лишь после этого возвращаться к списку редакторов по умолчанию. Учтите, что это может создать прорехи в защите, так как позволит пользователю выполнять произвольные команды от имени супер-пользователя, не подлежащие какому-либо контролю. Более безопасным является помещение списка редакторов, разделённых точкой с запятой, в переменную редактора. Это позволит visudo использовать -1EDITOR и -1VISUAL только если они соответствуют значению, указанному в редакторе. Этот флаг включен по умолчанию.
    "rootpw"
    Если этот флаг установлен, sudo будет запрашивать пароль супер-пользователя (root), вместо пароля пользователя инициировавшего вызов команды. По умолчанию этот флаг выключен.
    "runaspw"
    Если этот флаг установлен, sudo будет запрашивать пароль пользователя, определенного опцией runas_default (по умолчанию супер-пользователь (root)) вместо пароля пользователя инициировавшего вызов команды. По умолчанию этот флаг выключен.
    "targetpw"
    Если этот флаг установлен, sudo будет запрашивать пароль пользователя, указанного при помощи флага -u (по умолчанию супер-пользователь (root)) вместо пароля пользователя инициировавшего вызов команды. По умолчанию этот флаг выключен.
    "set_logname"
    Обычно, sudo устанавливает переменные окружения LOGNAME и USER к имени целевого пользователя (обычно супер-пользователя (root), если не задан флаг -u). Однако, так как некоторые программы (включая систему управления проверкой -1RCS) используют LOGNAME, чтобы определить подлинность пользователя, то может возникнуть желание изменить это поведение. Это может быть сделано посредством отрицания опции set_logname.
    "stay_setuid"
    Обычно, когда sudo выполняет команду, реальный и эффективный UID устанавливаются в значение целевого пользователя (по умолчанию супер-пользователь (root)). Этот параметр изменит его поведение таким образом, что реальный UID останется таким же, как и у пользователя инициировавшего его выполнение. Другими словами это заставляет sudo действовать как обработчика setuid. Это полезно для отключения потенциально опасной функциональности при выполнении setuid-программ. Обратите внимание, что это означает то, что sudo выполняется с реальным uid пользователя инициировавшего его выполнение, что может позволить этому пользователю уничтожить sudo раньше, чем тот сможет запротоколировать отказ, в зависимости от того, как ваша система определяет взаимодействие между сигналами и setuid-процессами.
    "env_reset"
    Если установлено, то sudo обнулит значения переменных окружения оставив только следующие: HOME, LOGNAME, PATH, SHELL, TERM, и USER (в дополнение к переменным SUDO_*). Из них будет полностью скопирован в неизменном виде только TERM. Прочие переменные будут установлены в значения по умолчанию (возможно изменённые в соответствии со значениями параметра set_logname). Если sudo было собрано с параметром SECURE_PATH, то это значение быдет использовано для переменной окружения PATH. Другие переменные могут быть сохранены использованием параметра env_keep.
    "use_loginclass"
    Если этот флаг установлен, sudo применит установки по умолчанию, определенные для входа в систему класса целевого пользователя. Это доступно только если sudo сконфигурировано с опцией --with-logincap. По умолчанию этот флаг выключен.

    Целые числа:

    "passwd_tries"
    Количество пользовательских попыток ввести пароль прежде, чем sudo регистрирует неудачу и прекращает работу. По умолчанию 3.

    Целые числа, которые могут быль использованы в булевом контексте:

    "loglinelen"
    Количество знаков в строке в файле журнала. Это значение используется для указания через какое количество знаков лучше производить верстку строк в файлах журнала. Это не окажет влияния на системном журнале, только на файле журнала sudo. По умолчанию это значение равно 80 (используйте 0 или отрицание для отключения верстки строк).
    "timestamp_timeout"
    Количество минут, которое должно пройти перед тем, как sudo запросит пароль снова. По умолчанию это 5. Установка этого значения в 0 заставит программу запрашивать пароль всегда. Установка значения меньшего, чем 0 будет означать, что временные метки пользователя бессрочны. Это может быть использовано для того, чтобы позволить пользователям самим управлять созданием и удалением своих временных меток при помощи sudo -v и sudo -k соответственно.
    "passwd_timeout"
    Количество минут, в течение которых sudo будет ожидать повторного ввода пароля прежде, чем истечёт срок действия прежнего пароля. Значение по умолчанию - 5. Для отключения ожидания пароля установите это значение равным 0.
    "umask"
    Umask используемое при выполнении команды. Установите это значение в 0777 для сохранения umask пользователя. По умолчанию это 0022.

    Строчные значения:

    "mailsub"
    Тема сообщения, отправляемого пользователю mailto. Использование %h позволит указать имя машины. По умолчанию это *** -1SECURITY information for %h ***.
    "badpass_message"
    Сообщение, которое будет отображено, если пользователь введет неверный пароль. По умолчанию это Sorry, try again., если включено использование insults.
    "timestampdir"
    Каталог в котором sudo хранит свои временные файлы-метки. По умолчанию это /var/run/sudo.
    "passprompt"
    Вид приглашения для ввода пароля по умолчанию; может быть изменен при помощи параметра -p или переменной окружения SUDO_PROMPT. Поддерживаются два варианта управляющих последовательностей: %u отображает имя входящего в систему пользователя и %h выводит локальное имя машины. Значение по умолчанию - Password:.
    "runas_default"
    Пользователь по умолчанию, от чьего имени выполняются команды, если в командной строке не указан флаг -u. По умолчанию это root (супер-пользователь).
    "syslog_goodpri"
    Приоритет Syslog в случае успешной регистрации пользователя в системе. По умолчанию notice.
    "syslog_badpri"
    Приоритет Syslog в случае, если регистрация пользователя окончилась неудачей. По умолчанию alert.
    "editor"
    Разделённый через двоеточие (:) список программ для редактирования, допущенных к использованию с visudo. visudo выберет, по возможности, редактор соответствующий пользовательской переменной окружения USER, или первый из списка, присутствующий в системе и доступный для выполнения. По умолчанию это путь к редактору vi в вашей системе.

    Выражения, которые могут быть использованы в булевом контексте:

    "logfile"
    Путь к файлу журнала sudo (не syslog). Указание пути включает регистрацию событий в файл журнала; отрицание выключает это.
    "syslog"
    Средство для регистрации событий в системном журнале Syslog (укажите отрицание для отключения регистрации в syslog). По умолчанию установлено authpriv.
    "mailerpath"
    Путь к программе доставки почты для отправки предупредительных сообщений. По умолчанию это путь к sendmail определенный в момент конфигурации.
    "mailerflags"
    Флаги используемые при вызове почтовой программы. По умолчанию -t.
    "mailto"
    Адрес, по которому будут отправлены предупреждения и сообщения об ошибках. Адрес должен быть заключен в двойные кавычки (") во избежание интерпретации sudo знака @. По умолчанию root (супер-пользователь).
    "exempt_group"
    Пользователи в этой группе лишены необходимости в указании пароля и ограничений переменной -1PATH. По умолчанию это не установлено.
    "verifypw"
    Включением этого параметра регулируются случаи, в которых выполнение sudo с -v требует подтверждения паролем. Эта функция может иметь следующие допустимые значения:


        all         Все пользовательские записи в sudoers
                    для данного компьютера должны иметь установленный
                    флаг NOPASSWD во избежание ввода пароля.


        any         Хотя бы одна пользовательская запись для данного
                    компьютера в sudoers должна иметь
                    установленный флаг NOPASSWD во избежание
                    ввода пароля.


        never       Для использования флага -v пользователь 
                    не должен использовать пароль.


        always      Пользователь должен всегда вводить пароль для
                    использования флага -v.

    Значение по умолчанию `all.

    "listpw"
    Этим параметром регулируются случаи, когда требуется указание пароля при выполнении пользователем sudo с -l. Эта функция может иметь следующие допустимые значения:


        all         Все пользовательские записи в sudoers
                    для данного компьютера, должны иметь установленный
                    флаг NOPASSWD во избежание ввода пароля.


        any         Хотя бы одна пользовательская запись для данного
                    компьютера в sudoers должна иметь
                    установленный флаг NOPASSWD, во избежание
                    ввода пароля.


        never       Для использования флага -l пользователь 
                    не должен использовать пароль.


        always      Пользователь должен всегда вводить пароль для
                    использования флага -l.

    По умолчанию принято значение `any.

     

    Списки, которые могут быть использованы в булевом контексте:

    env_check
    Если значения переменных окружения содержат символы % или /, то эти переменные будут удалены из пользовательских переменных. Это может быть использовано для защиты от уязвимости плохо написанных программ в printf-style формате. Аргументом может быть заключение в двойные кавычки, разделенный пробелами список или одинарное значение без двойных кавычек. Список может быть замещен, добавлен к, удален из, или отключен при помощи операторов =, +=, -= и ! соответственно. Список проверяемых переменных окружения по умолчанию может быть получен при выполнении sudo с параметром -V от имени root.
    env_delete
    Переменные окружения, которые будут удалены из пользовательских переменных. Аргументом может быть заключение в двойные кавычки, разделенный пробелами список или одинарное значение без двойных кавычек. Список может быть замещен, добавлен к, удален из, или отключен при помощи операторов =, +=, -= и ! соответственно. Список удаляемых переменных окружения по умолчанию может быть получен при выполнении sudo с параметром -V от имени root.
    env_keep
    Переменные окружения, которые будут сохранены в пользовательских переменных, даже если используется параметр env_reset. Это позволяет осуществить филигранный контроль над переменными окружения, получаемыми процессами порождёнными sudo. Аргументом может быть заключение в двойные кавычки, разделенный пробелами список или одинарное значение без двойных кавычек. Список может быть замещен, добавлен к, удален из, или отключен при помощи операторов =, +=, -= и ! соответственно. По умолчанию этот список пуст.
    Если включена регистрация событий через syslog(3), sudo акцептирует следующие значения для лучшего взаимодействия с syslog (значение Параметра syslog): authpriv (если ваша ОС поддерживает это), auth, daemon, user, local0, local1, local2, local3, local4, local5, local6, и local7. Поддерживаются следующие приоритеты syslog: alert, crit, debug, emerg, err, info, notice, и warning.
     

    Спецификация Пользователя


     User_Spec ::= User_list Host_List '=' User_List Cmnd_Spec_List \
                   (':' User_Spec)*


     Cmnd_Spec_List ::= Cmnd_Spec |
                        Cmnd_Spec ',' Cmnd_Spec_List


     Cmnd_Spec ::= Runas_Spec? ('NOPASSWD:' | 'PASSWD:')? Cmnd


     Runas_Spec ::= '(' Runas_List ')'

    Спецификация пользователя определяет какие команды может выполнять пользователь (и какой пользователь) на определенной машине. По умолчанию, команды выполняются от имени супер-пользователя (root), но это может быть изменено на уровне по-командного доступа.

    Давайте разберем это детальнее:  

    Runas_Spec

    Runas_Spec это просто Runas_List (как определено выше) заключенный в круглые скобки. Если вы не определяете Runas_Spec в спецификации пользователя, то по умолчанию будет использован Runas_Spec супер-пользователя (root). Runas_Spec устанавливает значение по умолчанию для команд следующих после него. Вот что это означает в записи:


     dgb    boulder = (operator) /bin/ls, /bin/kill, /usr/bin/who

    Пользователь dgb может выполнять /bin/ls, /bin/kill, и /usr/bin/lprm -- но только как operator. Т.е.


        sudo -u operator /bin/ls.

    Также возможно отменить Runas_Spec далее, в той же строке. Если мы изменим запись вот так:


     dgb    boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm

    Пользователю dgb теперь разрешено выполнять /bin/ls как operator, но /bin/kill и /usr/bin/lprm как root.  

    -1NOPASSWD and -1PASSWD

    По умолчанию sudo требует чтобы пользователь аутентифицировал себя заранее, до выполнения команды. Это поведение может быть изменено через тэг NOPASSWD. Как и Runas_Spec, тэг NOPASSWD устанавливает значение по умолчанию для команд, следующих за Cmnd_Spec_List. Тэг PASSWD может использоваться в целях изменения значений наоборот. Например:


     ray    rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm

    позволило бы пользователю ray выполнять /bin/kill, /bin/ls, и /usr/bin/lprm как супер-пользователю (root) на машине rushmore без аутентификации. Если мы хотим разрешить ray выполнять без пароля только /bin/kill, то запись должна быть:


     ray    rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm

    Обратите внимание, что тэг PASSWD не возымеет эффекта на пользователях, указанных в группе, определенной опцией exempt_group.

    По умолчанию, если к какой-либо записи пользователя на данной машине применен тэг NOPASSWD, он или она сможет выполнять sudo -l без указания пароля. Также, пользователь может выполнять без пароля только sudo -v, если отметка NOPASSWD присутствует для всех пользователей, которые относятся к данному компьютеру. Это поведение может быть изменено при помощи параметров verifypw и listpw.  

    Символы подстановки (метасимволы):

    sudo позволяет использовать знаки подстановки, подобные знакам подстановки оболочки, для использования в именах пути также, как в параметрах командной строки в файле sudoers. Знаки подстановки соответствуют -1POSIX fnmatch(3). Обратите внимание, что это не регулярные выражения.

    "*"
    Соответствует любому количеству символов, в том числе нулю.
    "?"
    Соответствует любому одному символу.
    "[...]"
    Соответствует любому символу в заданном диапазоне.
    "[!...]"
    Соответствует любому символу не в указанном диапазоне.
    "\x"
    Для любого символа x, принять значение x. Это необходимо для использования специальных символов: *, ?, [, и }.

    Обратите внимание, что знак слэша ('/') не будет соответствовать символам подстановки используемым в имени пути. Однако, если сравнивать с параметрами командной строки, слэш будет соответствовать символу подстановки. Это делает путь подобный:


        /usr/bin/*

    соответствующим /usr/bin/who, но не /usr/bin/X11/xterm.  

    Исключения из правил символов подстановки:

    К вышеприведенным правилам применимы следующие исключения:

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

    Другие специальные символы и зарезервированные слова:

    Знак фунта ('#') используется для обозначения комментария (если это происходит не в контексте имени пользователя, сопровождается одной или более цифр и обрабатывается как универсальный идентификатор пользователя (uid)). И знак комментария, и любой текст после него, игнорируются до конца строки.

    Зарезервированное слово -1ALL является встроенным псевдонимом, которое всегда имеет определение. Это может использоваться везде, где было бы уместно использование псевдонимов Cmnd_Alias, User_Alias, Runas_Alias, или Host_Alias. Вы не должны пытаться назначить свой собственный псевдоним с именем -1ALL, поскольку встроенный псевдоним будет использоваться вместо вашего собственного. Помните, что использование -1ALL в контексте команды опасно, так как позволит пользователю выполнить любую команду в системе.

    Знак восклицания (!') может быть использован как логический оператор не, как в псевдониме, так и перед Cmnd. Это позволяет исключать некоторые значения. Обратите внимание, что использование ! в сочетании с встроенным псевдонимом ALL для разрешения выполнения пользователем всего кроме нескольких команд не всегда работает должным образом (см. -1БЕЗОПАСНОСТЬ -1ПРИМЕЧАНИЯ ниже).

    Длинные строки могут быть перенесены при помощи обратного слэша (\'), если он является последним символом в строке.

    Пробелы между элементами описания, также как и специальные синтаксические символы в Спецификации пользователя ('=, :, (, )'), являются необязательными.

    Следующие символы должны начинаться с символа обратного слэша (\'), когда используются как часть слова (т.е. имя пользователя или имя компьютера): '@, !, =, :, ,, (, ), \.  

    ПРИМЕРЫ

    Ниже приведены примеры записей sudoers. Возможно, некоторые из них являются выдуманными. Сначала мы определяем свои псевдонимы:


     # Определение псевдонимов пользователя
     User_Alias     FULLTIMERS = millert, mikef, dowdy
     User_Alias     PARTTIMERS = bostley, jwfox, crawl
     User_Alias     WEBMASTERS = will, wendy, wim


     # Определение псевдонимов Runas (Выполнить как)
     Runas_Alias    OP = root, operator
     Runas_Alias    DB = oracle, sybase


     # Определение псевдонимов машин
     Host_Alias     SPARC = bigtime, eclipse, moet, anchor :\
                    SGI = grolsch, dandelion, black :\
                    ALPHA = widget, thalamus, foobar :\
                    HPPA = boa, nag, python
     Host_Alias     CUNETS = 128.138.0.0/255.255.0.0
     Host_Alias     CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
     Host_Alias     SERVERS = master, mail, www, ns
     Host_Alias     CDROM = orion, perseus, hercules


     # Определение псевдонимов Cmnd (команд)
     Cmnd_Alias     DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
                            /usr/sbin/restore, /usr/sbin/rrestore
     Cmnd_Alias     KILL = /usr/bin/kill
     Cmnd_Alias     PRINTING = /usr/sbin/lpc, /usr/bin/lprm
     Cmnd_Alias     SHUTDOWN = /usr/sbin/shutdown
     Cmnd_Alias     HALT = /usr/sbin/halt, /usr/sbin/fasthalt
     Cmnd_Alias     REBOOT = /usr/sbin/reboot, /usr/sbin/fastboot
     Cmnd_Alias     SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
                             /usr/local/bin/tcsh, /usr/bin/rsh, \
                             /usr/local/bin/zsh
     Cmnd_Alias     SU = /usr/bin/su

    Здесь мы переопределим некоторые встроенные значения по умолчанию. Мы хотим, чтобы sudo регистрировал события при помощи syslog(3), во всех случаях используя метод auth. Мы не хотим, что бы sudo читало лекции всем пользователям, и пользователь millert не должен указывать пароль. В добавок, на машинах в SERVERS Host_Alias мы держим дополнительный локальный файл журнала и удостоверимся, что мы регистрируем год в каждой строке файла журнала, так как записи журнала будут сохраняться в течение нескольких лет.


     # Переопределяем встроенные значения по умолчанию
     Defaults               syslog=auth
     Defaults:FULLTIMERS    !lecture
     Defaults:millert       !authenticate
     Defaults@SERVERS       log_year, logfile=/var/log/sudo.log

    Определение пользователя является частью, которая фактически определяет кто что может выполнять.


     root           ALL = (ALL) ALL
     %wheel         ALL = (ALL) ALL

    Мы позволим супер-пользователю (root) и любому пользователю в группе wheel выполнить любую команду на любой машине от имени любого пользователя.


     FULLTIMERS     ALL = NOPASSWD: ALL

    Системные администраторы занятые полный рабочий день (millert, mikef и dowdy) могут выполнить любую команду на любой машине без аутентификации.


     PARTTIMERS     ALL = ALL

    Системные администраторы занятые не полный рабочий день (bostley, jwfox и crawl) могут выполнить любую команду на любом компьютере, но сначала должны себя аутентифицировать (так как в записи отсутствует тэг NOPASSWD).


     jack           CSNETS = ALL

    Пользователь jack может выполнить любую команду на машинах с псевдонимом CSNETS (сети 128.138.243.0, 128.138.204.0 и 128.138.242.0). Из этих сетей только <128.138.204.0> имеет явную сетевую маску (в соответствии с CIDR) означающую сеть класса C. Для остальных сетей в CSNETS в случае соответствия будет использоваться сетевая маска машины.


     lisa           CUNETS = ALL

    Пользователь lisa может выполнять любую команду на любой машине с псевдонимом CUNETS (сеть класса B 128.138.0.0).


     operator       ALL = DUMPS, KILL, PRINTING, SHUTDOWN, HALT, REBOOT,\
                    /usr/oper/bin/

    Пользователь operator может выполнять команды ограничивающиеся простым обслуживанием. В данном случае таковыми являются резервное копирование, уничтожение процессов, система печати, выключение системы и любая команда в каталоге /usr/oper/bin/.


     joe            ALL = /usr/bin/su operator

    Пользователь joe может выполнять только su(1) оператору.


     pete           HPPA = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root

    Пользователю pete разрешено изменять любой пароль, за исключением пароля супер-пользователя (root) на машинах HPPA. Учтите, что passwd(1) не воспринимает несколько имен пользователей подряд в одной командной строке.


     bob            SPARC = (OP) ALL : SGI = (OP) ALL

    Пользователь bob может выполнять любые команды на машинах SPARC и SGI, как пользователь описанный в Runas_Alias в OP (root и operator).


     jim            +biglab = ALL

    Пользователь jim может выполнить любую команду на машинах в сетевой группе biglab. Sudo знает, что biglab является сетевой группой из-за префикса +.


     +secretaries   ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser

    Пользователи в сетевой группе secretaries должны как помогать в управлении принтерами, так и добавлять или удалять пользователей. Таким образом им позволено выполнять эти команды на всех машинах.


     fred           ALL = (DB) NOPASSWD: ALL

    Пользователь fred может выполнять команды от имени любого пользователя в Runas_Alias DB (oracle или sybase), без указания пароля.


     john           ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*

    На машинах ALPHA пользователь john может выполнить su любому пользователю, за исключением супер-пользователя (root), но не имеет права задавать su(1) какие-либо флаги.


     jen            ALL, !SERVERS = ALL

    Пользователь jen может выполнить любую команду на любой машине, за исключением машин в Host_Alias SERVERS (master, mail, www и ns).


     jill           SERVERS = /usr/bin/, !SU, !SHELLS

    Для любой машины в Host_Alias SERVERS jill может выполнить любую команду в каталоге /usr/bin/, за исключением команд относящихся к Cmnd_Aliases SU и SHELLS.


     steve          CSNETS = (operator) /usr/local/op_commands/

    Пользователь steve может выполнить любую команду в каталоге /usr/local/op_commands/, но только как пользователь operator.


     matt           valkyrie = KILL

    На своей персональной рабочей станции, valkyrie, matt необходима возможность уничтожать зависшие процессы.


     WEBMASTERS     www = (www) ALL, (root) /usr/bin/su www

    На машинах www, любой пользователь в User_Alias WEBMASTERS (will, wendy и wim), может выполнить любую команду как пользователь www (который является владельцем web-страниц) или просто su(1) к www.


     ALL            CDROM = NOPASSWD: /sbin/umount /CDROM,\
                    /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM

    Любой пользователь может монтировать или размонтировать CD-ROM на машинах в Host_Alias CDROM (orion, perseus, hercules) без ввода пароля. Ввод этого несколько утомителен для пользователей, поэтому это первейший кандидат для включения в сценарий оболочки.  

    СОВЕТЫ ПО БЕЗОПАСНОСТИ

    В целом исключение команд из ALL, с использованием оператора !, не эффективно. Пользователь может тривиально это обойти, копируя желаемые команды с разными именами, и затем их выполнять. Например:


        bill        ALL = ALL, !SU, !SHELLS

    В действительности не реально предотвратить выполнение bill команд, перечисленных в SU или SHELLS, так как он может запросто их скопировать под разными названиями, или использовать расширения оболочки из редактора или другой программы. Поэтому этот вид ограничений должен быть тщательно изучен (и подкреплен системной политикой).  

    ПРЕДОСТЕРЕЖЕНИЯ

    Файл sudoers должен редактироваться только командой visudo, которая блокирует файл и осуществит проверку грамматики. Это обязательно, во избежание возникновения ошибок в синтаксисе sudoers, так как sudo не будет работать при наличии ошибок в sudoers.

    Если используются сетевые группы или машины (в противоположность пользователям), если вы сохраняете полностью определенные имена машин в сетевой группе (что, бывает, случается), то имена машин должны быть полностью определенными, и соответствовать именам, возвращаемым командой hostname, или должна использоваться опция fqdn в sudoers.  

    ФАЙЛЫ


     /etc/sudoers, 
     /etc/sudo.d/*          Cписок пользователей, с указанием того, что они могут выполнять
     /etc/group             Файл локальных групп
     /etc/netgroup          Список сетевых групп  

    ПЕРЕВОД

    Александр Блохин <sass@altlinux.ru>  

    СМ. ТАКЖЕ

    rsh(1), sudo(8), visudo(8), su(1), fnmatch(3).


     

    Index

    НАЗВАНИЕ
    ОПИСАНИЕ
    Краткое руководство по -1EBNF
    Псевдонимы
    Значения по умолчанию
    Списки, которые могут быть использованы в булевом контексте:
    Спецификация Пользователя
    Runas_Spec
    -1NOPASSWD and -1PASSWD
    Символы подстановки (метасимволы):
    Исключения из правил символов подстановки:
    Другие специальные символы и зарезервированные слова:
    ПРИМЕРЫ
    СОВЕТЫ ПО БЕЗОПАСНОСТИ
    ПРЕДОСТЕРЕЖЕНИЯ
    ФАЙЛЫ
    ПЕРЕВОД
    СМ. ТАКЖЕ


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру