10 полезных конфигураций sudoers для настройки «sudo» в Linux

В Linux и других операционных системах, подобных Unix, только пользователь root может запускать все команды и выполнять определенные критические операции на системе, такие как установка и обновление, удаление пакетов, создание пользователей и групп, изменение важных файлов конфигурации системы и так далее.

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

В качестве альтернативы системный администратор может распределить пароль пользователя root (что не рекомендуется), чтобы обычные пользователи системы имели доступ к учетной записи пользователя root с помощью команды su.

sudo позволяет разрешенному пользователю выполнить команду от имени root (или другого пользователя), как указано в политике безопасности:

  1. Он считывает и анализирует файл /etc/sudoers, ищет вызывающего пользователя и его разрешения,
  2. затем запрашивает у вызывающего пользователя пароль (обычно пароль пользователя, но также может быть пароль целевого пользователя. Или его можно пропустить с помощью тега NOPASSWD),
  3. после этого sudo создает дочерний процесс, в котором вызывается функция setuid() для переключения на целевого пользователя
  4. затем он выполняет оболочку или команду, указанную в качестве аргументов в вышеперечисленном дочернем процессе.

Ниже приведено десять конфигураций файлов /etc/sudoers, которые изменяют поведение команды sudo с помощью записей Defaults.

$ sudo cat /etc/sudoers
/etc/sudoers File
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults	logfile="/var/log/sudo.log"
Defaults	lecture="always"
Defaults	badpass_message="Password is wrong, please try again"
Defaults	passwd_tries=5
Defaults	insults
Defaults	log_input,log_output

Типы записей Defaults

Defaults                parameter,   parameter_list     #affect all users on any host
Defaults@Host_List      parameter,   parameter_list     #affects all users on a specific host
Defaults:User_List      parameter,   parameter_list     #affects a specific user
Defaults!Cmnd_List      parameter,   parameter_list     #affects  a specific command 
Defaults>Runas_List     parameter,   parameter_list     #affects commands being run as a specific user

В рамках этого руководства мы рассмотрим первый тип записей Defaults в следующих формах. Параметры могут быть флагами, целочисленными значениями, строками или списками.

Обратите внимание, что флаги неявно являются булевыми значениями и могут быть отключены с помощью оператора '!', а для списков есть два дополнительных оператора присваивания, += (добавить в список) и -= (удалить из списка).

Defaults     parameter
OR
Defaults     parameter=value
OR
Defaults     parameter -=value   
Defaults     parameter +=value  
OR
Defaults     !parameter       

1. Установка безопасного PATH

Это путь, используемый для каждой команды, выполняемой с помощью sudo, и он имеет два важных значения:

  1. Используется, когда администратор системы не доверяет пользователям sudo в отношении переменной среды PATH
  2. Для разделения «пути root» и «пути пользователя», только пользователи, определенные в exempt_group, не подвержены влиянию этой настройки.

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

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

2. Включение sudo для сеанса входа пользователя в TTY

Чтобы разрешить вызов sudo из реального tty, но не через такие методы, как cron или скрипты cgi-bin, добавьте следующую строку:

Defaults  requiretty   

3. Запуск команды Sudo с использованием pty

A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.

Чтобы избежать такой ситуации, вы можете настроить sudo для запуска других команд только из псевдо-pty с помощью параметра use_pty, независимо от того, включено ли ведение журнала ввода-вывода:

Defaults  use_pty

4. Создание файла журнала Sudo

По умолчанию sudo ведет журнал через syslog(3). Однако, чтобы указать пользовательский файл журнала, используйте параметр logfile следующим образом:

Defaults  logfile="/var/log/sudo.log"

Чтобы записать имя хоста и четырехзначный год в пользовательский файл журнала, используйте параметры log_host и log_year соответственно, как показано ниже:

Defaults  log_host, log_year, logfile="/var/log/sudo.log"

Ниже приведен пример пользовательского файла журнала sudo:

Create Custom Sudo Log File

5. Журнал ввода/вывода команды Sudo

Параметры log_input и log_output позволяют sudo выполнять команду в псевдо-терминале и записывать весь ввод пользователя и весь вывод, отправленный на экран соответственно.

По умолчанию каталог журнала ввода/вывода находится в /var/log/sudo-io, и если есть номер последовательности сеанса, он хранится в этом каталоге. Вы можете указать пользовательский каталог через параметр iolog_dir.

Defaults   log_input, log_output

Поддерживаются некоторые символы экранирования, такие как % {seq}, который расширяется до монотонно возрастающего номера последовательности в системе счисления по основанию 36, например 000001, где каждые две цифры используются для формирования нового каталога, например 00/00/01, как показано в примере ниже:

$ cd /var/log/sudo-io/
$ ls
$ cd  00/00/01
$ ls
$ cat log
Log sudo Input Output

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

6. Лекции для пользователей Sudo

Чтобы проводить лекции для пользователей sudo о использовании пароля в системе, используйте параметр lecture, как показано ниже.

У него есть 3 возможных значения:

  1. always – всегда проводить лекцию пользователю.
  2. один раз – только предупредить пользователя при первом запуске команды sudo (это используется, когда значение не указано)
  3. никогда – никогда не предупреждать пользователя.
 
Defaults  lecture="always"

Кроме того, вы можете установить пользовательский файл лекции с параметром lecture_file, введите соответствующее сообщение в файле:

Defaults  lecture_file="/path/to/file"
Lecture Sudo Users

7. Показать пользовательское сообщение, когда вы вводите неправильный пароль sudo

Когда пользователь вводит неправильный пароль, на командной строке отображается определенное сообщение. Стандартное сообщение: “извините, попробуйте еще раз“, вы можете изменить сообщение, используя параметр badpass_message следующим образом:

Defaults  badpass_message="Password is wrong, please try again"

8. Увеличение лимита попыток ввода пароля sudo

Параметр passwd_tries используется для указания количества попыток ввода пароля пользователем.

Стандартное значение: 3:

Defaults   passwd_tries=5 
Increase Sudo Password Attempts

Чтобы установить время ожидания пароля (по умолчанию 5 минут) с помощью параметра passwd_timeout, добавьте следующую строку:

Defaults   passwd_timeout=2

9. Позвольте sudo оскорблять вас, когда вы вводите неправильный пароль

В случае ввода пользователем неправильного пароля sudo будет отображать оскорбления в терминале с параметром оскорблений. Это автоматически отключит параметр badpass_message.

Defaults  insults 
Let’s Sudo Insult You When Enter Wrong Password

Узнать больше: Позвольте sudo оскорблять вас, когда вы вводите неверный пароль

10. Узнать больше о настройках sudo

Дополнительную информацию о настройках команды sudo можно найти в статье: Разница между su и sudo и как настроить sudo в Linux.

Это всё! Вы можете поделиться другими полезными настройками команды sudo или хитростями и советами по использованию Linux с другими пользователями в комментариях ниже.

Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/