Sudo (Русский)
Sudo (англ. substitute user do, дословно «подменить пользователя и выполнить») позволяет системному администратору делегировать полномочия, чтобы дать некоторым пользователям (или группе пользователей) возможность запускать некоторые (или все) команды c правами суперпользователя или любого другого пользователя, обеспечивая контроль над командами и их аргументами.
Sudo — это альтернатива su для выполнения команд с правами суперпользователя (root). В отличие от su, который запускает оболочку с правами root и даёт всем дальнейшим командам root-права, sudo предоставляет временное повышение привилегий для одной команды. Предоставляя привилегии root только при необходимости, sudo снижает вероятность того, что опечатка или ошибка в выполняемой команде произведут в системе разрушительные действия.
Sudo может также использоваться для выполнения команд от имени других пользователей; кроме того, sudo логирует все команды и неудачные попытки доступа для аудита безопасности.
Установка
Использование
Чтобы начать использовать sudo как непривилегированный пользователь, его нужно настроить должным образом. Для этого прочтите раздел о настройке.
Для использования sudo просто добавьте sudo и пробел перед нужной командой:
Например, для использования pacman:
Смотрите sudo(8) для более подробной информации.
Настройка
Defaults
sudoers(5) § SUDOERS OPTIONS содержит список опций, которые можно использовать с командой Defaults в файле /etc/sudoers .
Здесь доступен список опций (извлечён из исходного кода версии 1.8.7) в формате, удобном для копирования и вставки в файл sudoers .
Смотрите sudoers(5) для более подробной информации, например о настройке таймаутов.
Просмотр текущих настроек
Выполните sudo -ll для вывода текущей конфигурации sudo. Чтобы посмотреть настройки, действующие для конкретного пользователя, выполните sudo -lU пользователь .
Использование visudo
Файл настроек /etc/sudoers всегда следует редактировать с помощью команды visudo(8) . visudo блокирует файл sudoers , сохраняет изменения во временный файл и проверяет, что файл синтаксически корректен, перед тем как скопировать его в /etc/sudoers .
- Крайне важно, чтобы файл sudoers был без синтаксических ошибок! Любая ошибка делает sudo неработоспособным. Всегда редактируйте его только с помощью visudo для предотвращения ошибок.
- Из visudo(8) : Обратите внимание, что это дыра в безопасности, поскольку позволяет пользователю запускать любую программу, какую он захочет, просто прописав её в VISUAL или EDITOR.
visudo использует vi в качестве текстового редактора по умолчанию. Пакет sudo скомпилирован с опцией —with-env-editor по умолчанию и использует переменные VISUAL и EDITOR . EDITOR не используется, если задана переменная VISUAL .
Чтобы выбрать nano в качестве редактора для visudo в текущем сеансе, задайте и экспортируйте переменную EDITOR перед запуском visudo. Чтобы выбрать другой редактор однократно, можно просто прописать эту переменную перед командой visudo:
В качестве альтернативы можно отредактировать копию файла /etc/sudoers и вручную запустить проверку синтаксиса с помощью команды visudo -c /копия/файла/sudoers . Это может пригодиться, если вас не устраивает, что visudo блокирует файл.
Для изменения редактора на постоянной основе для текущего пользователя, смотрите раздел Переменные окружения#На уровне пользователя. Для того, чтобы установить выбранный редактор на постоянной основе для всей системы, но только для visudo, добавьте следующее в /etc/sudoers (предположим, что вы предпочитаете nano в качестве редактора):
Примеры настроек
Настройка sudo осуществляется добавлением записей в файл /etc/sudoers . Чтобы дать пользователю привилегии суперпользователя, когда он вводит sudo перед командой, добавьте следующую строку:
Разрешить пользователю выполнять все команды от любого пользователя, но только на машине с определенным названием хоста:
Предоставить членам группы wheel доступ к sudo:
Чтобы не спрашивать пароль у пользователя:
Разрешить выполнять только конкретные команды и только пользователю на определенном хосте:
Разрешить выполнять конкретно определённые команды только для пользователя на определенном хосте и без пароля:
Подробный пример для sudoers доступен в /usr/share/doc/sudo/examples/sudoers . Также смотрите sudoers(5) для получения более подробной информации.
Права доступа к файлам sudoers по умолчанию
Файл sudoers должен иметь владельца root и группу root (0). Права доступа всегда должны быть установлены как r—r—— (0440). Эти права установлены по умолчанию, однако если вы случайно измените их, они должны быть немедленно изменены обратно, иначе sudo не будет работать.
Советы и рекомендации
Отключение таймаута запроса пароля
Часто раздражает такая вещь: вы запускаете какой-то долгий процесс, который работает с обычными правами и повышает их только при необходимости, и когда sudo запросит пароль, вы можете случайно не заметить это и не ввести его вовремя, из-за чего случается таймаут, процесс умирает и проделанная работа теряется или, если повезёт, кэшируется. Обычно советуют отключить запрос пароля для sudo или увеличить время действия ранее введённого пароля, однако оба этих способа имеют негативные последствия для безопасности. Таймаут запроса пароля тоже можно отключить, и поскольку это никак не влияет на безопасность, это и должно быть предпочтительным решением:
Сигнал при запросе пароля
Чтобы работающий в фоне терминал привлёк ваше внимание в момент запроса пароля, можно добавить символ BELL в строку запроса пароля:
Вместо ^G должен быть вписан настоящий символ BELL. Например, чтобы ввести его в vim, используйте сочетание Ctrl+v Ctrl+g , а в nano используйте Alt+v Ctrl+g .
Перенос псевдонимов
Если у вас установлено много псевдонимов, вы могли заметить, что они не переносятся в сеанс sudo. Однако, это легко исправить. Просто добавьте в ваш
/.bashrc или /etc/bash.bashrc строку:
Один тайм-аут на все сеансы терминала
По умолчанию сеанс sudo действует только в пределах текущего терминала; при запуске sudo в новом терминале он запросит пароль заново. Если вас это раздражает, укажите для опции timestamp_type значение global :
Время действия введённого пароля
Возможно, вы захотите изменить промежуток времени, в течение которого sudo действует без ввода пароля. Этого легко добиться добавив опцию timestamp_timeout в /etc/sudoers (по умолчанию 5 минут):
Если вы запускаете много sudo-команд подряд, возможно, вместо увеличения timestamp_timeout лучше просто периодически обновлять временную метку. Команда sudo -v запустит отсчёт таймаута заново. С помощью команды sudo -K можно удалить временную метку, что приведёт к запросу пароля при следующем запуске sudo.
Обновление временной метки можно автоматизировать с помощью такого псевдонима (добавьте его в .bashrc ):
Также можно сделать bash-функцию: подробнее на stackexchange.
Переменные окружения
Если у вас много переменных окружения или вы экспортировали ваши настройки прокси через export http_proxy=». » , когда вы используете sudo, эти переменные не будут переданы в открытый сеанс, если вы не запустите sudo в опцией -E .
Рекомендованный способ сохранения переменных окружения — это прописать их в env_keep :
Пароль суперпользователя
Вы можете сконфигурировать sudo так, чтобы он спрашивал пароль суперпользователя вместо пароля текущего пользователя, добавив targetpw (целевой пользователь, по умолчанию root) или rootpw в список опций Defaults в /etc/sudoers :
Чтобы не понадобилось разглашать пароль root обычным пользователям, можно указать эту опцию только для определённой группы:
Отключение учетной записи root
Вы можете захотеть отключить возможность входа систему пользователя root. Без этого атакующие сначала должны будут угадать имя пользователя, сконфигурированного как sudoer, а также пароль этого пользователя. Смотрите для примера Secure Shell (Русский)#Отключение.
- Будьте осторожны. Вы можете попасть в свою ловушку, если отключите вход систему пользователя root. Sudo по умолчанию не установлен, и его стандартная конфигурация не позволяет ни получить доступ к правам root без пароля, ни дать такой доступ вам по вашему собственному паролю. Убедитесь, что пользователь правильно сконфигурирован как sudoer перед отключением аккаунта суперпользователя!
- Если файл sudoers настроен на использование rootpw по умолчанию, то не отключайте root-вход ни одной из следующих команд!
- Если вы уже попали в ловушку, смотрите статью Сброс пароля root для получения помощи.
Можно заблокировать аккаунт с помощью passwd :
Похожая команда снимает блокировку:
Также вы можете отредактировать /etc/shadow и заменить зашифрованный пароль root на «!»:
Тогда, чтобы задать новый пароль и тем самым разблокировать пользователя root:
kdesu
kdesu можно использовать в KDE для запуска графических программ с привилегиями суперпользователя. Вероятно, что kdesu по умолчанию будет пытаться использовать su, даже если аккаунт root отключен. К счастью, можно сказать kdesu использовать sudo вместо su. Создайте/отредактируйте файл
или используйте следующую команду:
Еще один пример настройки
Допустим, вы создали 3 пользователей: admin, devel и joe. Пользователь «admin» используется для journalctl, systemctl, mount, kill и iptables; «devel» используется для установки пакетов и редактирования настроек; «joe» — пользователь, под которым вы вошли в систему. Чтобы разрешить «joe» перезагружаться, выключать систему и использовать netctl, мы должны сделать следующее:
Отредактировать /etc/pam.d/su и /etc/pam.d/su-1 . Потребовать, чтобы пользователь был в группе wheel, но никого в неё не добавлять.
Разрешить вход по SSH только для группы ‘ssh’. В эту группу будет входить только «joe».
Добавить пользователей в другие группы.
Установить права на настройки так, чтобы devel мог редактировать их.
С такими настройками вам практически никогда не понадобится входить как суперпользователь.
«joe» может подсоединиться к своему домашнему WiFi.
«joe» не может использовать netctl от имени другого пользователя.
Когда «joe» хочет воспользоваться journalctl или убить зависший процесс, он может переключиться на нужного пользователя:
Но «joe» не может переключиться на суперпользователя.
Если «joe» хочет начать gnu-screen сессию как admin, он может сделать это следующим образом:
Настройка sudo с помощью вкладываемых в /etc/sudoers.d файлов
sudo обрабатывает файлы, содержащиеся в директории /etc/sudoers.d/ . Это означает, что вместо того, чтобы редактировать /etc/sudoers , вы можете менять настройки в отдельных файлах и перемещать их в эту директорию. Это даёт два преимущества:
- Вам не понадобится редактировать файл sudoers.pacnew ;
- Если с новой записью будет проблема, вы можете просто удалить соответствующий файл вместо необходимости редактировать /etc/sudoers (но смотрите предупреждение ниже).
Формат записей в этих вкладываемых файлах такой же, как и в самом файле /etc/sudoers . Чтобы редактировать их напрямую, используйте visudo -f /etc/sudoers.d/файл . Смотрите sudoers(5) § Including other files from within sudoers для дополнительной информации.
Файлы из каталога /etc/sudoers.d/ обрабатываются в лексикографическом порядке; файлы, содержащие . или
в имени, пропускаются. Чтобы избежать путаницы с сортировкой, рекомендуется начинать имена файлов с двух цифр, например 01_foo .
Редактирование файлов
sudo -e или sudoedit позволяет редактировать файл от имени другого пользователя, но при этом запускать текстовый редактор от имени вашего пользователя.
Это полезно для редактирования файлов от имени root без предоставления повышенных привилегий вашему текстовому редактору. Подробнее об этом читайте в sudo(8) § e .
В качестве редактора можно использовать любую программу, поэтому, например, можно использовать meld для управления файлами pacnew:
Шутливые оскорбления
Вы можете сконфигурировать sudo так, чтобы при вводе неверного пароля он выводил шутливые оскорбления вместо стандартного сообщения «Sorry, try again». Найдите строку Defaults в /etc/sudoers и добавьте insults в список опции, разделяя их запятыми. Конечный результат может выглядеть так:
Для проверки, введите sudo -K , чтобы завершить текущий сеанс и позволить sudo заново запросить пароль.
Решение проблем
Проблемы с TTY через SSH
По умолчанию SSH не выделяет tty при выполнении удалённой команды. Без tty sudo не может отключить отображение пароля при его вводе. Вы можете воспользоваться ssh опцией -t , чтобы заставить его выделять tty.
Defaults опция requiretty всего лишь позволяет запускать sudo пользователям, если они имеют tty.
Наложение umask
Sudo накладывает на значение umask пользователя свою собственную (которая по умолчанию установлена в 0022). Это предотвращает sudo от создания файлов с более либеральными правами доступа, чем это позволяет umask пользователя. Несмотря на то, что это разумное значение по умолчанию, если не используется измененная umask, это может привести к ситуации, когда программа, запущенная через sudo может создавать файлы с правами доступа отличными от тех, которые создаются при запуске программы непосредственно суперпользователем. Для исправления таких ошибок sudo предоставляет возможность исправить umask, даже если желаемая umask более либеральна, чем установлено в umask пользователя. Добавив такие строки (используйте visudo ) вы измените поведение sudo по умолчанию:
Это установит sudo umask в umask суперпользователя по умолчанию (0022) и переопределит поведение по умолчанию, всегда используя указанную umask и независимо от umask пользователя.
How to Use the sudo Command in Linux
Sudo stands for SuperUser DO and is used to access restricted files and operations. By default, Linux restricts access to certain parts of the system preventing sensitive files from being compromised.
The sudo command temporarily elevates privileges allowing users to complete sensitive tasks without logging in as the root user. In this tutorial, learn how to use the sudo command in Linux with examples.

- A system running Linux
- Access to a command line/terminal window (Activities > Search > Terminal)
- A user account with sudo or root privileges
How to use the sudo Command
sudo was developed as a way to temporarily grant a user administrative rights. To make it work, use sudo before a restricted command. The system will prompt for your password. Once provided, the system runs the command.
Syntax
To start using sudo , use the following syntax:
When the sudo command is used, a timestamp is entered in the system logs. The user can run commands with elevated privileges for a short time (default 15 minutes). If a non-sudo user tries to use the sudo command, it is logged as a security event.
Options
sudo can be used with additional options:
- -h – help; displays syntax and command options
- -V – version; displays the current version of the sudo application
- -v – validate; refresh the time limit on sudo without running a command
- -l – list; lists the user’s privileges, or checks a specific command
- -k – kill; end the current sudo privileges
Additional options can be found under the -h option.

Note: Staying logged in as an administrator compromises security. In the past, admins would use su (substitute user) to temporarily switch to an administrator account. However, the su command requires a second user account and password, which isn’t always feasible.
Granting sudo Privileges
For most modern Linux distributions, a user must be in the sudo, sudoers, or wheel group to use the sudo command. By default, a single-user system grants sudo privileges to its user. A system or server with multiple user accounts may exclude some users from sudo privileges.
We recommend to only grant privileges that are absolutely necessary for the user to perform daily tasks.
The following sections explain how to add a user to the sudoers group.
RedHat and CentOS
In Redhat/CentOS, the wheel group controls sudo users. Add a user to the wheel group with the following command:
Replace [username] with an actual username. You may need to log in as an administrator or use the su command.
Debian and Ubuntu
In Debian/Ubuntu, the sudo group controls sudo users. Add a user to the sudo group with the following command:
Replace [username] with an actual username. You may need to log in as an administrator or use the su command.
Using visudo and the sudoers Group
In some modern versions of Linux, users are added to the sudoers file to grant privileges. This is done using the visudo command.
1. Use the visudo command to edit the configuration file:
2. This will open /etc/sudoers for editing. To add a user and grant full sudo privileges, add the following line:

3. Save and exit the file.
Here’s a breakdown of the granted sudo privileges:
Note: It’s easier to simply add a user to the sudo or wheel group to grant sudo privileges. If you need to edit the configuration file, only do so using visudo. The visudo application prevents glitches, bugs, and misconfigurations that could break your operating system.
Examples of sudo in Linux
Basic Sudo Usage
1. Open a terminal window, and try the following command:
2. You should see an error message. You do not have the necessary permissions to run the command.

3. Try the same command with sudo :
4. Type your password when prompted. The system executes the command and updates the repositories.

Run Command as a Different User
1. To run a command as a different user, in the terminal, enter the following command:
2. The system should display your username. Next, run the following command:
3. Enter the password for [different_username] , and the whoami command will run and display the different user.

Switch to Root User
This command switches your command prompt to the BASH shell as a root user:
Your command line should change to:
The hostname value will be the network name of this system. The username will be the current logged-in username.

Execute Previous Commands with sudo
The Linux command line keeps a record of previously executed commands. These records can be accessed by pressing the up arrow. To repeat the last command with elevated privileges, use:
This also works with older commands. Specify the historical number as follows:
This example repeats the 6th entry in history with the sudo command.
To learn about how to efficiently use history command, check out our article on sudo history command with examples.
Run Multiple Commands in One Line
String multiple commands together, separated by a semicolon:

Add a String of Text to an Existing File
Adding a string of text to a file is often used to add the name of a software repository to the sources file, without opening the file for editing. Use the following syntax with echo, sudo and tee command:

Note: This would add the Nginx software repositories to your system.
You should now understand the sudo command, and how to use it. Next, learn the difference between the sudo and su command.
Команда sudo в Linux
Если вы новый пользователь Linux, то, наверное, уже заметили, что здесь почти для всех серьёзных настроек или операций с системой нужны права суперпользователя. Пользователям Windows такой подход тоже должен быть знаком, когда вы устанавливаете программы или меняете системные настройки, операционная система просит подтвердить выполнение программы от имени администратора.
В Linux такой возможности нет, но зато есть команда sudo, которая позволяет вам запускать программы от имени других пользователей, а также от имени суперпользователя. На сайте уже есть несколько материалов про работу с ней, но нет подробной статьи про опции самой команды и её синтаксис. Эта тема и будет раскрыта сейчас. Дальше мы рассмотрим, что представляет из себя команда sudo Linux, но начнем с её синтаксиса.
Синтаксис sudo
Синтаксис команды очень прост:
$ sudo опции программа параметры
Так вы можете выполнить абсолютно любую команду Linux. Достаточно написать перед ней команду sudo. По умолчанию sudo запускает переданную ей команду от имени суперпользователя. Если вы хотите добавить какие-либо настройки или использовать другого пользователя, нужно указывать опции.
Опции sudo
- -A или —askpass — по умолчанию sudo спрашивает пароль пользователя в терминале. Если задана эта опция, утилита попробует использовать графическую утилиту для запроса пароля.
- -b или —background — запускает переданную программу в фоновом режиме;
- -C или —close-from — опции нужно передать число больше трёх. Она позволяет закрыть для программы все файловые дескрипторы, кроме стандартного ввода и вывода;
- -E или —preserve-env — позволяет передать переменные окружения текущего пользователя выполняемой программе. Также можно передать этой опции список переменных, которые нужно разрешить;
- -e или —edit — позволяет редактировать файл вместо запуска команды. Файл копируется во временный каталог, редактируется с помощью редактора, установленного в системе по умолчанию, и если были изменения, записывается обратно с теми самыми правами;
- -g — запустить команду с указанной группой вместо группы пользователя, от имени которого запускается программа;
- -h — выполнить команду от имени другого хоста;
- -H или —set-home — установить домашний каталог;
- -i или —login — позволяет авторизоваться в консоли от имени другого пользователя. Будет выбран его домашний каталог, а также загружены все переменные окружения;
- -k — по умолчанию, sudo сохраняет пароль и некоторое время после выполнения команды, вы можете выполнить ещё раз, без ввода пароля. Эта опция отключает такую возможность;
- -l или —list — позволяет вывести список доступных команд для удалённых пользователей;
- -n или —non-interactive — не интерактивный режим, если будет необходимо ввести пароль, программа выдаст ошибку;
- -p или —prompt — использовать своё приглашение для ввода пароля;
- -r или —role — выполнить программу с контекстом SELinux, у которого есть указанная роль;
- -S — использовать стандартный поток ошибок для запроса пароля;
- -s или —shell — позволяет запустить указанный командный интерпретатор;
- -U или —User — вместе с опцией -l позволяет посмотреть привилегии для пользователя;
- -T или —timeout — позволяет установить время выполнения команды, если время истечёт раньше, чем завершится команда, то она будет завершена принудительно;
- -u — позволяет указать, от имени какого пользователя нужно выполнять программу;
- -V — выводит версию утилиты;
- — — означает, что следующие опции обрабатывать не нужно.
Это основные опции, которые вы можете использовать. А теперь давайте перейдём к примерам использования команды.
Примеры использования sudo
1. Запуск программы
Самый частый пример использования sudo — выполнение программы от имени суперпользователя. Для этого достаточно написать sudo перед именем программы:

Если вы хотите выполнить программу не от имени root, а от имени другого пользователя, то можно использовать опцию -u, например:
sudo -u sergiy whoami

2. Переменные окружения
По умолчанию, команда sudo не передаёт запускаемой утилите переменные окружения текущего пользователя. А когда вы запускаете графическое приложение, то ему нужна переменная DISPLAY для доступа к графическому серверу. В последних версиях Ubuntu всё немного по другому, но все же эта возможность sudo актуальна. Чтобы передать переменные просто используйте опцию -E:

Без опции -E программа получает только 18 стандартных переменных, а с опцией — все доступные.

Также вы можете указать список переменных, которые нужно передать:
3. Авторизация от имени другого пользователя
С помощью sudo вы также можете авторизоваться от имени другого пользователя. Для этого используйте опцию -i:

По умолчанию вы будете авторизованы как суперпользователь. Ещё здесь можно указать пользователя, от имени которого вы хотите авторизоваться:
sudo -i -u sergiy

4. Командный интерпретатор
Если у вас в системе установлено несколько командных интерпретаторов, например, не только bash, но и zsh, то вы можете авторизоваться от имени другого пользователя и указать, какую именно оболочку вы хотите использовать. Для этого укажите опция -s:

5. Редактирование файлов
Когда вам необходимо отредактировать системный файл, вы пишите sudo vim или sudo nano. Вместо этого можно использовать опцию -e или команду sudoedit. Она открывает файл для редактирования, редактором, установленным в системе по умолчанию. Например, у меня это vim. Чтобы отредактировать /etc/group с правами суперпользователя достаточно выполнить:
sudo -e /etc/group

Утилита узнает, каким редактором нужно пользоваться из переменной окружения EDITOR.
6. Запуск в фоне
Чтобы запустить программу в фоне с помощью sudo можно использовать опцию -b. Например, запускаем OpenVPN в фоновом режиме:
sudo -b openvpn -с /путь/к/конфигурационному.файлу

7. Просмотр полномочий
Вам необязательно редактировать конфигурационный файл, чтобы понять, какие настройки для sudo разрешены, а какие нет. Для этого можно выполнить команду с опцией -l. Утилита выведет список разрешённых команд или ALL в случае, если разрешено всё:

Выводы
Теперь вы знаете, что из себя представляет команда sudo Linux. Здесь мы рассмотрели только общие примеры её использования. Если вы хотите прочитать более подробно про её настройку, смотрите статью настройка sudo в Linux.
Запустить команду от другого пользователя в Unix/Linux

Запустить команду от другого пользователя в Unix/Linux
Иногда, просто необходимо запустить команду от другого пользователя. И существует несколько способов, как это можно сделать. Я расскажу о них в своей статья «Запустить команду от другого пользователя в Unix/Linux».
Запустить команду от другого пользователя в Unix/Linux — способ 1
И так, можно использовать утилиту SUDO. Рассмотрим пример:
- -H YOUR_HOME: Задает HOME (Переменное окружение для хома конкретного юзера) и по умолчанию — это root.
- -u YOUR_USER: Задаем пользователя от которого будет выполнена команда.
- -c YOUR_COMMAND: Служит опцией для ввода команды.
Запустить команду от другого пользователя в Unix/Linux — способ 2
Можно использовать утилиту SU. И сейчас приведу несколько примеров.
Логин в root юзера
Чтобы получить рута, выполните:
Запустить команду как root юзер
Вот пример команды:
Выполнить команду от другого пользователя с помощью su
И так, вот пример:
Рассмотрим другой пример:
- — — Будет имитировать логин указанного пользователя.
- -c — Служит для указания команды для выполнения (для указанного юзверя).
Запустить команду от другого пользователя в Unix/Linux — способ 3
И так, можно использовать утилиту runuser. Команда runuser запускает оболочку с заменяющими идентификаторами пользователей и групп. Эта команда полезна только когда вы залогинены как пользователь root. Синтаксис выглядит следующим образом:
Как пример, я покажу следующую строку:
PS: Для использования команды runuser пароль не требуется, и он должен запускаться только пользователем root.
- -l: Создаст оболочку для входа в систему, используя файл runuser-l PAM вместо стандартного.
- -g: Указывает на основную группу.
- -G: Указывает на дополнительную группу.
- -c: Собственно, служит для указания команды.
- –session-command=COMMAND: Передает одну команду в оболочку с опцией «-c» и не создает новый сеанс.
- -m: Не сбрасывайте переменные среды (ENV).
Вот и все, тема «Запустить команду от другого пользователя в Unix/Linux» завершена.