- Sudoers �������� ������������ astra linux
- ОПИСАНИЕ
- Краткое руководство по -1EBNF
- Псевдонимы
- Значения по умолчанию
- Списки, которые могут быть использованы в булевом контексте:
- Спецификация Пользователя
- Runas_Spec
- -1NOPASSWD and -1PASSWD
- Символы подстановки (метасимволы):
- Исключения из правил символов подстановки:
- Другие специальные символы и зарезервированные слова:
- ПРИМЕРЫ
- СОВЕТЫ ПО БЕЗОПАСНОСТИ
- ПРЕДОСТЕРЕЖЕНИЯ
Sudoers �������� ������������ astra linux
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
Каждое определение псевдонима имеет форму
Тип_Псевдонима НАЗВАНИЕ = элемент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 ||
Параметры могут быть флагами , целочисленными значениями, выражениями или списками. Флаги являются булевыми и могут быть выключены при помощи оператора !. Некоторые параметры, целочисленные, выражения и списки, могут быть так же использованы в булевом контексте для его отключения. Значения могут быть заключены в двойные кавычки ( » ), если они содержат повторяющиеся слова. Специальные символы могут начинаться с символа «обратный слэш» ( \ ).
Флаги : «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.
Списки, которые могут быть использованы в булевом контексте:
Спецификация Пользователя
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
Спецификация пользователя определяет какие команды может выполнять пользователь (и какой пользователь) на определенной машине. По умолчанию, команды выполняются от имени супер-пользователя (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/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 ). Из этих сетей только имеет явную сетевую маску (в соответствии с 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 .
Источник