Команда sudo в Linux и её использование

Команда sudo ( substitute user and do, подменить пользователя и выполнить ) даёт возможность строго определенным юзерам выполнять указанные программы с административными привилегиями без ввода пароля суперпользователя root. Если быть точнее, то команда sudo даёт возможность выполнять программы от имени любого пользователя, но, если идентификатор или имя этого пользователя не указаны, то предполагается выполнение от имени суперпользователя root. Таким образом, использование sudo даёт возможность выполнять привилегированные команды обычным юзерам без необходимости ввода пароля суперпользователя root . Список юзеров и перечень их прав по отношению к ресурсам системы может быть настроен оптимальным образом для обеспечения комфортной и безопасной работы. К примеру, команда sudo в Ubuntu Линукс, используется в режиме, позволяющем выполнять любые задачи администрирования системы без интерактивного входа под учетной записью root.

Команда sudo в Linux и её использование

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

Командная строка sudo может быть использована в следующих форматах:

sudo -h | -K | -k | -V

sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]

sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]

sudo [-AbEHknPS] [-C num] [-g group] [-h host] [-p prompt] [-u user] [VAR=value] [-i|-s] []

sudo -e [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-u user] file

Параметры командной строки:

-A, —askpass — юзать вспомогательную программу для ввода пароля

-b, —background — выполнить команду в фоновом режиме

-C, —close-from=num — закрыть все дескрипторы файлов >= num

-E, —preserve-env — сохранить пользовательское окружение при выполнении команды

-e, —edit — редактировать файлы вместо выполнения команды

-g, —group=group — выполнить команду от имени или ID указанной группы

-H, —set-home — установить для переменной HOME домашний каталог указанного пользователя

-h, —help — показать справку и выйти

-h, —host=host — выполнить команду на узле (если поддерживается модулем)

-i, —login — запустить оболочку входа в систему от имени указанного пользователя; также можно задать команду

-K, —remove-timestamp — полностью удалить файлик с timestamp

-k, —reset-timestamp — объявить недействительным файлик timestamp

-l, —list — показать список прав пользователя или проверить заданную команду; в длинном формате используется дважды

-n, —non-interactive — автономный режим без вывода запросов пользователю

-P, —preserve-groups — сохранить вектор группы вместо установки целевой группы

-p, —prompt=prompt — юзать указанный запрос пароля

-S, —stdin — читать пароль из стандартного ввода

-s, —shell — запустить оболочку от имени указанного пользователя; также можно задать команду

-U, —other-user=user — в режиме списка показывать права пользователя

-u, —user=user — выполнить команду (или редактировать файл) от имени или ID указанного пользователя

-V, —version — показать сведения о версии и выйти

-v, —validate — обновить временную метку пользователя без выполнения команды

— прекратить обработку аргументов командной строки

Примеры использования команды sudo

sudo –l — отобразить список команд, доступных для выполнения текущему пользователю. Кроме списка команд отображаются параметры среды, которые будут применяться при их выполнении.

sudo –ll — отобразить список команд, доступных для выполнения текущему пользователю в длинном (расширенном) формате.

В данном формате вместо краткого синтаксиса для списка разрешенных команд в виде (ALL : ALL) ALL отображается подробное описание прав пользователя:

Sudoers entry:

RunAsUsers: ALL

RunAsGroups: ALL

Команды: ALL

sudo lshw -C network — отобразить информацию о сетевом оборудовании с правами суперпользователя root

sudo –l –U user1 — увидеть список команд, доступных для выполнения пользователю user1. Для выполнения данной команды юзер должен быть root или иметь право на выполнение команды sudo -l, что обеспечивается настройками утилиты sudo в файле /etc/sudoers

sudo ipmitool sensor — выполнить команду ipmitool sensor с правами root .

sudo su — выполнить команду su, т.е. создать сеанс суперпользователя root

sudo -i — запустить командную оболочку с правами суперпользователя root. Для выполнения данной команды юзер должен иметь право на выполнение программы оболочки в среде sudo, к примеру — /bin/bash

sudo ls /usr/local/protected — получить список файлов каталога, доступного только root

sudo -u user2 ls ~ — получить список файлов домашнего каталога пользователя user2

sudo -u www vi ~www/htdocs/index.html — редактировать файлик ~www/htdocs/index.html от имени пользователя www

sudo -g adm view /var/log/syslog — просмотреть файлик системного журнала, доступного только суперпользователю root и членам группы adm

sudo -u user1 -g users2 vi /home/users2/textfile.txt — редактировать текстовый файлик как юзер user1, с принадлежностью к первичной группе users2

sudo -E /usr/bin/firefox — запустить браузер firefox от имени суперпользователя root, сохранив параметры среды текущего пользователя. Должно бытьсть выполнения команд с сохранением среды пользователя должна быть разрешена параметром SETENV в настройках файла конфигурации sudo

Файл конфигурации /etc/sudoers

Настройки sudo определяется содержимым файла /etc/sudoers. Так как ошибочные данные в данном файле могут привести к серьезным проблемам доступа к ресурсам системы, рекомендуется выполнять его изменение при помощи специального редактора sudoedit ( в некоторых дистрибутивах — visudo ), который поддерживает функции проверки синтаксиса и значительно снижает риск создания неработоспособной конфигурации sudo.

Содержимое файла /etc/sudoers определяет имена юзеров и групп, перечень выполняемых прог, необходимость введения паролей, и некоторые другие настройки, связанные с формированием переменных окружения при смене пользователя. Кроме этого файла, настройки sudo могут определяться содержимым файлов из каталога /etc/sudoers.d , что даёт возможность структурировать систему предоставления прав на использование sudo в виде набора файлов с осмысленными именами, что полезно при большом количестве юзеров и сложной системе разграничения прав. Имена файлов конфигураций в каталоге /etc/sudoers.d могут быть любыми, но их содержимое должно полностью соответствовать формату файла /etc/sudoers.

Синтаксис настроек в файле /etc/sudoers даёт возможность юзать специальные псевдонимы ( Alias-ы ), при помощи которых значительно упрощается как настройка, так и восприятие конфигурационной информации sudo.

В файле конфигурации /etc/sudoers возможно использование четырех разновидностей псевдонимов:

User_Alias — списки юзеров, для которых настраивается политика использования sudo.

Runas_Alias — списки юзеров, от имени которых может быть задано выполнение команд через sudo.

Host_Alias — списки узлов, с которых выполняется подключение к системе.

Cmnd_Alias — списки команд, использующиеся в настройках, выполняемых директивами файла /etc/sudoers

Примеры:

Host_Alias ADMCOMPS = localhost, server, admin — определяет псевдоним ADMCOMPS, который определяет группу компьютеров с именами localhost, server, admin.

Host_Alias MAILSERVERS = 192.168.0.100, smtp2 — определяет группу из 2-х компьютеров с указанными IP и именем. Должно быть использование адресов подсетей.

User_Alias ADMINS = jsmith, admusr — определяет группу ADMINS, в которую входят юзеры с именами jsmith и admusr.

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

## Группа команд, для работы в сети, псевдоним Networking

Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

# Группа команд для управления установкой и удалением прог, псевдоним SOFTWARE

Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

# Группа команд для управления системными службами, псевдоним SERVICES

Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

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

Основная часть настроек в файле /etc/sudoers задает правила, определяющие, какие юзеры, каких компьютеров, какие команды могут выполнять. Формат записей:

user MACHINE=COMMANDS

user — имена или псевдонимы пользователей.

MACHINE — имена или псевдонимы компьютеров

COMMANDS — секция команд, включающая имена или псевдонимы команд и дополнительные параметры.

Обычно, в файле /etc/sudoers присутствует директива, разрешающая выполнение пользователю root любых команд при любом подключении к системе:

Allow root to run any commands anywhere
root ALL=(ALL) ALL

Аналогичным образом можно разрешить выполнение через sudo всех команд для пользователя, к примеру, с именем user

user ALL=(ALL) ALL

При данной настройке, у пользователя будет запрашиваться пароль ( его личный, а не пароль суперпользователя root ). При необходимости, можно настроить секцию команд таким образом, чтобы пароль не запрашивался, с использованием параметра NOPASSWD:

user ALL=(ALL) NOPASSWD: /usr/bin/su, /usr/bin/drakxconf — пароль будет запрашиваться при выполнении юзером user через sudo всех команд, помимо su и drakxconf

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

ADMINS localhost=(ALL) NOPASSWD:ALL — разрешить группе юзеров, определенной псевдонимом “ADMINS” выполнять любые команды при подключении через петлевой интерфейс “localhost” без ввода пароля..

ADMINS ALL= NETWORKING, SOFTWARE — разрешить группе юзеров, объединенных псевдонимом “ADMINS” выполнять группы команд, объединенные псевдонимами “NETWORKING” и “SOFTWARE”.

Для существующих в системе групп юзеров можно также разрешать выполнение отдельных команд или групп команд:

%users localhost=/sbin/shutdown -h now — разрешить локальным юзерам выключение писишника.

%operators ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom — разрешить членам группы “operators” монтирование и размонтирование указанных устройств.

%powerusers ALL=NETWORKING, NOPASSWD: /usr/bin/su — разрешить членам группы “powerusers” выполнять команды группы “NETWORKING” с вводом пароля и команду “su” без пароля.

Довольно частенько появляется необходимость исключения разрешения на выполнение отдельных команд из списка, объединенных псевдонимом . В данном случае, перед именем команды или псевдонима ставится восклицательный знак – !

ADMINS ALL= ALL, !NETWORKING — разрешить группе юзеров, объединенных псевдонимом “ADMINS” выполнение всех команд, помимо команд, объединенных псевдонимом “NETWORKING”

В следующем примере, используется конфигурация команд, разрешающая выполнение через sudo для всех юзеров группы “ADMINS”, всех команд, помимо команд смены оболочки :

ADMINS ALL= ALL, !/bin/bash, !/usr/bin/su

Кроме настроек доступа, в файле /etc/sudoers присутствуют директивы Defaults, определяющие некоторые настройки путей исполняемых файлов и создание переменных окружения при выполнении команд:

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Defaults env_reset

Defaults env_keep = «COLOS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS»

Defaults env_keep += «MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE»

Defaults env_keep += «LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES»

Defaults env_keep += «LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE»

Defaults env_keep += «LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY»

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

Defaults timestamp_timeout=1

В данном случае, если команда sudo будет выполняться не позже, чем через 1 минуту после ввода пароля для предыдущей команды, то повторно пароль запрашиваться не будет. Если значение “timestamp_timeout” сделать равным нулю, то пароль будет запрашиваться при каждом запуске sudo, если сделать отрицательным ( -1 ), — то повторный ввод пароля не будет запрашиваться никогда.

Для исключения возможности выполнения sudo-команд при подключении через ssh без авторизации, по умолчанию, должна использоваться команда “ssh –t “:

# Disable «ssh hostname sudo «, because it will show the password in clear.

# You have to run «ssh -t hostname sudo «.

#

Defaults requiretty

Для определения дополнительного каталога с файлами конфигурации юзеров sudo используется директива:

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)

#includedir /etc/sudoers.d

Подробную справку по использовании sudo можно получить при помощи команд:

man sudo

man sudoers

Сайт проекта sudo (на англ. языке).

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: