Этот текст не является переводом полного руководства. Если вы администрируете систему с большим количеством пользователей и сложным распределением полномочий, то очень советую почитать документацию. Но, если вам просто надо выдать определённому пользователю определённые права, то в этой заметке в скорее всего найдёте готовый рецепт.
Редактировать файл sudoers
«вручную» — плохая практика.
Для редактирования есть специальная команда visudo
.
Она сама знает, где расположен файл sudoers
, и отследит,
чтобы вы редактировали копия, файл всегда был целостным, а
копия была удалена.
visudo
позволяет использовать любой редактор. Например,
вы можете использовать mcedit:
# EDITOR=mcedit visudo
Если вы допустите ошибку, то, при выходе из редактора получите сообщение вида:
visudo: >>> /etc/sudoers: syntax error near line 73 <<<
What now?
В этом случае, лучше ввести букву «e
» и продолжить редактирование.
Файл sudoers
, обычно, содержит много комментариев.
В каждой системе/дистрибутиве они различны. Имеет смысл
ознакомиться с ними и, возможно, внести какие-то правки
глобальных настроек.
Особое внимание следует обратить на директивы
#include ...
#includedir ...
за ними скрывается ещё куча всего интересного.
Но нас интересуют по-пользовательские
настройки. Обычно для них есть отдельная часть в sudoers
,
которая может начинаться таким комментарием:
##
## User privilege specification
##
Дальше полномочия описываются строчками вида:
[пользователь] [хост]=([кем может стать]) [что может сделать]
alex ALL=(root) /bin/mount /media/n78
Это означает, что пользователь alex
, может
выполнить с правами root
команду
/bin/mount /media/n78
.
Обратите внимание, путь к команде mount
указан полностью.
Это важно! Если этого не сделать, то sudo
работать не будет.
Теперь пользователь alex
может выполнить команду
$ sudo mount /media/n78
У него будет спрошен пароль (его, а не root).
Можно написать более сложные правила:
alex ALL=(ALL) ALL alex ALL=(root) NOPASSWD: /bin/mount /media/n78 alex ALL=(root) NOPASSWD: /bin/umount /media/n78
Пользователь alex
может выполнить монтирование от пользователя root
без пароля. И может выполнить любую команду от любого пользователя,
если укажет пароль.
Более полный пример с использованием флагов:
# пользователь root может всё без ограничений
root ALL=(ALL) ALL
# пользователь alex может становиться пользователем
# operator, без указания пароля, и пользователем root
# с указанием пароля
alex ALL=(operator) NOPASSWD: ALL, (root) ALL
# пользователь temp должен всегда указывать не свой пароль,
# а пароль того, кем он хочет стать; он может становиться
# только пользователем alex и выполнять только одну команду
Defaults:temp targetpw
temp ALL=(alex) /bin/bash
# (этот пользователь предназначен только для удалённого
# входа в систему с использованием временного пароля,
# отсюда и название)
Флагов существует великое множество, смотрите документацию.
Опции применяются в том порядке в каком они указаны в файле конфигурации. Поэтому более общие правила должны идти вначале, а боле частные уточнения должны располагаться ближе к концу.
После того, как вы всё настроили, вы можете проверить,
как sudo
интерпретирует ваши настройки. Это очень удобно.
Используйте команды:
$ sudo -l
$ sudo -ll
$ sudo -lU user_name
С их помощью вы можете легко найти ошибки или убедиться, что всё настроено правильно.
комментарии (экспериментальная возможность)