8.21. Временное предоставление привилегий root командой sudo

Проблема
Требуется поручить некоторые операции администрирования системы другим
пользователям или создать дополнительный уровень безопасности для ваших ад министративных потребностей, но это нужно сделать так, чтобы мощь привиле гий root использовалась в ограниченном объеме, не раскрывая пароль root.
Решение
Воспользуйтесь sudo — командой, которая предоставляет ограниченные права root
конкретным пользователям для решения конкретных задач и регистрирует их
действия без сообщения пароля root.
Допустим, имеется пользователь jhaugh, которому вы хотите предоставить пол ные права root. Поскольку пользователи sudo имеют собственные пароли, пароль
root остается защищенным. Отредактируйте файл /etc/sudoers командой visudo —
файл открывается в редакторе по умолчанию.
# visudo
# Файл sudoers
#
# Этот файл ДОЛЖЕН редактироваться командой 'visudo'
# с правами root.
# За дополнительной информацией о записи в файл
# sudoers обращайтесь к man-странице.
#
# Спецификация псевдонимов хостов
# Спецификация псевдонимов пользователей
# Спецификация псевдонимов команд
# Спецификация привилегий пользователей
root ALL=(ALL) ALL
Для начала создайте псевдоним хоста:
Host_Alias LOCALHOST= local host
В секции «Спецификация привилегий пользователей» («User privilege specification
») добавляются отдельные пользователи:
jhaugh ALL=(ALL) ALL
Эта строка предоставляет jhaugh привилегии root для выполнения любых опе раций в системе и на подключенных компьютерах. Допустим, вы хотите предо ставить другому пользователю tgwynne привилегии root только на локальном ком пьютере. Включите следующую запись:
tgwynne LOCALHOST = ALL
А пользователю msmith разрешается только выключение локального компьютера:
msmith LOCALHOST=/sbin/shutdown, /sbin/halt
Предоставление группам обычных пользователей права выключения своих
компьютеров:
# Спецификация псевдонимов хостов
Host_Alias LOCALHOST = local host
# Спецификация псевдонимов пользователей
User_Alias USERS = tgwynne. msmith. jhaugh, \
abyron. jwinters
# Спецификация псевдонимов команд
Cmnd_Alias SHUTDOWN - /usr/sbin/shutdown, /usr/sbin/halt. \
/usг/sbin/reboot, /usr/sbin/poweroff
# Спецификация привилегий пользователей
USERS LOCALHOST = SHUTDOWN
Вызов команды sudo выглядит так:
$ sudo /usr/sbin/halt
Команда запрашивает у пользователей их пароли, после чего завершается. Что бы узнать, выполнение каких команд им разрешено, пользователи могут выпол нить следующую команду:
$ sudo -1
User jhaugh may run the following commands on this host:
(ALL) ALL
Команда sudo фиксирует ошибки в системном журнале и передает сообщение root:
$ sudo /usr/sbin/halt
carl a is not in the sudoers file. This incident will be reported.
Вы можете определять группы серверов и предоставлять пользователям при вилегии для группы:
# Спецификация псевдонимов хостов
Host Alias FILESERVERS - hostl. host2. host3
# Спецификация псевдонимов пользователей
User_Alias FILESERVERADMINS = jhaugh. abyron. jwinters
# Спецификация псевдонимов команд
Cmnd_Alias FILEUTILS = /bin/chgrp. /bin/chmod, \
/bin/chown, /bin/cp. /bin/dd. /bin/df. \
/bin/dir, /bin/dircolors. /bin/du. /bin/install. \
/bin/In. /bin/Is, /bin/mkdir, /bin/mkinfo, \
/bin/mknod, /bin/mv, /bin/rm. /bin/rmdir. \
/bin/shred, /bin/touch, /bin/vdir sync
# Спецификация привилегий пользователей
FILESERVADMIN FILESERVERS = FILEUTILS
Комментарий
Команда sudo также может применяться для запуска пользователями сценариев (на пример, сценариев архивации). Будьте очень осторожны со сценариями, а также с ко мандами, предоставляющими доступ к командному процессору или запускающими
текстовые редакторы, так как с их помощью пользователи могут выйти за пределы
своих привилегий. Попробуйте ограничить sudo-пользователей RJOE — ограни ченным редактором, который не позволяет запустить командный процессор, но
лучше с самого начала хорошенько продумать механизм предоставления прав root.
См. также
su(l), sudo(8), sudoers(5); главная страница sudo (http://www.courtesan.com/sudo/).