UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

516 lines (321 loc) 33.8 kB
Ссылки по теме * [Пользователи и группы](/index.php/%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%B8_%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D1%8B "Пользователи и группы") * [su](/index.php/Su "Su") **Состояние перевода:** На этой странице представлен перевод статьи [Sudo](/index.php/Sudo "Sudo"). Дата последней синхронизации: 2015-06-29\. Вы можете [помочь](/index.php/ArchWiki_Translation_Team_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "ArchWiki Translation Team (Русский)") синхронизировать перевод, если в английской версии произошли [изменения](https://wiki.archlinux.org/index.php?title=Sudo&diff=0&oldid=378606). [sudo](http://www.gratisoft.us/sudo/) (англ. *substitute user do*, дословно «подменить пользователя и выполнить») позволяет системному администратору делегировать полномочия, чтобы дать некоторым пользователям (или группе пользователей) возможность запускать некоторые (или все) команды c правами суперпользователя или любого другого пользователя, обеспечивая контроль над командами и их аргументами. ## Contents * [1 Обоснование](#.D0.9E.D0.B1.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5) * [2 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0) * [3 Использование](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5) * [4 Настройка](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0) * [4.1 Просмотр текущих настроек](#.D0.9F.D1.80.D0.BE.D1.81.D0.BC.D0.BE.D1.82.D1.80_.D1.82.D0.B5.D0.BA.D1.83.D1.89.D0.B8.D1.85_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA) * [4.2 Использование visudo](#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_visudo) * [4.3 Примеры настроек](#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B5.D0.BA) * [4.4 Права доступа к файлам sudoers по умолчанию](#.D0.9F.D1.80.D0.B0.D0.B2.D0.B0_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0_.D0.BA_.D1.84.D0.B0.D0.B9.D0.BB.D0.B0.D0.BC_sudoers_.D0.BF.D0.BE_.D1.83.D0.BC.D0.BE.D0.BB.D1.87.D0.B0.D0.BD.D0.B8.D1.8E) * [4.5 Время действия введённого пароля](#.D0.92.D1.80.D0.B5.D0.BC.D1.8F_.D0.B4.D0.B5.D0.B9.D1.81.D1.82.D0.B2.D0.B8.D1.8F_.D0.B2.D0.B2.D0.B5.D0.B4.D1.91.D0.BD.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BF.D0.B0.D1.80.D0.BE.D0.BB.D1.8F) * [5 Советы и рекомендации](#.D0.A1.D0.BE.D0.B2.D0.B5.D1.82.D1.8B_.D0.B8_.D1.80.D0.B5.D0.BA.D0.BE.D0.BC.D0.B5.D0.BD.D0.B4.D0.B0.D1.86.D0.B8.D0.B8) * [5.1 Автодополнение по нажатию Tab в bash](#.D0.90.D0.B2.D1.82.D0.BE.D0.B4.D0.BE.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D0.BE_.D0.BD.D0.B0.D0.B6.D0.B0.D1.82.D0.B8.D1.8E_Tab_.D0.B2_bash) * [5.2 Один тайм-аут на все сеансы терминала](#.D0.9E.D0.B4.D0.B8.D0.BD_.D1.82.D0.B0.D0.B9.D0.BC-.D0.B0.D1.83.D1.82_.D0.BD.D0.B0_.D0.B2.D1.81.D0.B5_.D1.81.D0.B5.D0.B0.D0.BD.D1.81.D1.8B_.D1.82.D0.B5.D1.80.D0.BC.D0.B8.D0.BD.D0.B0.D0.BB.D0.B0) * [5.3 Всегда показывать замечание о безопасности](#.D0.92.D1.81.D0.B5.D0.B3.D0.B4.D0.B0_.D0.BF.D0.BE.D0.BA.D0.B0.D0.B7.D1.8B.D0.B2.D0.B0.D1.82.D1.8C_.D0.B7.D0.B0.D0.BC.D0.B5.D1.87.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BE_.D0.B1.D0.B5.D0.B7.D0.BE.D0.BF.D0.B0.D1.81.D0.BD.D0.BE.D1.81.D1.82.D0.B8) * [5.4 Переменные окружения](#.D0.9F.D0.B5.D1.80.D0.B5.D0.BC.D0.B5.D0.BD.D0.BD.D1.8B.D0.B5_.D0.BE.D0.BA.D1.80.D1.83.D0.B6.D0.B5.D0.BD.D0.B8.D1.8F) * [5.5 Перенос псевдонимов](#.D0.9F.D0.B5.D1.80.D0.B5.D0.BD.D0.BE.D1.81_.D0.BF.D1.81.D0.B5.D0.B2.D0.B4.D0.BE.D0.BD.D0.B8.D0.BC.D0.BE.D0.B2) * [5.6 Шутливые оскорбления](#.D0.A8.D1.83.D1.82.D0.BB.D0.B8.D0.B2.D1.8B.D0.B5_.D0.BE.D1.81.D0.BA.D0.BE.D1.80.D0.B1.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F) * [5.7 Пароль суперпользователя](#.D0.9F.D0.B0.D1.80.D0.BE.D0.BB.D1.8C_.D1.81.D1.83.D0.BF.D0.B5.D1.80.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8F) * [5.8 Отключение учетной записи root](#.D0.9E.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D1.83.D1.87.D0.B5.D1.82.D0.BD.D0.BE.D0.B9_.D0.B7.D0.B0.D0.BF.D0.B8.D1.81.D0.B8_root) * [5.8.1 gksu](#gksu) * [5.8.2 kdesu](#kdesu) * [5.9 Еще один пример настройки](#.D0.95.D1.89.D0.B5_.D0.BE.D0.B4.D0.B8.D0.BD_.D0.BF.D1.80.D0.B8.D0.BC.D0.B5.D1.80_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B8) * [5.10 Настройка sudo с помощью вкладываемых в /etc/sudoers.d файлов](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_sudo_.D1.81_.D0.BF.D0.BE.D0.BC.D0.BE.D1.89.D1.8C.D1.8E_.D0.B2.D0.BA.D0.BB.D0.B0.D0.B4.D1.8B.D0.B2.D0.B0.D0.B5.D0.BC.D1.8B.D1.85_.D0.B2_.2Fetc.2Fsudoers.d_.D1.84.D0.B0.D0.B9.D0.BB.D0.BE.D0.B2) * [6 Решение проблем](#.D0.A0.D0.B5.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC) * [6.1 Проблемы с TTY через SSH](#.D0.9F.D1.80.D0.BE.D0.B1.D0.BB.D0.B5.D0.BC.D1.8B_.D1.81_TTY_.D1.87.D0.B5.D1.80.D0.B5.D0.B7_SSH) * [6.2 Показать привилегии пользователя](#.D0.9F.D0.BE.D0.BA.D0.B0.D0.B7.D0.B0.D1.82.D1.8C_.D0.BF.D1.80.D0.B8.D0.B2.D0.B8.D0.BB.D0.B5.D0.B3.D0.B8.D0.B8_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8F) * [6.3 Наложение umask](#.D0.9D.D0.B0.D0.BB.D0.BE.D0.B6.D0.B5.D0.BD.D0.B8.D0.B5_umask) * [6.4 Опции по умолчанию](#.D0.9E.D0.BF.D1.86.D0.B8.D0.B8_.D0.BF.D0.BE_.D1.83.D0.BC.D0.BE.D0.BB.D1.87.D0.B0.D0.BD.D0.B8.D1.8E) ## Обоснование Sudo - это альтернатива [su](/index.php/Su "Su") для выполнения команд с правами суперпользователя (root). В отличие от [su](/index.php/Su "Su"), который запускает оболочку с правами root и даёт всем дальнейшим командам root права, sudo предоставляет временное повышение привилегий для одной команды. Предоставляя привилегии root только при необходимости, использование sudo снижает вероятность того, что опечатка или ошибка в выполняемой команде произведут в системе разрушительные действия. Sudo может также использоваться для выполнения команд от имени других пользователей; кроме того, sudo логирует все команды и неудачные попытки доступа для аудита безопасности. ## Установка [Установите](/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B5 "Установите") пакет [sudo](https://www.archlinux.org/packages/?name=sudo). Чтобы начать использовать `sudo` как непривилегированный пользователь, его нужно настроить должным образом. Для этого прочтите раздел о настройке. ## Использование Пользователи могут предварять команды словом `sudo`, чтобы исполнять их с привилегиями суперпользователя (или другого пользователя). Например, для использования pacman: ``` $ sudo pacman -Syu ``` Смотрите [руководство по sudo](http://www.gratisoft.us/sudo/man/sudo.html) для получения дополнительной информации. ## Настройка ### Просмотр текущих настроек Выполните `sudo -ll` для вывода текущей конфигурации sudo. ### Использование visudo Файл настроек `/etc/sudoers` **всегда** следует редактировать с помощью команды `visudo`. `visudo` блокирует файл `sudoers`, сохраняет изменения во временный файл и проверяет, что файл грамматически корректен, перед тем как скопировать его в `/etc/sudoers`. **Важно:** * Крайне важно, чтобы файл `sudoers` был без синтаксических ошибок! Любая ошибка делает sudo неработоспособным. **Всегда** редактируйте его только с помощью `visudo` для предотвращения ошибок. * Из [visudo(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/visudo.8): *Обратите внимание, что это дыра в безопасности, поскольку позволяет пользователю запускать любую программу, какую он захочет, просто прописав её в VISUAL или EDITOR.* visudo использует `vi` в качестве текстового редактора по умолчанию. В core репозитории sudo скомпилирована с `--with-env-editor` по умолчанию и использует переменные `VISUAL` и `EDITOR`. `EDITOR` не используется, если задана переменная `VISUAL`. Чтобы сделать nano редактором **visudo** в течение текущего shell сеанса, задайте и экспортируйте переменную `EDITOR` перед тем, как выполнять **visudo**. Он будет использован, если вы не определили другой редактор, установив [переменные окружения](/index.php/Environment_variables_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Environment variables (Русский)") `VISUAL` или `EDITOR` (используемые в таком порядке) в качестве желаемого редактора, например `nano`. Выполните команду с правами суперпользователя: ``` # EDITOR=nano visudo ``` Для изменения редактора на постоянной основе для текущего пользователя, прочтите [установка переменных окружения для пользователя](/index.php/Environment_variables_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.9D.D0.B0_.D1.83.D1.80.D0.BE.D0.B2.D0.BD.D0.B5_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8F "Environment variables (Русский)"). Для того, чтобы установить выбранный редактор на постоянной основе для всей системы, но только для `visudo`, добавьте следующее в `/etc/sudoers` (предположим, что вы предпочитаете `nano` в качестве редактора): ``` # Сброс окружения Defaults env_reset # Установка nano в качестве редактора по умолчанию и запрет visudo использовать EDITOR/VISUAL. Defaults editor=/usr/bin/nano, !env_editor ``` ### Примеры настроек Настройка sudo осуществляется добавлением записей в файл `/etc/sudoers`. Чтобы дать пользователю привилегии суперпользователя, когда он вводит `sudo` перед командой, добавьте следующую строку: ``` *имя_пользователя* ALL=(ALL) ALL ``` Разрешить пользователю выполнять все команды от любого пользователя, но только на машине с определенным названием хоста: ``` *имя_пользователя* *название_хоста*=(ALL) ALL ``` Предоставить членам группы `wheel` доступ sudo: ``` %wheel ALL=(ALL) ALL ``` Чтобы не спрашивать пароль у пользователя: ``` Defaults:*имя_пользователя*  !authenticate ``` Разрешить выполнять только конкретные команды и только пользователю на определенном хосте: ``` *имя_пользователя* *название_хоста*=/usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu ``` **Примечание:** Наиболее общие опции должны идти в начале файла, а наиболее частные - наоборот, в конце файла, так как более нижние строки переопределяют более верхние. В частности, добавляемая строка должна быть после строки `%wheel`, если ваш пользователь находится в этой группе. Разрешить выполнять конкретно определённые команды только для пользователя на определенном хосте и без пароля: ``` *имя_пользователя* *название_хоста*= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu ``` Подробный пример для `sudoers` доступен в `/usr/share/doc/sudo/examples/sudoers`. Также смотрите [руководство по sudoers](http://www.gratisoft.us/sudo/man/sudoers.html) для получения более подробной информации. ### Права доступа к файлам sudoers по умолчанию Файл `sudoers` должен иметь владельца root и группу root (0). Права доступа всегда должны быть установлены как `r--r-----` (0440). Эти права установлены по умолчанию, однако если вы случайно измените их, они должны быть немедленно изменены обратно, иначе sudo не будет работать. ``` # chown -c root:root /etc/sudoers # chmod -c 0440 /etc/sudoers ``` ### Время действия введённого пароля Возможно, вы захотите изменить промежуток времени, в течение которого sudo действует без ввода пароля. Этого легко добиться добавив опцию `timestamp_timeout` в `/etc/sudoers`: ``` Defaults:*имя_пользователя* timestamp_timeout=*время_в_минутах* ``` Например, чтобы установить тайм-аут на 20 минут: ``` Defaults:*имя_пользователя* timestamp_timeout=20 ``` **Совет:** Если вы хотите чтобы sudo всегда требовал ввод пароля, установите `timestamp_timeout` равным 0\. Чтобы срок действия пароля никогда не истекал, установите любое отрицательное значение. ## Советы и рекомендации ### Автодополнение по нажатию Tab в bash Смотрите [дополнение по нажатию Tab](/index.php/Bash_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#Tab_completion "Bash (Русский)"). ### Один тайм-аут на все сеансы терминала **Важно:** Это позволит любому процессу воспользоваться вашим открытым сеансом sudo. Если вы не хотите вводить пароль снова каждый раз, когда открываете новый терминал, отключите **tty_tickets**: ``` Defaults !tty_tickets ``` ### Всегда показывать замечание о безопасности По умолчанию, `/etc/sudoers` настроен так, что *sudo* выводит замечание о безопасности только при первом открытии сеанса: ``` We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. ``` Чтобы это сообщение выводилось всегда, отредактируйте `/etc/sudoers`. Замените: ``` Defaults lecture=once ``` на: ``` Defaults lecture=always ``` или просто добавьте эту строку, если её нет. ### Переменные окружения Если у вас много переменных окружения или вы экспортировали ваши настройки прокси через `export http_proxy="..."`, когда вы используете sudo, эти переменные не будут переданы в открытый сеанс, если вы не запустите sudo в опцией `-E`. ``` $ sudo -E pacman -Syu ``` Рекомендованный способ сохранения переменных окружения - это прописать их в `env_keep`: `/etc/sudoers` ``` Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy" ``` ### Перенос псевдонимов Если у вас установлено много псевдонимов, вы могли заметить, что они не переносятся в сеанс sudo. Однако, это легко исправить. Просто добавьте в ваш `~/.bashrc` или `/etc/bash.bashrc` строку: ``` alias sudo='sudo ' ``` ### Шутливые оскорбления Вы можете сконфигурировать sudo так, чтобы при вводе неверного пароля он выводил шутливые оскорбления вместо стандартного сообщения "Sorry, try again". Найдите строку `Defaults` в `/etc/sudoers` и добавьте `insults` в список опции, разделяя их запятыми. Конечный результат может выглядеть так: ``` #Defaults specification Defaults insults ``` Для проверки, введите `sudo -K`, чтобы завершить текущий сеанс и позволить sudo заново запросить пароль. ### Пароль суперпользователя Вы можете сконфигурировать sudo так, чтобы он спрашивал пароль суперпользователя вместо пароля текущего пользователя, добавив `targetpw` или `rootpw` в список опций Defaults в `/etc/sudoers`: ``` Defaults targetpw ``` Чтобы не разглашать пароль root пользователям, вы можете запретить это определённым группам: ``` Defaults:%wheel targetpw %wheel ALL=(ALL) ALL ``` ### Отключение учетной записи root Вы можете захотеть отключить возможность входа систему пользователя root. Без этого атакующие сначала должны будут угадать имя пользователя, сконфигурированного как sudoer, а также пароль этого пользователя. Смотрите для примера [Secure Shell (Русский)#Отключение](/index.php/Secure_Shell_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#.D0.9E.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5 "Secure Shell (Русский)"). **Важно:** Будьте осторожны. Вы можете попасть в свою ловушку, если отключите вход систему пользователя root. Sudo по умолчанию не установлен, и его стандартная конфигурация не позволяет ни получить доступ к правам root без пароля, ни дать такой доступ вам по вашему собственному паролю. Убедитесь, что пользователь правильно сконфигурирован как sudoer *перед* отключением аккаунта суперпользователя! **Примечание:** Если вы уже попали в ловушку, смотрите [Password Recovery (Русский)](/index.php/Password_Recovery_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Password Recovery (Русский)") для получения помощи. Пароль пользователя root можно заблокировать с помощью `passwd`: ``` # passwd -l root ``` Аналогичная команда разблокирует пароль пользователя root: ``` $ sudo passwd -u root ``` Также вы можете отредактировать `/etc/shadow` и заменить зашифрованный пароль root на "!": ``` root:!:12345:::::: ``` Тогда, чтобы задать новый пароль и тем самым разблокировать пользователя root: ``` $ sudo passwd root ``` #### gksu Чтобы *gksu* использовал sudo по умолчанию, выполните: ``` $ gconftool-2 --set --type boolean /apps/gksu/sudo-mode true ``` #### kdesu kdesu можно использовать в KDE для запуска графических программ с привилегиями суперпользователя. Вероятно, что kdesu по умолчанию будет пытаться использовать su, даже если аккаунт root отключен. К счастью, можно сказать kdesu использовать sudo вместо su. Создайте/отредактируйте файл `~/.kde4/share/config/kdesurc` (или `~/.config/kdesurc` для kf5 версии kdesu): ``` [super-user-command] super-user-command=sudo ``` или используйте следующую команду (используйте *kwriteconfig5* для kf5 версии kdesu): ``` $ kwriteconfig --file kdesurc --group super-user-command --key super-user-command sudo ``` Также вы можете установить [kdesudo](https://aur.archlinux.org/packages/kdesudo/) из [AUR](/index.php/AUR_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "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, но никого в неё не добавлять. ``` #%PAM-1.0 auth sufficient pam_rootok.so # Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the "wheel" group. auth required pam_wheel.so use_uid auth required pam_unix.so account required pam_unix.so session required pam_unix.so ``` Ограничить вход по SSH для группы 'ssh'. В эту группу будет входить только "joe". ``` groupadd -r ssh gpasswd -a joe ssh echo 'AllowGroups ssh' >> /etc/ssh/sshd_config ``` [Перезапустите](/index.php/%D0%9F%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D0%B5 "Перезапустите") sshd.service Добавить пользователей в другие группы. ``` for g in power network ;do ;gpasswd -a joe $g ;done for g in network power storage ;do ;gpasswd -a admin $g ;done ``` Установить права на настройки так, чтобы devel мог редактировать их. ``` chown -R devel:root /etc/{http,openvpn,cups,zsh,vim,screenrc} ``` ``` Cmnd_Alias POWER = /usr/bin/shutdown -h now, /usr/bin/halt, /usr/bin/poweroff, /usr/bin/reboot Cmnd_Alias STORAGE = /usr/bin/mount -o nosuid,nodev,noexec, /usr/bin/umount Cmnd_Alias SYSTEMD = /usr/bin/journalctl, /usr/bin/systemctl Cmnd_Alias KILL = /usr/bin/kill, /usr/bin/killall Cmnd_Alias PKGMAN = /usr/bin/pacman Cmnd_Alias NETWORK = /usr/bin/netctl Cmnd_Alias FIREWALL = /usr/bin/iptables, /usr/bin/ip6tables Cmnd_Alias SHELL = /usr/bin/zsh, /usr/bin/bash %power ALL = (root) NOPASSWD: POWER %network ALL = (root) NETWORK %storage ALL = (root) STORAGE root ALL = (ALL) ALL admin ALL = (root) SYSTEMD, KILL, FIREWALL devel ALL = (root) PKGMAN Joe ALL = (devel) SHELL, (admin) SHELL ``` С такими настройками вам практически никогда не понадобится входить как суперпользователь. "Joe" может подсоединиться к своему домашнему WiFi. ``` sudo netctl start home sudo poweroff ``` "Joe" не может использовать netctl от имени другого пользователя. ``` sudo -u admin -- netctl start home ``` Когда "joe" хочет воспользоваться journalctl или убить зависший процесс, он может переключиться на нужного пользователя: ``` sudo -i -u devel sudo -i -u admin ``` Но "joe" не может переключиться на суперпользователя. ``` sudo -i -u root ``` Если "joe" хочет начать gnu-screen сессию как admin, он может сделать это следующим образом: ``` sudo -i -u admin admin% chown admin:tty `echo $TTY` admin% screen ``` ### Настройка 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)](https://jlk.fjfi.cvut.cz/arch/manpages/man/sudoers.5) для дополнительной информации. ## Решение проблем ### Проблемы с TTY через SSH По умолчанию SSH не выделяет tty при выполнении удалённой команды. Без tty sudo не может отключить отображение пароля при его вводе. Вы можете воспользоваться ssh опцией `-tt`, чтобы заставить его выделять tty (или `-t` дважды). `Defaults` опция `requiretty` всего лишь позволяет запускать sudo пользователям, если они имеют tty. ``` # Disable "ssh hostname sudo <cmd>", because it will show the password in clear text. You have to run "ssh -t hostname sudo <cmd>". # #Defaults requiretty ``` ### Показать привилегии пользователя Вы можете узнать какими привилегиями обладает конкретный пользователь следующей командой: ``` $ sudo -lU имя_пользователя ``` Или узнать ваши собственные привилегии командой: `$ sudo -l` ``` Matching Defaults entries for yourusename on this host: loglinelen=0, logfile=/var/log/sudo.log, log_year, syslog=auth, mailto=webmaster@gmail.com, mail_badpass, mail_no_user, mail_no_perms,env_reset, always_set_home, tty_tickets, lecture=always, pwfeedback, rootpw, set_home User yourusename may run the following commands on this host: (ALL) ALL (ALL) NOPASSWD: /usr/bin/lsof, /bin/nice, /usr/bin/su, /usr/bin/locate, /usr/bin/find, /usr/bin/rsync, /usr/bin/strace, (ALL) /bin/kill, /usr/bin/nice, /usr/bin/ionice, /usr/bin/top, /usr/bin/killall, /usr/bin/ps, /usr/bin/pkill (ALL) /usr/bin/gparted, /usr/bin/pacman (ALL) /usr/local/bin/synergyc, /usr/local/bin/synergys (ALL) /usr/bin/vim, /usr/bin/nano, /usr/bin/cat (root) NOPASSWD: /usr/local/bin/synergyc ``` ### Наложение umask Sudo накладывает на значение [umask](/index.php/Umask "Umask") пользователя свою собственную (которая по умолчанию установлена в 0022). Это предотвращает sudo от создания файлов с более либеральными правами доступа, чем это позволяет umask пользователя. Несмотря на то, что это разумное значение по умолчанию, если не используется измененная umask, это может привести к ситуации, когда программа, запущенная через sudo может создавать файлы с правами доступа отличными от тех, которые создаются при запуске программы непосредственно суперпользователем. Для исправления таких ошибок sudo предоставляет возможность исправить umask, даже если желаемая umask более либеральна, чем установлено в umask пользователя. Добавив такие строки (используйте `visudo`) вы измените поведение sudo по умолчанию: ``` Defaults umask = 0022 Defaults umask_override ``` Это установит sudo umask в umask суперпользователя по умолчанию (0022) и переопределит поведение по умолчанию, всегда используя указанную umask и независимо от umask пользователя. ### Опции по умолчанию На сайте авторов есть [список всех опций](http://www.sudo.ws/sudo/sudoers.man.html#x5355444f455253204f5054494f4e53), которые можно использовать с командой `Defaults` в файле `/etc/sudoers`. Смотрите [[1]](https://gist.github.com/AladW/7eca9799b9ea624eca31) список опций (извлечён из исходного кода версии 1.8.7) представленный в формате, оптимизированном для `sudoers`.