× К оглавлению На главную Об авторе

Дата и время публикации:     ## 1. Назначение Команда sudo (SuperUser DO) [разрешает](https://phoenixnap.com/kb/linux-sudo) регулярному пользователю доступ к файлам и директориям с ограниченным доступом (restricts access) и операциям. По умолчанию, в Linux регулярному пользователю ограничены права доступа к определенной частям системы для предотвращения несанкционированного доступа к файлам с конфиденциальной информацией (sensitive files). Команда sudo временно повышает привилегии регулярному пользователю, позволяя ему совершать деликатные задачи ( sensitive tasks) от имени суперпользователя root или другого пользователя. Командц sudo нужно рассматривать как [безопасную альтернативу](https://wiki.archlinux.org/title/Sudo#:~:text=Sudo%20allows%20a%20system%20administrator,the%20journal%20for%20security%20auditing.) команде su, которая запускает командную оболочку с правами доступа суперпользователя или регулярного пользователя, что может привести к разрушению системы в случае неправильно введенных команд или наличия ошибок безопасности в них. Каждый раз при запуске команды sudo производится отметка в системном журнале, что позволяет пользователям выполнять команды с повышением привилегий на короткое время, 5 ... 15 минут по умолчанию. Если какой-то регулярный пользователь попытается использовать команду sudo без назначенных привилегий , это факт будет зарегистрирован в системном журнале как событие безопасности. ## 2. Использование ### 2.1 Назначение sudo привелегий пользователя По умолчанию, привелигии sudo пользователя определяет плагин политик sudoers, которые управляются через файл файле /etc/sudoerrs. Права доступа которого должны быть установлены 0440 (--r--r---) , иначе команда sudo завершиться с ошибкой: ```shell # chown -c root:root /etc/sudoers # chmod -c 0440 /etc/sudoers ``` Политики в файл sudoers [задаются](https://www.sudo.ws/docs/man/1.8.15/sudoers.man/#SUDOERS_FILE_FORMAT) в виде отдельных записей и подразделяются в виде пользовательских определений: привилегии sudo пользователя. А так же изменения опций конфигурации sudo по умолчанию.э, такой как Каждая строчка в файле содержит определенное политику пользовательских привилегий sudo, наделяющее регулярного пользователя определенными привилегиями sudo, в широкоизвестной форме : ```shell USER_NAME HOST_NAME = (RUNAS_USER:RUNAS_GROUP) [[TAG_SPEC:] COMMAND_LIST] ``` Формат представления привилегии sudo [содержит](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/managing-sudo-access_configuring-basic-system-settings#con_user-authorizations-in-sudoers_managing-sudo-access) обязательные и дополнительные поля: **USER_NAME** имя пользователя, который вводит команду. Если значение начинается с символа %, она распространяет действие политики на группу. **HOST_NAME** является именем узла, на котором применяется данная политика. **RUNAS_USER:RUNAS_GROUP** определяет пользователя и группу, под которым будет выполняться команда. Если не указывать эти значения , USER_NAME может выполнять команду под суперпользователем. **COMMAND_LIST** содержит перечень команд с указанием абсолютного пути к ним и позволяет ограничивать использование команд с определенными опциями и аргументами. **TAG_SPEC** список команд может [сопровождаться](https://www.sudo.ws/docs/man/1.7.10/sudoers.man/#Tag_Spec) тэгами, такими как NOPASSWD, PASSWD, NOEXEC, EXEC, SETENV, NOSETENV, LOG_INPUT, NOLOG_INPUT, LOG_OUTPUT и NOLOG_OUTPUT. Когда тэг установлен, он распространяется на все команды в списке. При этом тэги антонимы перекрывают действие дрг друга с учётом понижения привилегий, например, PASSWD будет перекрывать NOPASSWD, а NOEXEC отменять EXEC. **Наделение пользователя привелегиями sudo выполнять команды от суперпользователя root** ```shell USER_NAME ALL=(ALL:ALL) ALL ``` **Наделение пользователя привелегиями выполнять команды от другого пользрвателя на определенном узле** ```shell USER_NAME HOST_NAME=(ALL:ALL) ALL ``` **Наделение пользователя привелегиями sudo из группы** Для того, чтобы наделить пользователя привелегиями sudo, необходимо вкключит его учётную запись (user account) в некоторую группу, имя которой обозначено group: ```shell %group ALL=(ALL:ALL) ALL ``` Потому что в различных дистрибутивах linux имя group предоставляющей регулярному пользователю может [разница](https://linuxconfig.org/distinguishing-between-the-sudo-and-admin-groups-in-linux-roles-and-usage) в своем названии, таком как admin, sudo и wheel . Поэтому и возникает путаница из-за принятых соглашений определения имен в различных дистрибутивах для обозначения группы пользователей с привилегиями sudo . В debian-базовых дистрибутивах, подобных Ubuntu, используется пользовательская группа sudo. Поэтому для наделения пользователя привилегиями sudo, достаточно просто имя учётной записи пользователя username добавить в эту группу group : ```shell # usermod -aG sudo username ``` В RHEL и Red Hat базовых дистрибутивов, например , fedora или centos : ```shell # usermod -aG wheel username ``` На некоторых старых системах, подобно Ubuntu 12.04 LTS : ```shell # usermod -aG admin username ``` Для [разрешения](https://www.golinuxcloud.com/linux-wheel-group/) запуска sudo без пароля следует добавить к привелегиям sudo тэг NOPASSWD , ко всем пользователям : ```shell %group ALL=(ALL) NOPASSWD: ALL ``` Несмотря на то, что команда sudo наделяет регулярного пользователя привелегиями временно, никто ему не помешает изменить пароль суперпользователя root, чтобы избежать этого группе пользовательских привилегий sudo следует запретить это делать: ```shell %group ALL=(ALL) ALL, !/usr/bin/passwd root ``` Для удаления пользователя из ```shell gpasswd -d user group ``` **Ограничения запуска команд и наделение пользователя привелегиями sudo** Можно [разрешить](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/managing-sudo-access_configuring-basic-system-settings#proc_configuring-sudo-privileges_managing-sudo-access) непривеллигированному пользователю вводить соотв. команды на определенных рабочих станциях путем настройки политики в общесистемной директории /etc/sudoers.d/ . Это будет более безопасныс чем наделять полный доступ к пользователю или никто к суперпользователю по следующим соображениям : - Более детальный контроль на привилегированным доступом пользователей с ограничением соотв. действий на определенных узлах взамен предоставления им полного административного доступа. - Более лучшее регистрация действий в системном журнале и использование пользователем привелегий sudo: каждое действие регистрируется с именем пользователя, который воспользовался данными привилегиями. - Прозрачный контроль за действиями пользователя с использованием извещений об применении им привелегий sudo . Для реализации таких возможностей в указанной директории создать файл `````` ```shell visudo -f /etc/sudoers.d/ ``` Который создаст встроенный редактор visudo и с помощью него добавить строчки: ```shell USER_NAME HOST_NAME = (RUNAS_USER:RUNAS_GROUP) ``` Что позволит пользователю запускать с правами RUNAS_USER:RUNAS_GROUP команду, а в системном журнале появиться запись о ее запуске. Для примера, ```shell %admin host1.example.com = /bin/dnf, /sbin/reboot ``` Всем пользователям из группы admin разрешено выполнять установку, обновления пакетов через пакетный менеджер dnf и перезапуск системы командой reboot на host1.example.com Для запрета, ограничения смены пароля root пользователям группы admin так же добавить ```shell %admin host1.example.com= !/usr/bin/passwd root ``` Для отправки извещений об использовании пользователями из группы sudo через почтовый сервис в этот же файл следует добавить строчки:



     Defaults    mail_always
     Defaults    mailto="..."


### 2.2 Ограничение времени действия пароля После того, как привелигии sudo пользователю были назначены и он прошел процедуру авторизации, соответствующая отметка uid была сделана в системном журнале, пользователю [выделено](https://www.omglinux.com/change-sudo-timeout-linux/) короткое время около 5минут, а не некоторых дистрибутивах, подобно, Ubuntu не более 15 минут, повторного ввода пароля. ```shell timestamp_timeout= ``` Для изменения периода действия пароля, необходимо изменить на желаемое число минут, например, на 1 час : ```shell Defaults timestamp_timeout=60 ``` Для [отмены](https://unix.stackexchange.com/questions/382060/change-default-sudo-password-timeout) периода действия пароля и запроса пароля при каждом запуске sudo : ```shell Defaults timestamp_timeout=0 ``` Но, выполнение команд может потребовать больше времени, поэтому можно [снять](https://stackoverflow.com/questions/58933609/is-it-possible-to-disable-sudo-timeout-in-the-current-shell) период действия пароля: ```shell Defaults env_reset, timestamp_timeout=-1 ```

 

Яндекс.Метрика