arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
516 lines (321 loc) • 33.8 kB
Markdown
Ссылки по теме
* [Пользователи и группы](/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`.