Настройка sudo в Linux

Команда sudo играет очень важное значение для управления правами доступа в операционной системе Linux. Благодаря этой небольшой команде вы можете давать полномочия на выполнение тех или иных действий от имени администратора другим пользователям, при этом не давая им сам пароль суперпользователя. Также вам не нужно сидеть всегда под учетной записью суперпользователя чтобы иногда выполнять административные действия.

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

Как работает sudo?

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

Имя команды означает substitute user do или super user do. Утилита позволяет запускать программы от имени другого пользователя, но чаще всего от имени корневого. Утилита была разработана еще в 1980 году Бобом Когшелом и Клиффом Спенсером. За это время сменилось много разработчиков и было добавлено много функций.

Работает sudo благодаря флагу доступа SUID. Если этот флаг установлен для программы, то она выполняется не от имени того пользователя который ее запустил, а от имени владельца, учитывая что файл sudo принадлежит, то утилита выполняется от имени root. Затем она читает свои настройки, запрашивает пароль пользователя и решает можно ли ему разрешать выполнение команд от имени администратора. Если да, то выполняется переданная в параметре команда.

Теперь, когда вы знаете теорию, давайте рассмотрим как настроить sudo в Linux.

Настройка sudo в Linux

Все настройки sudo находятся в файле /etc/sudores. Здесь можно настроить очень много параметров, начиная от кому будет позволено выполнять команды от имени суперпользователя и заканчивая ограничением набора доступных команд.

Чтобы открыть файл для редактирования наберите такую команду от имени суперпользователя:

visudo

Вы также можете указать текстовый редактор, в котором вы хотите редактировать файл настройки:

EDITOR=nano visudo

Дальше мы рассмотрим самые интересные настройки, которые вы можете задать в этом файле. Но сначала давайте рассмотрим основной синтаксис файла. Он состоит из двух типов строк, это псевдонимы, которые позволяют создавать списки пользователей и флагов, а также сами правила, которые задают как будет вести себя команда sudo. Синтаксис алиасов выглядит вот так:

тип имя_алиаса = элемент1, элемент2, элемент3

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

Описание разрешений для пользователей имеет немного другой синтаксис:

пользователь хост  = (другой_пользователь:группа) команды

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

Основные параметры

Алиас Defaults позволяет задать стандартные параметры для работы утилиты, их мы и рассмотрим в этом разделе. Начинается такой алиас со слова Defaults, дальше идет имя флага. Если перед именем есть символ !, это значит, что флаг нужно включить, в обратном случае выключить:

Отключаем введение при первом использовании:

Defaults !lecture

sudo

Суперпользователь не может выполнять sudo:

Defaults !root_sudo

sudo1

Теперь если вы попытаетесь выполнить sudo sudo ничего не сработает:

sudo2

Изменять домашнюю директорию для целевого пользователя, по умолчанию остается папка текущего пользователя в качестве домашней директории:

Defaults set_home

sudo3

Сохранять список групп текущего пользователя:

Defaults !preserve_groups

sudo4

Запрашивать пароль суперпользователя вместо пароля пользователя:

Defaults rootpw

sudo5

sudo6

Дальше рассмотрим переменные, которым можно задать значения чтобы установить нужные настройки:

Задать количество попыток ввода пароля перед тем, как sudo прекратит работу, по умолчанию — 3:

Defaults passwd_tries=5

sudo7

sudo8

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

Defaults timestamp_timeout=10

sudo9

Следующий параметр задает количество минут, пока sudo будет ожидать повторного ввода пароля при неправильном вводе:

Defaults passwd_timeout=10

sudo9

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

Defaults passprompt="Ваш пароль:"

sudo12

 

Можно указать другого пользователя, не root, от которого будут выполняться все команды, для этого используйте:

Defaults runas_default="пользователь"

Вы можете записывать в лог все попытки подключения к sudo:

Defaults logfile=/var/log/sudo

sudo10

Затем пробуем проверить работу лога:

sudo cat /var/log/sudo

sudo11

Это были все самые интересные параметры настройки работы sudo, которые могут вам понадобиться, дальше мы рассмотрим как задать права доступа sudo для пользователей.

Настройка пользователей sudo

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

ALL ALL = (ALL) ALL

sudo13

Такая команда очень небезопасна, она разрешает всем и все. Первое ALL — разрешить всем пользователям, второе ALL — для всех хостов, третье ALL — разрешить вход под любым пользователем и четвертое — разрешить выполнять любою команду. Но куда более часто используется другая конструкция:

%wheel ALL = (ALL) ALL

sudo14

 

Означает то же самое, что и предыдущее, только здесь мы разрешаем использовать sudo не всем пользователям, а только тем, которые состоят в группе wheel.

%wheel ALL = (root) ALL

Тут мы уже ограничили возможный выбор пользователей только пользователем root. Также можно указать группу пользователя, от имени которого он может выполнять команды:

%wheel ALL = (root:admins) ALL

sudo15

Это значит что можно выполнить команду от имени root или другого пользователя из группы admins. Еще мы можем указать команды, которые может выполнять пользователь. Например:

%wheel ALL = (root) /bin/mount, /bin/umount

sudo17

Пользователь может выполнять только команды mount и umount от имени суперпользователя. Теперь сделаем еще интереснее, пользователь может выполнять mount и umount без пароля, а все остальные команды с паролем:

%wheel ALL = (root) ALL
%wheel ALL = (root) NOPASSWD: /bin/mount, /bin/umount

Также можно ограничивать пользователям по хостах, например, разрешаем использование sudo только из host1:

%wheel host1 = (root) ALL

Осталось еще рассмотреть как применять псевдонимы. Псевдонимы могут быть таких типов:

  • User_Alias — псевдоним пользователей, которые будут использовать sudo;
  • Runas_Alias — псевдоним пользователей, от имени которых будут выполняться команды;
  • Host_Alias — псевдоним хоста;
  • Cmnd_Alias — псевдоним команд;

Например, создадим четыре псевдонима и применим их в нашем правиле:

User_Alias Users = user1,user2,user3
Runas_Alias Admins = root,admin
Host_Alias Hosts = host1,host2
Cmd_Alias Cmds = /bin/mount,/bin/umount

Далее применяем все это в правиле:

Users Hosts = (Admins) Cmds

Это значит, что пользователи из списка Users смогут выполнять команды Cmds от имени пользователей Amdins на хостах Hosts.

Еще осталось сказать несколько слов о флагах. Флаг NOPASSWD говорит, что не нужно запрашивать пароль при выполнении этого правила. Например, разрешить всем пользователям выполнять команду mount с sudo без пароля:

ALL ALL = (root) NOPASSWD: /bin/mount

Также можно запретить выполнять именно эту команду вообще с помощью флага NOEXEC:

ALL ALL = (root) NOEXEC /bin/mount

Вы можете проверить правильно ли была проведена настройка файла /etc/sudores и посмотреть все созданные правила с помощью команды:

sudo -l

sudo18

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

Выводы

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

5 комментариев

  1. divastator Ноябрь 10, 2016 Ответить
  2. Валентин Ноябрь 11, 2016 Ответить
  3. Mikhail Ноябрь 11, 2016 Ответить
  4. Орхан Апрель 7, 2017 Ответить
  5. Васа Июнь 14, 2017 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: