Sudoers правила. Выборочно разрешить выполнение команд пользователям без root.

С помощью утилиты sudo совершенно не обязательно выдавать пользователю абсолютно все права, на выполнение всех команд в системе, от имени root. И для этого не обязательно добавлять юзера в группу sudo.

Возможно также разграничение прав на определенные команды для пользователя или групп пользователей.

Но прежде чем начать настраивать sudoers правила, важно запомнить:

  1. файл /etc/sudoers редактируется при помощи команды visudo
  2. остальные файлы правил создаются и редактируются командой visudo -f /etc/sudoers.d/you_file_name
  3. выбор удобного редактора командой update-alternatives --config editor

visudo похожа на crontab тем, что во время сохранения файла проверяет его синтаксис и не даст сохранить файл с неверным синтаксисом(что может привести к уязвимости системы).

Как частично разрешить выполнение systemctl команд определённым юзерам?

Предположим, есть пользователь username, которому необходимо разрешить управление(старт, рестарт и т.д) каким либо сервисом, без ввода пароля. Создадим файл /etc/sudoers.d/username и пропишем в нем ряд команд через запятую, или одну команду:

или так:

Прописав команду sudo перед указанными командами, юзер сможет выполнить их без пароля. А разрешение для группы пользователей будет выглядеть так:

После внесенных изменений необходим рестарт сервиса sudo, естественно от рута:

Следует обратить внимание — то что прописано в каталоге /etc/sudoers.d/ должно подтягиваться из основного конфига /etc/sudoers поэтому в этом файле должно быть прописано внизу:

именно так, с решеткой в начале, хоть это и выглядит как комментарий, это не простой комментарий.

Конечно, мы можем прописывать разрешения и в основном конфиг файле, но делать этого не рекомендуется.

А чтобы разрешить пользователю выполнение абсолютно всех команд без ввода пароля:

Базовый синтаксис sudoers

Для лучшего понимания базового синтаксиса sudo заглянем в /etc/sudoers и посмотрим на эти строки:

  • Первое поле задаёт имя пользователя или группу, к которым нужно применить данное правило (в данном случае это root и группа sudo).
  • Первое ALL значит, что правило будет применяться ко всем хостам.
  • Второе ALL значит, что указанный пользователь может запускать команды в сессии любого пользователя.
  • Третье ALL значит, что указанный пользователь может запускать команды в любой группе.
  • Последнее ALL указывает, что эти правила нужно применять ко всем командам.

Однако в данном случае ввод первой sudo команды в группе sudo будет сопровождаться просьбой ввода пароля текущего(не root) пользователя.

В самом деле, синтаксис sudo прост как мычание! Некоторая путаница, для вникающего впервые, возникает по той причине, что параметры по умолчанию опускаются, но разбираться как именно они отрабатывают важно.

Например, команда NOPASSWD значит, что система не будет запрашивать пароль. Но также существует команда PASSWD, которая отвечает за противоположное поведение и используется по умолчанию. Эти записи идентичны:

Если в правиле не указан пользователь и группа, по умолчанию sudo использует root, именно поэтому данные записи тоже идентичны:

Для структурирования sudo прав применяются алиасы. Например в алиас sudo можно объединить несколько пользователей и затем применять к ним те или иные правила. Создадим 3 алиаса, в которых 9 пользователей:

Имена групп должны начинаться с большой буквы. После этого можно дать пользователям GROUPTWO право на изменение БД apt-get:

В правиле не указан пользователь и группа, тут по умолчанию sudo использует root.

Затем можно разрешить пользователям группы GROUPTHREE выключать и перезапускать машину; для этого нужно создать алиас команды:

Алиас команды POWER содержит команды для отключения и перезапуска машины.

Также можно создать алиас Run as, который заменяет часть правила, указывающую пользователя, в сессии которого нужно выполнить команду.

Теперь любой пользователь группы GROUPONE может выполнять команды в сессиях пользователей www-data или apache.

Примечание: Помните, что созданные ранее правила имеют более высокий приоритет в случае конфликта правил.

Блокировка правил

Существует ряд способов контроля поведения и реакции sudo на вызов.

К примеру, команда updatedb в сочетании с пакетом mlocate относительно безвредна. Чтобы обычный пользователь мог выполнять её с привилегиями суперпользователя, не вводя пароль, можно создать такое правило:

Команда NOPASSWD значит, что система не будет запрашивать пароль. Также существует команда PASSWD, которая отвечает за противоположное поведение и используется по умолчанию.

NOPASSWD распространяется на всё правило, если команда PASSWD не отменяет его. Например, строка может выглядеть так:

Ещё одна удобная команда – NOEXEC, которая используется для предотвращения опасного поведения определенных программ. К примеру, некоторые команды, такие как less, могут вызывать другие команды:

Эта команда выполняет любую команду с привилегиями пользователя, запускающего less, а это может быть очень опасно.

Чтобы запретить такое поведение, можно использовать следующую строку:

Частично данный материал взят из источника: https://www.8host.com/blog/redaktirovanie-fajla-sudoers-v-ubuntu-i-centos/  — не впервые обнаруживаю в их блоге очень годные статьи по системному администрированию unix.

Добавление юзера sudo на сервер с авторизацией по SSH ключам

Оставить комментарий

Ваш адрес email не будет опубликован.