- What Is Sudo Command in Linux?
- sudo Configuration File sudoers
- Configuration Syntax
- Specify A User To Run Sudo Command
- Passwordless Sudo Command
- List Available Commands
- Run Command with Root Privileges
- Edit File with Root Privileges
- Difference Between sudo and su
- Sudo (Русский)
- Contents
- Обоснование
- Установка
- Использование
- Настройка
- Просмотр текущих настроек
- Использование visudo
- Примеры настроек
- Права доступа к файлам sudoers по умолчанию
- Время действия введённого пароля
- Советы и рекомендации
- Автодополнение по нажатию Tab в bash
- Один тайм-аут на все сеансы терминала
- Всегда показывать замечание о безопасности
- Переменные окружения
- Перенос псевдонимов
- Шутливые оскорбления
- Пароль суперпользователя
- Отключение учетной записи root
- kdesu
- Еще один пример настройки
- Настройка sudo с помощью вкладываемых в /etc/sudoers.d файлов
- Решение проблем
- Проблемы с TTY через SSH
- Показать привилегии пользователя
- Наложение umask
- Опции по умолчанию
- Команда sudo в Linux
- Синтаксис sudo
- Опции sudo
- Примеры использования sudo
- 1. Запуск программы
- 2. Переменные окружения
- 3. Авторизация от имени другого пользователя
- 4. Командный интерпретатор
- 5. Редактирование файлов
- 6. Запуск в фоне
- 7. Просмотр полномочий
- Выводы
What Is Sudo Command in Linux?
sudo or superuser do is a utility used on Linux, BSD, and Unix systems that provides the running command with root or Administrator privileges. Not every user needs to have root privileges but in some cases needs to run commands with root privileges. We can use sudo to run some specific or all provided commands and edit files with the root privileges.
sudo Configuration File sudoers
sudo command is configuration is stored /etc/sudoers file. This file can be only viewed and edit with root privileges. We can edit this just with visudo command like below.
We can see that there is a different part of the sudoers configuration file where default values, user and group privileges are provided.
Configuration Syntax
We can use the following syntax in order to create a sudo configuration about the given user or group.
- USER is the user who can run the given command on the given host
- HOSTLIST is the hosts where given commands can be run
- COMMANDLIST is the commands can be run. Multiple commands can be delimited with the comma.
Specify A User To Run Sudo Command
We can add a user to run a specific command with root privileges. In this example, we will add user ismail to run command visudo with root privileges.
Passwordless Sudo Command
We can provide sudo command to the given user without any password. We will use NOPASSWD configuration like below which will disable password for the user ismail .
List Available Commands
We can list available commands with the -l option which will list currently used root privileged commands the current user can execute.
Run Command with Root Privileges
In this example, we will run commands with root privileges by using sudo command. We will run ls command in the /root directory which is completely owned by root and only used by the root user.
Edit File with Root Privileges
We also edit files with the root privileges by using sudo command. We will edit the /etc/passwd file with the vim command like below.
Difference Between sudo and su
su command is used to login as root user on the other side sudo command just runs given command as root in the current user sessions. While running sudo command the user name will be also logged but with the sudo command just the root user name will be logged. The best way to
Источник
Sudo (Русский)
sudo (англ. substitute user do, дословно «подменить пользователя и выполнить») позволяет системному администратору делегировать полномочия, чтобы дать некоторым пользователям (или группе пользователей) возможность запускать некоторые (или все) команды c правами суперпользователя или любого другого пользователя, обеспечивая контроль над командами и их аргументами.
Contents
Обоснование
Sudo — это альтернатива su для выполнения команд с правами суперпользователя (root). В отличие от su, который запускает оболочку с правами root и даёт всем дальнейшим командам root права, sudo предоставляет временное повышение привилегий для одной команды. Предоставляя привилегии root только при необходимости, использование sudo снижает вероятность того, что опечатка или ошибка в выполняемой команде произведут в системе разрушительные действия.
Sudo может также использоваться для выполнения команд от имени других пользователей; кроме того, sudo логирует все команды и неудачные попытки доступа для аудита безопасности.
Установка
Чтобы начать использовать sudo как непривилегированный пользователь, его нужно настроить должным образом. Для этого прочтите раздел о настройке.
Использование
Пользователи могут предварять команды словом sudo , чтобы исполнять их с привилегиями суперпользователя (или другого пользователя).
Например, для использования pacman:
Смотрите руководство по sudo для получения дополнительной информации.
Настройка
Просмотр текущих настроек
Выполните sudo -ll для вывода текущей конфигурации sudo.
Использование visudo
Файл настроек /etc/sudoers всегда следует редактировать с помощью команды visudo . visudo блокирует файл sudoers , сохраняет изменения во временный файл и проверяет, что файл грамматически корректен, перед тем как скопировать его в /etc/sudoers .
visudo использует vi в качестве текстового редактора по умолчанию. В core репозитории sudo скомпилирована с —with-env-editor по умолчанию и использует переменные VISUAL и EDITOR . EDITOR не используется, если задана переменная VISUAL .
Чтобы сделать nano редактором visudo в течение текущего shell сеанса, задайте и экспортируйте переменную EDITOR перед тем, как выполнять visudo.
Он будет использован, если вы не определили другой редактор, установив переменные окружения VISUAL или EDITOR (используемые в таком порядке) в качестве желаемого редактора, например nano . Выполните команду с правами суперпользователя:
Для изменения редактора на постоянной основе для текущего пользователя, прочтите установка переменных окружения для пользователя. Для того, чтобы установить выбранный редактор на постоянной основе для всей системы, но только для visudo , добавьте следующее в /etc/sudoers (предположим, что вы предпочитаете nano в качестве редактора):
Примеры настроек
Настройка sudo осуществляется добавлением записей в файл /etc/sudoers . Чтобы дать пользователю привилегии суперпользователя, когда он вводит sudo перед командой, добавьте следующую строку:
Разрешить пользователю выполнять все команды от любого пользователя, но только на машине с определенным названием хоста:
Предоставить членам группы wheel доступ sudo:
Чтобы не спрашивать пароль у пользователя:
Разрешить выполнять только конкретные команды и только пользователю на определенном хосте:
Разрешить выполнять конкретно определённые команды только для пользователя на определенном хосте и без пароля:
Подробный пример для sudoers доступен в /usr/share/doc/sudo/examples/sudoers . Также смотрите руководство по sudoers для получения более подробной информации.
Права доступа к файлам sudoers по умолчанию
Файл sudoers должен иметь владельца root и группу root (0). Права доступа всегда должны быть установлены как r—r—— (0440). Эти права установлены по умолчанию, однако если вы случайно измените их, они должны быть немедленно изменены обратно, иначе sudo не будет работать.
Время действия введённого пароля
Возможно, вы захотите изменить промежуток времени, в течение которого sudo действует без ввода пароля. Этого легко добиться добавив опцию timestamp_timeout в /etc/sudoers :
Например, чтобы установить тайм-аут на 20 минут:
Советы и рекомендации
Автодополнение по нажатию Tab в bash
Один тайм-аут на все сеансы терминала
Если вы не хотите вводить пароль снова каждый раз, когда открываете новый терминал, отключите tty_tickets:
Всегда показывать замечание о безопасности
По умолчанию, /etc/sudoers настроен так, что sudo выводит замечание о безопасности только при первом открытии сеанса:
Чтобы это сообщение выводилось всегда, отредактируйте /etc/sudoers . Замените:
или просто добавьте эту строку, если её нет.
Переменные окружения
Если у вас много переменных окружения или вы экспортировали ваши настройки прокси через export http_proxy=». » , когда вы используете sudo, эти переменные не будут переданы в открытый сеанс, если вы не запустите sudo в опцией -E .
Рекомендованный способ сохранения переменных окружения — это прописать их в env_keep :
Перенос псевдонимов
Если у вас установлено много псевдонимов, вы могли заметить, что они не переносятся в сеанс sudo. Однако, это легко исправить. Просто добавьте в ваш
/.bashrc или /etc/bash.bashrc строку:
Шутливые оскорбления
Вы можете сконфигурировать sudo так, чтобы при вводе неверного пароля он выводил шутливые оскорбления вместо стандартного сообщения «Sorry, try again». Найдите строку Defaults в /etc/sudoers и добавьте insults в список опции, разделяя их запятыми. Конечный результат может выглядеть так:
Для проверки, введите sudo -K , чтобы завершить текущий сеанс и позволить sudo заново запросить пароль.
Пароль суперпользователя
Вы можете сконфигурировать sudo так, чтобы он спрашивал пароль суперпользователя вместо пароля текущего пользователя, добавив targetpw или rootpw в список опций Defaults в /etc/sudoers :
Чтобы не разглашать пароль root пользователям, вы можете запретить это определённым группам:
Отключение учетной записи root
Вы можете захотеть отключить возможность входа систему пользователя root. Без этого атакующие сначала должны будут угадать имя пользователя, сконфигурированного как sudoer, а также пароль этого пользователя. Смотрите для примера Secure Shell (Русский)#Отключение.
Пароль пользователя root можно заблокировать с помощью passwd :
Аналогичная команда разблокирует пароль пользователя root:
Также вы можете отредактировать /etc/shadow и заменить зашифрованный пароль root на «!»:
Тогда, чтобы задать новый пароль и тем самым разблокировать пользователя root:
Чтобы gksu использовал sudo по умолчанию, выполните:
kdesu
kdesu можно использовать в KDE для запуска графических программ с привилегиями суперпользователя. Вероятно, что kdesu по умолчанию будет пытаться использовать su, даже если аккаунт root отключен. К счастью, можно сказать kdesu использовать sudo вместо su. Создайте/отредактируйте файл
/.config/kdesurc для kf5 версии kdesu):
или используйте следующую команду (используйте kwriteconfig5 для kf5 версии kdesu):
Также вы можете установить kdesudo AUR из AUR, который поддерживает улучшенное автодополнение по Tab при вводе команды.
Еще один пример настройки
Допустим, вы создали 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 /path/to/file . Смотрите раздел Including other files from within sudoers в sudoers(5) для дополнительной информации.
Решение проблем
Проблемы с TTY через SSH
По умолчанию SSH не выделяет tty при выполнении удалённой команды. Без tty sudo не может отключить отображение пароля при его вводе. Вы можете воспользоваться ssh опцией -tt , чтобы заставить его выделять tty (или -t дважды).
Defaults опция requiretty всего лишь позволяет запускать sudo пользователям, если они имеют tty.
Показать привилегии пользователя
Вы можете узнать какими привилегиями обладает конкретный пользователь следующей командой:
Или узнать ваши собственные привилегии командой:
Наложение umask
Sudo накладывает на значение umask пользователя свою собственную (которая по умолчанию установлена в 0022). Это предотвращает sudo от создания файлов с более либеральными правами доступа, чем это позволяет umask пользователя. Несмотря на то, что это разумное значение по умолчанию, если не используется измененная umask, это может привести к ситуации, когда программа, запущенная через sudo может создавать файлы с правами доступа отличными от тех, которые создаются при запуске программы непосредственно суперпользователем. Для исправления таких ошибок sudo предоставляет возможность исправить umask, даже если желаемая umask более либеральна, чем установлено в umask пользователя. Добавив такие строки (используйте visudo ) вы измените поведение sudo по умолчанию:
Это установит sudo umask в umask суперпользователя по умолчанию (0022) и переопределит поведение по умолчанию, всегда используя указанную umask и независимо от umask пользователя.
Опции по умолчанию
На сайте авторов есть список всех опций, которые можно использовать с командой Defaults в файле /etc/sudoers .
Смотрите [1] список опций (извлечён из исходного кода версии 1.8.7) представленный в формате, оптимизированном для sudoers .
Источник
Команда 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.
Источник