В ОС Linux пользователи бесправны, и любое ответственное действие требует полномочий администратора. Администратор по определению должен быть в системе один (операционная система не позволяет обычным путем создать еще одну учетную запись с UID = 0), а обязанностей у него чрезмерно много. Достаточно часто у администратора возникает потребность доверить избранным пользователям выполнение каких-либо ответственных операций. Но для этого администратор должен доверить другим святая святых – свой пароль. Чтобы избежать таких ситуаций, в ОС UNIX был разработан своеобразный механизм, позволяющий выборочно предоставлять определенным пользователям права на запуск ответственных команд. Этот механизм реализован в утилите sudo(superuser do) и конфигурационном файле /etc/sudoers, который должен быть недоступным для всех, кроме администратора.
В качестве параметра команды sudo вводится команда, которую надо исполнить. Обычно, если это явно не определено в файле конфигурации, от пользователя потребуют ввести его собственный пароль, но только один раз в течение терминального сеанса, в последующем запрос пароля производиться не будет. При этом правильно написанная команда будет исполнена оболочкой с правами привилегированного пользователя (администратора).
Названия команд составляются администратором и записываются в файл /etc/sudoers в виде специальных строк. Строка должна связывать конкретного пользователя, работающего на определенном сетевом узле или локальном компьютере, с ответственными командами. Запись в строке должна содержать ответы на вопросы:
· кто? (зарегистрированное имя пользователя или группы);
· где? (доменное имя или IP-адрес компьютера);
· от чьего имени? (имя привилегированного пользователя);
· команды (полный перечень разрешенных команд, разделенных запятыми).
Приведем образцы записей в файле /etc/sudoers :
petrov ALL=/bin/shutdown, /bin/halt
– пользователю petrov на всех компьютерах, работающих под управлением данной операционной системы, можно принудительно завершать работу системы и всех пользователей;
john localhost=/usr/sbin/lpc, /usr/sbin/lprm
– пользователь john на своем компьютере имеет право распечатки документов;
– пользователь braun на компьютере, который идентифицируется IP-адресом, имеет право создавать и модифицировать учетные записи пользователей, а также назначать им первичные пароли. Здесь допущен очевидный перебор в предоставлении прав, поскольку пользователь braun может сменить пароль самому администратору;
– пользователям группы alfa на всех компьютерах сети разрешено монтировать и размонтировать компакт-диски. Кстати, аналогичное право пользователям можно предоставить с помощью записи в конфигурационном файле /etc/fstab.
В файле /etc/sudoers могут быть определены псевдонимы (алиасы):
C помощью псевдонимов разрешающая запись приобретает более компактный вид:
WEBMASTERS WEBSERVERS=APACHE
Пользователь, наделенный временными полномочиями, должен знать, какую команду ему разрешено выполнять с правами администратора и как эта команда пишется. Команды, перечисленные в файле /etc/sudoers, должны приводиться с полными путевыми именами, чтобы пользователи были лишены возможности запускать свои экземпляры утилит или сценариев от имени администратора.
Механизм избирательного предоставления полномочий предусматривает исполнение команд без ввода паролей. Для этого администратор в соответствующей строке между именем хоста и именем команды должен указать ключевое слово NOPASSWD:
ivanov 192.168.4.15=NOPASSWD: /bin/mount /dev/fd0
Вызов утилиты sudo по умолчанию протоколируется системой в одном из журналов аудита. Выяснить, в каком именно журнале, можно с помощью команды lsof, предоставляющей информацию об открытых файлах.