В Linux и других операционных системах, подобных Unix, только пользователь root может запускать все команды и выполнять определенные критические операции на системе, такие как установка и обновление, удаление пакетов, создание пользователей и групп, изменение важных файлов конфигурации системы и так далее.
Тем не менее, системный администратор, который принимает роль пользователя root, может разрешить другим обычным пользователям системы с помощью команды sudo и нескольких настроек выполнять некоторые команды, а также выполнять ряд важных операций системы, включая упомянутые выше.
В качестве альтернативы системный администратор может распределить пароль пользователя root (что не рекомендуется), чтобы обычные пользователи системы имели доступ к учетной записи пользователя root с помощью команды su.
sudo позволяет разрешенному пользователю выполнить команду от имени root (или другого пользователя), как указано в политике безопасности:
- Он считывает и анализирует файл /etc/sudoers, ищет вызывающего пользователя и его разрешения,
- затем запрашивает у вызывающего пользователя пароль (обычно пароль пользователя, но также может быть пароль целевого пользователя. Или его можно пропустить с помощью тега NOPASSWD),
- после этого sudo создает дочерний процесс, в котором вызывается функция setuid() для переключения на целевого пользователя
- затем он выполняет оболочку или команду, указанную в качестве аргументов в вышеперечисленном дочернем процессе.
Ниже приведено десять конфигураций файлов /etc/sudoers, которые изменяют поведение команды sudo с помощью записей Defaults.
$ sudo cat /etc/sudoers
# # 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, и он имеет два важных значения:
- Используется, когда администратор системы не доверяет пользователям sudo в отношении переменной среды PATH
- Для разделения «пути 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:

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

Вы можете просмотреть остальные файлы в этом каталоге, используя команду cat.
6. Лекции для пользователей Sudo
Чтобы проводить лекции для пользователей sudo о использовании пароля в системе, используйте параметр lecture, как показано ниже.
У него есть 3 возможных значения:
- always – всегда проводить лекцию пользователю.
- один раз – только предупредить пользователя при первом запуске команды sudo (это используется, когда значение не указано)
- никогда – никогда не предупреждать пользователя.
Defaults lecture="always"
Кроме того, вы можете установить пользовательский файл лекции с параметром lecture_file, введите соответствующее сообщение в файле:
Defaults lecture_file="/path/to/file"

7. Показать пользовательское сообщение, когда вы вводите неправильный пароль sudo
Когда пользователь вводит неправильный пароль, на командной строке отображается определенное сообщение. Стандартное сообщение: “извините, попробуйте еще раз“, вы можете изменить сообщение, используя параметр badpass_message следующим образом:
Defaults badpass_message="Password is wrong, please try again"
8. Увеличение лимита попыток ввода пароля sudo
Параметр passwd_tries используется для указания количества попыток ввода пароля пользователем.
Стандартное значение: 3:
Defaults passwd_tries=5

Чтобы установить время ожидания пароля (по умолчанию 5 минут) с помощью параметра passwd_timeout, добавьте следующую строку:
Defaults passwd_timeout=2
9. Позвольте sudo оскорблять вас, когда вы вводите неправильный пароль
В случае ввода пользователем неправильного пароля sudo будет отображать оскорбления в терминале с параметром оскорблений. Это автоматически отключит параметр badpass_message.
Defaults insults

Узнать больше: Позвольте sudo оскорблять вас, когда вы вводите неверный пароль
10. Узнать больше о настройках sudo
Дополнительную информацию о настройках команды sudo можно найти в статье: Разница между su и sudo и как настроить sudo в Linux.
Это всё! Вы можете поделиться другими полезными настройками команды sudo или хитростями и советами по использованию Linux с другими пользователями в комментариях ниже.
Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/