☰ Оглавление

Настройка sudo под Linux

Этот текст не является переводом полного руководства. Если вы администрируете систему с большим количеством пользователей и сложным распределением полномочий, то очень советую почитать документацию. Но, если вам просто надо выдать определённому пользователю определённые права, то в этой заметке в скорее всего найдёте готовый рецепт.

Как редактировать sudoers (visudo)

Редактировать файл sudoers «вручную» — плохая практика. Для редактирования есть специальная команда visudo. Она сама знает, где расположен файл sudoers, и отследит, чтобы вы редактировали копия, файл всегда был целостным, а копия была удалена.

visudo позволяет использовать любой редактор. Например, вы можете использовать mcedit:

# EDITOR=mcedit visudo

Если вы допустите ошибку, то, при выходе из редактора получите сообщение вида:

visudo: >>> /etc/sudoers: syntax error near line 73 <<<
What now?

В этом случае, лучше ввести букву «e» и продолжить редактирование.

Настройка прав доступа sudo

Файл 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).

Продвинутые правила sudo

Можно написать более сложные правила:

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

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



комментарии (экспериментальная возможность)

Ваше имя:
Ваше сообщение: