Краткая справка (sudo --help)

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] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...

Параметры:
-A, --askpass                   использовать вспомогательную программу для ввода пароля
-b, --background             выполнить команду в фоновом режиме
-C, --close-from=num      закрыть все дескрипторы файлов >= num
-E, --preserve-env           сохранить пользовательское окружение при выполнении команды
--preserve-env=list         сохранять определенные переменные среды
-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     использовать указанный запрос пароля
-r, --role=role                 создать контекст безопасности SELinux с указанной ролью
-S, --stdin                      читать пароль из стандартного ввода
-s, --shell                       запустить оболочку от имени указанного пользователя; также можно задать команду
-t, --type=type               создать контекст безопасности SELinux указанного типа
-T, --command-timeout=timeout завершить команду по истечении указанного срока
-U, --other-user=user    в режиме списка показывать права пользователя
-u, --user=user              выполнить команду (или редактировать файл) от имени или ID указанного пользователя
-V, --version                  показать сведения о версии и выйти
-v, --validate                обновить временную метку пользователя без выполнения команды
--                                 прекратить обработку аргументов командной строки

Полная справка

ИМЯ

sudo, sudoedit — выполнить команду от имени другого пользователя

СИНТАКСИС

sudo -h | -K | -k | -V
sudo -v [-ABknS] [-g группа] [-h хост] [-p prompt] [-u пользователь]
sudo -l [-ABknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
sudo [-ABbEHnPS] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-r role] [-t type] [-T timeout] [-u user] [VAR=value] [-i | -s] [command]
sudoedit [-ABknS] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-r role] [-t type] [-T timeout] [-u user] file ...

ОПИСАНИЕ

sudo позволяет разрешенному пользователю выполнять команду в качестве суперпользователя или другого пользователя, как указано в политике безопасности. Реальный (недействующий) идентификатор пользователя вызывающего пользователя используется для определения имени пользователя, с помощью которого запрашивается политика безопасности.

sudo поддерживает архитектуру подключаемых модулей для политик безопасности, аудита и ведения журналов ввода-вывода. Третьи стороны могут разрабатывать и распространять свои собственные плагины для бесперебойной работы с интерфейсом sudo. Политика безопасности по умолчанию — sudoers, которая настраивается через файл /etc/sudoers или через LDAP. Дополнительную информацию см. в разделе «Плагины».

Политика безопасности определяет, какие привилегии, если таковые имеются, пользователь должен запускать sudo. Политика может требовать, чтобы пользователи аутентифицировались с помощью пароля или другого механизма аутентификации. Если требуется аутентификация, sudo завершит работу, если пароль пользователя не будет введен в течение настраиваемого срока. Это ограничение зависит от политики; время ожидания запроса пароля по умолчанию для политики безопасности sudoers составляет 0 минут.

Политики безопасности могут поддерживать кэширование учетных данных, чтобы позволить пользователю снова запустить sudo в течение определенного времени без требования аутентификации. По умолчанию политика sudoers кэширует учетные данные на основе терминала в течение 15 минут. Дополнительную информацию смотрите в опциях timestamp_type и timestamp_timeout в sudoers(5). Запуск sudo с опцией -v позволяет пользователю обновить кэшированные учетные данные без выполнения команды.

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

При вызове как sudoedit подразумевается параметр -e (описанный ниже).

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

Возможны следующие варианты:

-A, --askpass
Обычно, если sudo запрашивает пароль, он считывает его с терминала пользователя. Если указана опция -A (askpass), выполняется вспомогательная программа (возможно, графическая) для считывания пароля пользователя и вывода пароля на стандартный вывод. Если задана переменная окружения SUDO_ASKPASS, она указывает путь к вспомогательной программе. В противном случае, если sudo.conf(5) содержит строку, указывающую программу askpass, будет использовано это значение. Например:
# Путь к вспомогательной программе askpass
Путь askpass /usr/X11R6/bin/ssh-askpass

Если программа askpass недоступна, sudo завершит работу с ошибкой.

-B, --bell
Вызов звонка в рамках запроса пароля при наличии терминала. Эта опция не работает, если используется программа askpass.

-b, --background
Запустить указанную команду в фоновом режиме. Обратите внимание, что невозможно использовать управление заданиями оболочки для управления фоновыми процессами, запущенными с помощью sudo. Большинство интерактивных команд не смогут работать должным образом в фоновом режиме.

-C num, --close-from=num
Закрыть все файловые дескрипторы, которые больше или равны num, перед выполнением команды. Значения меньше трех не допускаются. По умолчанию sudo закроет все открытые файловые дескрипторы, отличные от стандартного ввода, стандартного вывода и стандартной ошибки при выполнении команды. Политика безопасности может ограничивать возможность пользователя использовать эту опцию. Политика sudoers разрешает использование параметра -C только в том случае, если администратор включил параметр closefrom_override.

-D directory, --chdir=directory
Запустить команду в указанном каталоге вместо текущего рабочего каталога. Политика безопасности может возвращать сообщение об ошибке, если у пользователя нет разрешения на указание рабочего каталога.

-E, --preserve-env
Указывает политике безопасности, что пользователь желает сохранить свои существующие переменные среды. Политика безопасности может возвращать сообщение об ошибке, если у пользователя нет разрешения на сохранение среды.

--preserve-env=list
Указывает политике безопасности, что пользователь желает добавить список переменных среды, разделенных запятыми, к тем, которые сохранились из среды пользователя. Политика безопасности может возвращать сообщение об ошибке, если у пользователя нет разрешения на сохранение среды. Этот параметр может быть указан несколько раз.

-e, --edit
Отредактировать один или несколько файлов вместо выполнения команды. Вместо имени пути при ознакомлении с политикой безопасности используется строка "sudoedit". Если пользователь авторизован в соответствии с политикой, выполняются следующие действия:

1. Создаются временные копии файлов, подлежащих редактированию, с указанием владельца вызывающего пользователя.

2. Для редактирования временных файлов запускается редактор, указанный политикой. Политика sudoers использует переменные среды SUDO_EDITOR, VISUAL и EDITOR (в таком порядке). Если ни один из параметров SUDO_EDITOR, VISUAL или EDITOR не задан, используется первая программа, указанная в параметре editor sudoers(5).

3. Если они были изменены, временные файлы копируются обратно в их исходное местоположение, а временные версии удаляются.

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

• Символьные ссылки редактировать запрещено (версия 1.8.15 и выше).

• Символьные ссылки вдоль редактируемого пути не используются, если вызывающий пользователь доступен для записи в родительский каталог, если только этот пользователь не является root (версия 1.8.16 и выше).

• Файлы, расположенные в каталоге, доступном для записи вызывающим пользователем, не могут быть отредактированы, если только этот пользователь не является root (версия 1.8.16 и выше).

Пользователям никогда не разрешается редактировать специальные файлы устройства.

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

-g group, --group=group
Запустите команду, установив для основной группы значение group вместо основной группы, указанной в записи базы данных паролей целевого пользователя. Группа может быть либо именем группы, либо числовым идентификатором группы (GID) с префиксом символа "#" (например, #0 для GID 0). При запуске команды в качестве GID многие оболочки требуют, чтобы символ ‘#’ экранировался обратной косой чертой (‘\’). Если параметр -u не указан, команда будет запущена от имени вызывающего пользователя. В любом случае для основной группы будет установлено значение group. Политика sudoers разрешает указывать любую из целевых групп пользователей с помощью параметра -g до тех пор, пока параметр -P не используется.

-H, --set-home
Запросите, чтобы политика безопасности установила для переменной среды HOME значение домашнего каталога, указанного в записи базы данных паролей целевого пользователя. В зависимости от политики, это может быть поведение по умолчанию.

-h, --help
Выведи короткое справочное сообщение на стандартный вывод и завершите работу.

-h host, --host=host
Запусти команду на указанном хосте, если плагин политики безопасности поддерживает удаленные команды. Обратите внимание, что плагин sudoers в настоящее время не поддерживает выполнение удаленных команд. Это также может быть использовано в сочетании с параметром -l для перечисления привилегий пользователя для удаленного хоста.

-i, --login
Запустите оболочку, указанную в записи базы данных паролей целевого пользователя, в качестве оболочки входа в систему. Это означает, что оболочка будет считывать файлы ресурсов, специфичные для входа в систему, такие как .profile, .bash_profile или .login. Если указана команда, она передается в оболочку как простая команда с использованием параметра -c. Команда и любые аргументы объединяются, разделяются пробелами, после экранирования каждого символа (включая пробел) обратной косой чертой (‘\’), за исключением буквенно-цифровых символов, подчеркиваний, дефисов и знаков доллара. Если команда не указана, выполняется интерактивная оболочка. sudo пытается перейти в домашний каталог этого пользователя перед запуском оболочки. Команда выполняется в среде, аналогичной той, которую пользователь получил бы при входе в систему. Обратите внимание, что большинство оболочек ведут себя по-разному при указании команды по сравнению с интерактивным сеансом; обратитесь за подробностями к руководству оболочки. В разделе Командная среда в руководстве sudoers(5) описано, как параметр -i влияет на среду, в которой выполняется команда, когда используется политика sudoers.

-K, --remove-timestamp
Аналогично параметру -k, за исключением того, что он полностью удаляет кэшированные учетные данные пользователя и не может использоваться в сочетании с командой или другим параметром. Этот параметр не требует ввода пароля. Не все политики безопасности поддерживают кэширование учетных данных.

-k, --reset-timestamp
При использовании без команды кэшированные учетные данные пользователя становятся недействительными. Другими словами, при следующем запуске sudo потребуется ввести пароль. Эта опция не требует ввода пароля и была добавлена для того, чтобы позволить пользователю отозвать разрешения sudo из файла .logout.

При использовании в сочетании с командой или параметром, для которых может потребоваться пароль, этот параметр приведет к тому, что sudo проигнорирует кэшированные учетные данные пользователя. В результате sudo запросит пароль (если он требуется политикой безопасности) и не обновит кэшированные учетные данные пользователя.

Не все политики безопасности поддерживают кэширование учетных данных.

-l, --list
Если команда не указана, перечисли разрешенные (и запрещенные) команды для вызывающего пользователя (или пользователя, указанного параметром -U) на текущем хосте. Формат более длинного списка используется, если этот параметр указан несколько раз и политика безопасности поддерживает подробный формат вывода.

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

-n, --non-interactive
Избегать запроса у пользователя каких-либо данных для ввода. Если для выполнения команды требуется пароль, sudo отобразит сообщение об ошибке и завершит работу.

-P, --preserve-groups
Сохранить вектор группы вызывающего пользователя неизмененным. По умолчанию политика sudoers инициализирует групповой вектор в списке групп, членом которых является целевой пользователь. Однако реальные и эффективные идентификаторы групп по-прежнему устанавливаются в соответствии с целевым пользователем.

-p prompt, --prompt=prompt
Используйте запрос пользовательского пароля с необязательными escape-последовательностями. Следующие процентные (‘%’) управляющие последовательности поддерживаются политикой sudoers:

%H расширяет до имени хоста, включая доменное имя (только если имя хоста компьютера указано полностью или параметр fqdn задан в sudoers(5))

%h расширяет до имени локального хоста без доменного имени

%p расширяет до имени пользователя, пароль которого запрашивается (учитывает флаги rootpw, targetpw и runaspw в sudoers(5))

%U расширяет до имени пользователя для входа в систему, команда будет выполняться как (по умолчанию используется root, если также не указан параметр -u)

%u расширяет до логина вызывающего пользователя

%% два последовательных символа "%" сворачиваются в один символ "%"

Пользовательское приглашение переопределит приглашение по умолчанию, указанное либо политикой безопасности, либо переменной среды SUDO_PROMPT. В системах, использующих PAM, пользовательское приглашение также будет переопределять приглашение, указанное модулем PAM, если только флаг passprompt_override не отключен в sudoers.

-R directory, --chroot=directory
Перейти в указанный корневой каталог (см. chroot(8)) перед выполнением команды. Политика безопасности может возвращать сообщение об ошибке, если у пользователя нет разрешения на указание корневого каталога.

-r role, --role=role
Запустить команду с контекстом безопасности SELinux, который включает указанную роль.

-S, --stdin
Напишите подсказку в стандартный поток ошибок и считайте пароль из стандартного ввода, вместо использования терминального устройства.

-s, --shell
Запустите оболочку, указанную в переменной среды SHELL, если она установлена, или оболочку, указанную в записи базы данных паролей вызывающего пользователя. Если указана команда, она передается оболочке в качестве простой команды с использованием опции -c. Команда и все аргументы объединяются, разделяются пробелами, после чего каждый символ (включая пробелы) экранируется обратной косой чертой ('\'), за исключением буквенно-цифровых символов, подчеркиваний, дефисов и знаков доллара. Если команда не указана, выполняется интерактивная оболочка. Обратите внимание, что большинство оболочек ведут себя по-разному, когда указана команда по сравнению с интерактивной сессией; для получения подробной информации обратитесь к руководству по оболочке.

-t type, --type=type
Запустите команду с контекстом безопасности SELinux, который включает указанный тип. Если тип не указан, тип по умолчанию является производным от роли.

-U user, --other-user=user
Используется в сочетании с параметром -l для перечисления привилегий для пользователя, а не для вызывающего пользователя. Политика безопасности может ограничивать перечисление привилегий других пользователей. Политика sudoers позволяет использовать эту опцию только root или пользователю с правами ALL на текущем хосте.

-T timeout, --command-timeout=timeout
Используется для установки тайм-аута для команды. Если тайм-аут истечет до завершения выполнения команды, выполнение команды будет завершено. Политика безопасности может ограничивать возможность установки тайм-аутов команд. Политика sudoers требует, чтобы указанные пользователем тайм-ауты были явно включены.

-u user, --user=user
Запустите команду от имени пользователя, отличного от целевого пользователя по умолчанию (обычно root). Пользователем может быть либо имя пользователя, либо цифровой идентификатор пользователя (UID) с префиксом символа "#" (например, #0 для UID 0). При выполнении команд в качестве UID многие оболочки требуют, чтобы символ ‘#’ экранировался обратной косой чертой (‘\’). Некоторые политики безопасности могут ограничивать UID теми, которые указаны в базе данных паролей. Политика sudoers допускает UID, которых нет в базе данных паролей, до тех пор, пока не задан параметр targetpw. Другие политики безопасности могут этого не поддерживать.

-V, --version
Выведите строку версии sudo, а также строку версии любых настроенных плагинов. Если вызывающий пользователь уже является root, параметр -V отобразит аргументы, переданные для настройки при создании sudo; плагины могут отображать дополнительную информацию, такую как параметры по умолчанию.

-v, --validate
Обновите кэшированные учетные данные пользователя, при необходимости аутентифицируя его. Для плагина sudoers это продлевает время ожидания sudo еще на 15 минут по умолчанию, но не запускает команду. Не все политики безопасности поддерживают кэшированные учетные данные.

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

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

Переменные окружения, которые должны быть установлены для команды, также могут быть переданы в командной строке в виде VAR=value, например, LD_LIBRARY_PATH=/usr/local/pkg/lib. Переменные, передаваемые в командной строке, подпадают под ограничения, налагаемые плагином политики безопасности. Политика sudoers подвергает переменные, передаваемые в командной строке, тем же ограничениям, что и обычные переменные окружения, за одним важным исключением. Если в sudoers задан параметр setenv, для выполняемой команды установлен тег SETENV или команда соответствует ВСЕМ, пользователь может устанавливать переменные, которые в противном случае были бы запрещены. Смотрите раздел sudoers(5) для получения дополнительной информации.

ВЫПОЛНЕНИЕ КОМАНДЫ

Когда sudo выполняет команду, политика безопасности определяет среду выполнения для этой команды. Как правило, реальный и действующий пользователь и группа, а также идентификаторы устанавливаются так, чтобы они совпадали с идентификаторами целевого пользователя, как указано в базе данных паролей, и групповой вектор инициализируется на основе базы данных групп (если не был указан параметр -P).

В политике безопасности могут быть указаны следующие параметры:

• реальный и действенный идентификатор пользователя

• реальный и эффективный идентификатор группы

• дополнительные идентификаторы групп

• список окружающей среды

• текущий рабочий каталог

• маска режима создания файла (umask)

• Роль и тип SELinux

• приоритет планирования (он же nice value)

Модель процесса

Существует два различных способа выполнения команды sudo.

Если настроен плагин ведения журнала ввода-вывода или если политика безопасности явно запрашивает его, выделяется новый псевдотерминал (“pty”) и используется fork(2) для создания второго процесса sudo, называемого монитором. Монитор создает новый терминальный сеанс с самим собой в качестве ведущего и pty в качестве управляющего терминала, вызывает fork(2), настраивает среду выполнения, как описано выше, а затем использует системный вызов execve(2) для запуска команды в дочернем процессе. Монитор существует для ретрансляции сигналов управления заданием между существующим терминалом пользователя и pty, в котором выполняется команда. Это позволяет приостанавливать и возобновлять выполнение команды. Без монитора команда была бы, по определению POSIX, “потерянной группой процессов”, и она не получала бы никаких сигналов управления заданиями от ядра. Когда команда завершается или прерывается сигналом, монитор передает статус завершения команды основному процессу sudo и завершает работу. После получения статуса завершения команды главный sudo передает статус завершения команды функции закрытия политики безопасности и завершает работу.

Если pty не используется, sudo вызывает fork(2), настраивает среду выполнения, как описано выше, и использует системный вызов execve(2) для запуска команды в дочернем процессе. Основной процесс sudo ожидает завершения команды, затем передает статус завершения команды функции закрытия политики безопасности и завершает работу. В качестве особого случая, если плагин policy не определяет функцию close, sudo выполнит команду напрямую вместо того, чтобы сначала вызывать fork(2). Плагин политики sudoers будет определять функцию закрытия только в том случае, если включено ведение журнала ввода-вывода, требуется pty, указана роль SELinux, у команды есть связанный тайм-аут или включены параметры pam_session или pam_setcred. Обратите внимание, что pam_session и pam_setcred включены по умолчанию в системах, использующих PAM.

В системах, использующих PAM, функция закрытия политики безопасности отвечает за закрытие сеанса PAM. Он также может регистрировать статус завершения команды.

Обработка сигналов

Когда команда запускается как дочерний элемент процесса sudo, sudo будет передавать полученные сигналы команде. Сигналы SIGINT и SIGQUIT передаются только тогда, когда команда выполняется в новом pty или когда сигнал был отправлен пользовательским процессом, а не ядром. Это предотвращает получение командой SIGINT дважды каждый раз, когда пользователь вводит control-C. Некоторые сигналы, такие как SIGSTOP и SIGKILL, не могут быть перехвачены и, следовательно, не будут переданы команде. Как правило, SIGTSTP следует использовать вместо SIGSTOP, когда вы хотите приостановить выполнение команды sudo.

В качестве особого случая sudo не будет ретранслировать сигналы, которые были отправлены командой, которую он запускает. Это предотвращает случайное завершение работы команды. В некоторых системах команда reboot(8) отправляет SIGTERM всем внесистемным процессам, отличным от нее самой, перед перезагрузкой системы. Это не позволяет sudo ретранслировать полученный сигнал SIGTERM обратно в reboot(8), который затем может завершиться до фактической перезагрузки системы, оставляя ее в полумертвом состоянии, подобном однопользовательскому режиму. Обратите внимание, однако, что эта проверка применяется только к команде, запускаемой sudo, а не к любым другим процессам, которые может создать команда. В результате запуск скрипта, который вызывает reboot(8) или shutdown(8) через sudo, может привести к тому, что система окажется в этом неопределенном состоянии, если только reboot(8) или shutdown(8) не выполняются с использованием семейства функций exec() вместо system() (который вставляет оболочка между командой и вызывающим процессом).

Если плагины ведения журнала ввода-вывода не загружены, а плагин политики не определил функцию close(), не установил тайм-аут команды или не потребовал, чтобы команда выполнялась в новом pty, sudo может выполнить команду напрямую, а не запускать ее как дочерний процесс.

Плагины

Плагины могут быть указаны с помощью директив плагина в файле sudo.conf(5). Они могут быть загружены как динамические общие объекты (в системах, которые их поддерживают) или скомпилированы непосредственно в двоичный файл sudo. Если файл sudo.conf(5) отсутствует или если он не содержит никаких строк плагина, sudo будет использовать sudoers(5) для плагинов политики, аудита и ведения журнала ввода-вывода. Смотрите руководство sudo.conf(5) для получения подробной информации о файле /etc/sudo.conf и руководство sudo_plugin(5) для получения дополнительной информации об архитектуре плагина sudo.

 

ВЫХОДНОЕ ЗНАЧЕНИЕ

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

Если параметр -l был указан без команды, sudo завершит работу со значением 0, если пользователю разрешено запускать sudo и он успешно прошел аутентификацию (как того требует политика безопасности). Если команда указана с параметром -l, значение выхода будет равно 0 только в том случае, если команда разрешена политикой безопасности, в противном случае оно будет равно 1.

При сбое аутентификации, проблеме с конфигурацией/разрешениями или если данная команда не может быть выполнена, sudo завершает работу со значением 1. В последнем случае строка ошибки выводится со стандартной ошибкой. Если sudo не может stat(2) одну или несколько записей в PATH пользователя, выводится сообщение об ошибке в виде стандартной ошибки. (Если каталог не существует или на самом деле это не каталог, запись игнорируется и ошибка не выводится.) Этого не должно происходить при нормальных обстоятельствах. Наиболее распространенная причина, по которой stat(2) возвращает  “permission denied” (“отказано в разрешении”), заключается в том, что вы запускаете автомонтер и один из каталогов в вашем PATH находится на компьютере, который в данный момент недоступен.

ПРИМЕЧАНИЯ ПО БЕЗОПАСНОСТИ

sudo пытается быть в безопасности при выполнении внешних команд.

To prevent command spoofing, sudo checks "." and "" (both denoting current directory) last when searching for a command in the user's PATH (if one or both are in the PATH). Depending on the security policy, the user's PATH environment variable may be modified, replaced, or passed unchanged to the program that sudo executes.

Users should never be granted sudo privileges to execute files that are writable by the user or that reside in a directory that is writable by the user. If the user can modify or replace the command there is no way to limit what additional commands they can run.

Please note that sudo will normally only log the command it explicitly runs. If a user runs a command such as sudo su or sudo sh, subsequent commands run from that shell are not subject to sudo's security policy. The same is true for commands that offer shell escapes (including most editors). If I/O logging is enabled, subsequent commands will have their input and/or output logged, but there will not be traditional logs for those commands. Because of this, care must be taken when giving users access to commands via sudo to verify that the command does not inadvertently give the user an effective root shell. For information on ways to address this, please see the Preventing shell escapes section in sudoers(5).

To prevent the disclosure of potentially sensitive information, sudo disables core dumps by default while it is executing (they are re-enabled for the command that is run). This historical practice dates from a time when most operating systems allowed set-user-ID processes to dump core by default. To aid in debugging sudo crashes, you may wish to re-enable core dumps by setting “disable_coredump” to false in the sudo.conf(5) file as follows:

Set disable_coredump false

See the sudo.conf(5) manual for more information.

ENVIRONMENT

sudo utilizes the following environment variables. The security policy has control over the actual content of the command's environment.

EDITOR Default editor to use in -e (sudoedit) mode if neither SUDO_EDITOR nor VISUAL is set.

MAIL Set to the mail spool of the target user when the -i option is specified, or when env_reset is enabled in sudoers (unless MAIL is present in
the env_keep list).

HOME Set to the home directory of the target user when the -i or -H options are specified, when the -s option is specified and set_home is set in sudoers, when always_set_home is enabled in sudoers, or when env_reset is enabled in sudoers and HOME is not present in the env_keep list.

LOGNAME Set to the login name of the target user when the -i option is specified, when the set_logname option is enabled in sudoers, or when the env_reset option is enabled in sudoers (unless LOGNAME is present in the env_keep list).

PATH May be overridden by the security policy.

 

SHELL Used to determine shell to run with -s option.

SUDO_ASKPASS Specifies the path to a helper program used to read the password if no terminal is available or if the -A option is specified.

SUDO_COMMAND Set to the command run by sudo, including command line arguments. The command line arguments are truncated at 4096 characters to prevent a potential execution error.

SUDO_EDITOR Default editor to use in -e (sudoedit) mode.

SUDO_GID Set to the group-ID of the user who invoked sudo.

SUDO_PROMPT Used as the default password prompt unless the -p option was specified.

SUDO_PS1 If set, PS1 will be set to its value for the program being run.

SUDO_UID Set to the user-ID of the user who invoked sudo.

SUDO_USER Set to the login name of the user who invoked sudo.

USER Set to the same value as LOGNAME, described above.

VISUAL Default editor to use in -e (sudoedit) mode if SUDO_EDITOR is not set.

FILES
/etc/sudo.conf sudo front-end configuration

EXAMPLES
Note: the following examples assume a properly configured security policy.

To get a file listing of an unreadable directory:

$ sudo ls /usr/local/protected

To list the home directory of user yaz on a machine where the file system holding ~yaz is not exported as root:

$ sudo -u yaz ls ~yaz

To edit the index.html file as user www:

$ sudoedit -u www ~www/htdocs/index.html

To view system logs only accessible to root and users in the adm group:

$ sudo -g adm more /var/log/syslog

To run an editor as jim with a different primary group:

$ sudoedit -u jim -g audio ~jim/sound.txt

To shut down a machine:

$ sudo shutdown -r +15 "quick reboot"

To make a usage listing of the directories in the /home partition. Note that this runs the commands in a sub-shell to make the cd and file redirection work.

 

$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"

DIAGNOSTICS

Error messages produced by sudo include:

editing files in a writable directory is not permitted
By default, sudoedit does not permit editing a file when any of the parent directories are writable by the invoking user. This avoids a race condition that could allow the user to overwrite an arbitrary file. See the sudoedit_checkdir option in sudoers(5) for more information.

editing symbolic links is not permitted
By default, sudoedit does not follow symbolic links when opening files. See the sudoedit_follow option in sudoers(5) for more information.

effective uid is not 0, is sudo installed setuid root?
sudo was not run with root privileges. The sudo binary must be owned by the root user and have the set-user-ID bit set. Also, it must not be located on a file system mounted with the ‘nosuid’ option or on an NFS file system that maps uid 0 to an unprivileged uid.

effective uid is not 0, is sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?
sudo was not run with root privileges. The sudo binary has the proper owner and permissions but it still did not run with root privileges. The most common reason for this is that the file system the sudo binary is located on is mounted with the ‘nosuid’ option or it is an NFS file system that maps uid 0 to an unprivileged uid.

fatal error, unable to load plugins
An error occurred while loading or initializing the plugins specified in sudo.conf(5).

invalid environment variable name
One or more environment variable names specified via the -E option contained an equal sign (‘=’). The arguments to the -E option should be environment variable names without an associated value.

no password was provided
When sudo tried to read the password, it did not receive any characters. This may happen if no terminal is available (or the -S option is specified) and the standard input has been redirected from /dev/null.

a terminal is required to read the password
sudo needs to read the password but there is no mechanism available for it to do so. A terminal is not present to read the password from, sudo has not been configured to read from the standard input, the -S option was not used, and no askpass helper has been specified either via the sudo.conf(5) file or the SUDO_ASKPASS environment variable.

no writable temporary directory found
sudoedit was unable to find a usable temporary directory in which to store its intermediate files.

The “no new privileges” flag is set, which prevents sudo from running as root.
sudo was run by a process that has the Linux “no new privileges” flag is set. This causes the set-user-ID bit to be ignored when running an executable, which will prevent sudo from functioning. The most likely cause for this is running sudo within a container that sets this flag. Check the documentation to see if it is possible to configure the container such that the flag is not set.

sudo must be owned by uid 0 and have the setuid bit set
sudo was not run with root privileges. The sudo binary does not have the correct owner or permissions. It must be owned by the root user and have the set-user-ID bit set.

sudoedit is not supported on this platform
It is only possible to run sudoedit on systems that support setting the effective user-ID.

timed out reading password
The user did not enter a password before the password timeout (5 minutes by default) expired.

 

you do not exist in the passwd database
Your user-ID does not appear in the system passwd database.

you may not specify environment variables in edit mode
It is only possible to specify environment variables when running a command. When editing a file, the editor is run with the user's environment unmodified.

SEE ALSO
su(1), stat(2), login_cap(3), passwd(5), sudo.conf(5), sudo_plugin(5), sudoers(5), sudoers_timestamp(5), sudoreplay(8), visudo(8)

HISTORY
See the HISTORY file in the sudo distribution (https://www.sudo.ws/history.html) for a brief history of sudo.

AUTHORS
Many people have worked on sudo over the years; this version consists of code written primarily by:

Todd C. Miller

See the CONTRIBUTORS file in the sudo distribution (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to sudo.

CAVEATS

There is no easy way to prevent a user from gaining a root shell if that user is allowed to run arbitrary commands via sudo. Also, many programs (such as editors) allow the user to run commands via shell escapes, thus avoiding sudo's checks. However, on most systems it is possible to prevent shell escapes with the sudoers(5) plugin's noexec functionality.

It is not meaningful to run the cd command directly via sudo, e.g.,

$ sudo cd /usr/local/protected

since when the command exits the parent process (your shell) will still be the same. Please see the EXAMPLES section for more information.

Running shell scripts via sudo can expose the same kernel bugs that make set-user-ID shell scripts unsafe on some operating systems (if your OS has a /dev/fd/ directory, set-user-ID shell scripts are generally safe).

BUGS
If you feel you have found a bug in sudo, please submit a bug report at https://bugzilla.sudo.ws/

SUPPORT
Limited free support is available via the sudo-users mailing list, see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives.

DISCLAIMER
sudo is provided “AS IS” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with sudo or https://www.sudo.ws/license.html for complete details.

Sudo 1.9.9 January 19, 2022 Sudo 1.9.9