- Ubuntu Documentation
- Introduction
- Editing the sudoers file
- Aliases
- User Aliases
- Runas Aliases
- Host Aliases
- Command Aliases
- User Specifications
- The Default Ubuntu Sudoers File
- Common Tasks
- Shutting Down From The Console Without A Password
- Multiple tags on a line
- Enabling Visual Feedback when Typing Passwords
- Troubleshooting
- What is sudoers in linux
- ОПИСАНИЕ
- Краткое руководство по -1EBNF
- Псевдонимы
- Значения по умолчанию
- Списки, которые могут быть использованы в булевом контексте:
- Спецификация Пользователя
- Runas_Spec
- -1NOPASSWD and -1PASSWD
- Символы подстановки (метасимволы):
- Исключения из правил символов подстановки:
- Другие специальные символы и зарезервированные слова:
- ПРИМЕРЫ
- СОВЕТЫ ПО БЕЗОПАСНОСТИ
- ПРЕДОСТЕРЕЖЕНИЯ
Ubuntu Documentation
Introduction
The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).
Editing the sudoers file
For Ubuntu 8.04 : The default editor for visudo has changed to vi, which may cause confusion to those who are not familiar to its command bindings. To change this behavior, open your
/.bashrc file, and append the line to the bottom of the file:
If you wish to use another text editor, replace «nano» with any text editor of your choice. Run source
/.bashrc to ensure the changes you made have taken effect.
Now launch visudo with sudo -E visudo in the terminal, and put in Defaults editor=/usr/bin/nano in the file.
So the top of the file should now look like this:
Again, if you wish to use another text editor, replace «nano» with the full path to the text editor of your choice. Save, and from now on launching visudo with gksu visudo for Ubuntu; kdesu visudo for Kubuntu or sudo visudo in the terminal will now open with your chosen editor.
For Ubuntu 8.10 : The default editor for visudo has changed to sensible-editor. sensible-editor defaults to nano now, and select-editor (which will run by default the first time) allows you to select another one.
To setup the default editor for visudo.
You will get a prompt to choose which editor you want.
If you don’t consider yourself competent in any of the enlisted terminal-based editors, it is recommended that you choose option 3, nano.
Because sudo is such a powerful program you must take care not to put anything formatted incorrectly in the file. To prevent any incorrect formatting getting into the file you should edit it using the command visudo run as root or by using sudo.
The sudoers file is read in one pass so when multiple entries match for a user, they are applied in order. Where there are conflicting values, the last match is used (which is not necessarily the most specific match). Also you must set an alias before you can use it. Normally you will set the aliases at the beginning of the file and then set the user specifications after all the aliases are laid out.
You can insert comments by prefixing them with a # but this is also used to specify a uid in certain parts of the file when it is followed by a number.
Aliases
There are four kinds of aliases: User_Alias, Runas_Alias, Host_Alias and Cmnd_Alias. Each alias definition is of the form:
- Alias_Type NAME = item1, item2, .
Where Alias_Type is one of User_Alias, Runas_Alias, Host_Alias or Cmnd_Alias. A name is a string of uppercase letters, numbers and underscores starting with an uppercase letter. You can put several aliases of the same type on one line by separating them with colons (:) as so:
- Alias_Type NAME1 = item1, item2 : NAME2 = item3
You can include other aliases in an alias specification provided they would normally fit there. For example you can use a user alias wherever you would normally expect to see a list of users (for example in a user or runas alias).
There are also built in aliases called ALL which match everything where they are used. If you used ALL in place of a user list it matches all users for example. If you try and set an alias of ALL it will be overridden by this built in alias so don’t even try.
User Aliases
User aliases are used to specify groups of users. You can specify usernames, system groups (prefixed by a %) and netgroups (prefixed by a +) as follows:
Runas Aliases
Runas Aliases are almost the same as user aliases but you are allowed to specify users by uid’s. This is helpful as usernames and groups are matched as strings so two users with the same uid but different usernames will not be matched by entering a single username but can be matched with a uid. For example:
Host Aliases
A host alias is a list of hostname, ip addresses, networks and netgroups (prefixed with a +). If you do not specify a netmask with a network the netmask of the hosts ethernet interface(s) will be used when matching.
Command Aliases
Command aliases are lists of commands and directories. You can use this to specify a group of commands. If you specify a directory it will include any file within that directory but not in any subdirectories.
The special command ‘»sudoedit»‘ allows users to run sudo with the -e flag or as the command sudoedit. If you include command line arguments in a command in an alias these must exactly match what the user enters on the command line. If you include any of the following they will need to be escaped with a backslash (\): «,», «\», «:», «=».
User Specifications
User Specifications are where the sudoers file sets who can run what as who. It is the key part of the file and all the aliases have just been set up for this very point. If this was a film this part is where all the key threads of the story come together in the glorious unveiling before the final climatic ending. Basically it is important and without this you ain’t going anywhere.
A user specification is in the format
The user list is a list of users or a user alias that has already been set, the host list is a list of hosts or a host alias, the operator list is a list of users they must be running as or a runas alias and the command list is a list of commands or a cmnd alias.
The tag list has not been covered yet and allows you set special things for each command. You can use PASSWD and NOPASSWD to specify whether the user has to enter a password or not and you can also use NOEXEC to prevent any programs launching shells themselves (as once a program is running with sudo it has full root privileges so could launch a root shell to circumvent any restrictions in the sudoers file.
For example (using the aliases and users from earlier)
The Default Ubuntu Sudoers File
The sudoers file that ships with Ubuntu 8.04 by default is included here so if you break everything you can restore it if needed and also to highlight some key things.
This is pretty much empty and only has three rules in it. The first (Defaults env_reset) resets the terminal environment after switching to root. So, ie: all user set variables are removed. The second (root ALL=(ALL) ALL) just lets root do everything on any machine as any user. And the third (%admin ALL=(ALL) ALL) lets anybody in the admin group run anything as any user. Note that they will still require a password (thus giving you the normal behaviour you are so used to).
If you want to add your own specifications and you are a member of the admin group then you will need to add them after this line. Otherwise all your changes will be overridden by this line saying you (as part of the admin group) can do anything on any machine as any user provided you give a password.
Common Tasks
This section includes some common tasks and how to accomplish them using the sudoers file.
Shutting Down From The Console Without A Password
Often people want to be able to shut their computers down without requiring a password to do so. This is particularly useful in media PCs where you want to be able to use the shutdown command in the media centre to shutdown the whole computer.
To do this you need to add some cmnd aliases as follows:
You also need to add a user specification (at the end of the file after the «%admin ALL = (ALL) ALL» line so it takes effect — see above for details):
Obviously you need to replace » » with the username of the user who needs to be able to shutdown the pc without a password. You can use a user alias here as normal.
Multiple tags on a line
There are times where you need to have both NOPASSWD and NOEXEC or other tags on the same configuration line. The man page for sudoers is less than clear, so here is an example of how this is done:
This example lets the user «myuser» run as root the «vim» binary without a password, and without letting vim shell out (the :shell command).
Enabling Visual Feedback when Typing Passwords
As of Ubuntu 10.04 (Lucid), you can enable visual feedback when you are typing a password at a sudo prompt.
Simply edit /etc/sudoers and change the Defaults line to read:
Troubleshooting
If your changes don’t seem to have had any effect, check that they are not trying to use aliases that are not defined yet and that no other user specifications later in the file are overriding what you are trying to accomplish.
Sudoers (последним исправлял пользователь j-w-taylor-01 2014-12-11 10:54:25)
The material on this wiki is available under a free license, see Copyright / License for details
You can contribute to this wiki, see Wiki Guide for details
Источник
What is sudoers in 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 .
Источник