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

Проблема

Требуется поручить некоторые операции администрирования системы другим пользователям или создать дополнительный уровень безопасности для ваших административных потребностей, но это нужно сделать так, чтобы мощь привилегий root использовалась в ограниченном объёме, не раскрывая пароль root.

Решение

Воспользуйтесь sudo — командой, которая предоставляет ограниченные права root конкретным пользователям для решения определённых задач и регистрирует их действия без сообщения пароля root.

Допустим, имеется пользователь jhaugh, которому вы хотите предоставить полные права root. Поскольку пользователи sudo имеют собственные пароли, пароль root остаётся защищённым. Отредактируйте файл /etc/sudoers командой visudo — файл открывается в редакторе по умолчанию:

# visudo
# Файл sudoers
# Этот файл ДОЛЖЕН редактироваться командой 'visudo'
# с правами root.

Для начала создайте псевдоним хоста:

Host_Alias LOCALHOST = localhost

В секции «Спецификация привилегий пользователей» добавляются отдельные пользователи:

jhaugh ALL=(ALL) ALL

Эта строка предоставляет пользователю jhaugh привилегии root для выполнения любых операций в системе и на подключённых компьютерах. Если вы хотите предоставить другому пользователю tgwynne привилегии root только на локальном компьютере, добавьте следующую запись:

tgwynne LOCALHOST = ALL

Пользователю msmith разрешается только выключение локального компьютера:

msmith LOCALHOST = /sbin/shutdown, /sbin/halt

Вы также можете предоставить группам обычных пользователей право выключения своих компьютеров:

User_Alias USERS = tgwynne, msmith, jhaugh, abyron, jwinters
Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown, /usr/sbin/halt, /usr/sbin/reboot, /usr/sbin/poweroff
USERS LOCALHOST = SHUTDOWN

Вызов команды sudo выглядит так:

$ sudo /usr/sbin/halt

Команда запрашивает у пользователей их пароли, после чего выполняется. Чтобы узнать, выполнение каких команд разрешено, пользователи могут выполнить следующую команду:

$ sudo -l
User jhaugh may run the following commands on this host:
(ALL) ALL

Команда sudo фиксирует ошибки в системном журнале и передаёт сообщение root, если пользователь не имеет соответствующих прав:

$ sudo /usr/sbin/halt
carl is not in the sudoers file. This incident will be reported.

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

Host_Alias FILESERVERS = host1, host2, host3
User_Alias FILESERVERADMINS = jhaugh, abyron, jwinters
Cmnd_Alias FILEUTILS = /bin/chgrp, /bin/chmod, /bin/chown, /bin/cp, /bin/dd, /bin/df, /bin/mkdir, /bin/mv, /bin/rm, /bin/sync
FILESERVERADMINS FILESERVERS = FILEUTILS

Комментарий

Команда sudo также может применяться для запуска пользователями сценариев (например, для архивации данных). Будьте осторожны со сценариями, а также с командами, которые предоставляют доступ к командному процессору или текстовым редакторам. Эти инструменты могут позволить пользователю выйти за пределы своих привилегий. Постарайтесь ограничить sudo-пользователей с помощью редакторов, подобных rjoe — ограниченного редактора, который не позволяет запустить командный процессор. Однако, лучшим вариантом будет тщательно продумать механизм предоставления прав root.

См. также

su(1), sudo(8), sudoers(5); главная страница sudo (http://www.courtesan.com/sudo/).