- Настройка sudo под Linux
- Как редактировать sudoers (visudo)
- Настройка прав доступа sudo
- Простой пример
- Продвинутые правила sudo
- Флаги
- Приоритет правил
- Проверка конфигурации
- Sudo config in linux
- Contents
- Installation
- Usage
- Configuration
- Defaults skeleton
- View current settings
- Using visudo
- Example entries
- Sudoers default file permissions
- Tips and tricks
- Disable password prompt timeout
- Add terminal bell to the password prompt
- Passing aliases
- Disable per-terminal sudo
- Reduce the number of times you have to type a password
- Environment variables
- Root password
- Disable root login
- kdesu
- Harden with sudo example
- Configure sudo using drop-in files in /etc/sudoers.d
- Editing files
- Enable insults
- Troubleshooting
- SSH problem without TTY
- Permissive umask
- Sudo (Русский)
- Contents
- Обоснование
- Установка
- Использование
- Настройка
- Просмотр текущих настроек
- Использование visudo
- Примеры настроек
- Права доступа к файлам sudoers по умолчанию
- Время действия введённого пароля
- Советы и рекомендации
- Автодополнение по нажатию Tab в bash
- Один тайм-аут на все сеансы терминала
- Всегда показывать замечание о безопасности
- Переменные окружения
- Перенос псевдонимов
- Шутливые оскорбления
- Пароль суперпользователя
- Отключение учетной записи root
- kdesu
- Еще один пример настройки
- Настройка sudo с помощью вкладываемых в /etc/sudoers.d файлов
- Решение проблем
- Проблемы с TTY через SSH
- Показать привилегии пользователя
- Наложение umask
- Опции по умолчанию
Настройка sudo под Linux
Этот текст не является переводом полного руководства. Если вы администрируете систему с большим количеством пользователей и сложным распределением полномочий, то очень советую почитать документацию. Но, если вам просто надо выдать определённому пользователю определённые права, то в этой заметке в скорее всего найдёте готовый рецепт.
Как редактировать sudoers (visudo)
Редактировать файл sudoers «вручную» — плохая практика. Для редактирования есть специальная команда visudo . Она сама знает, где расположен файл sudoers , и отследит, чтобы вы редактировали копия, файл всегда был целостным, а копия была удалена.
visudo позволяет использовать любой редактор. Например, вы можете использовать mcedit:
Если вы допустите ошибку, то, при выходе из редактора получите сообщение вида:
В этом случае, лучше ввести букву « e » и продолжить редактирование.
Настройка прав доступа sudo
Файл sudoers , обычно, содержит много комментариев. В каждой системе/дистрибутиве они различны. Имеет смысл ознакомиться с ними и, возможно, внести какие-то правки глобальных настроек.
Особое внимание следует обратить на директивы
за ними скрывается ещё куча всего интересного.
Но нас интересуют по-пользовательские настройки. Обычно для них есть отдельная часть в sudoers , которая может начинаться таким комментарием:
Дальше полномочия описываются строчками вида:
Простой пример
Это означает, что пользователь alex , может выполнить с правами root команду /bin/mount /media/n78 .
Обратите внимание, путь к команде mount указан полностью. Это важно! Если этого не сделать, то sudo работать не будет.
Теперь пользователь alex может выполнить команду
У него будет спрошен пароль (его, а не root).
Продвинутые правила sudo
Можно написать более сложные правила:
alex ALL=(ALL) ALL alex ALL=(root) NOPASSWD: /bin/mount /media/n78 alex ALL=(root) NOPASSWD: /bin/umount /media/n78
Пользователь alex может выполнить монтирование от пользователя root без пароля. И может выполнить любую команду от любого пользователя, если укажет пароль.
Флаги
Более полный пример с использованием флагов:
Флагов существует великое множество, смотрите документацию.
Приоритет правил
Опции применяются в том порядке в каком они указаны в файле конфигурации. Поэтому более общие правила должны идти вначале, а боле частные уточнения должны располагаться ближе к концу.
Проверка конфигурации
После того, как вы всё настроили, вы можете проверить, как sudo интерпретирует ваши настройки. Это очень удобно.
С их помощью вы можете легко найти ошибки или убедиться, что всё настроено правильно.
Источник
Sudo config in linux
Sudo allows a system administrator to delegate authority to give certain users—or groups of users—the ability to run commands as root or another user while providing an audit trail of the commands and their arguments.
Sudo is an alternative to su for running commands as root. Unlike su, which launches a root shell that allows all further commands root access, sudo instead grants temporary privilege elevation to a single command. By enabling root privileges only when needed, sudo usage reduces the likelihood that a typo or a bug in an invoked command will ruin the system.
Sudo can also be used to run commands as other users; additionally, sudo logs all commands and failed access attempts for security auditing.
Contents
Installation
Usage
To begin using sudo as a non-privileged user, it must be properly configured. See #Configuration.
To use sudo, simply prefix a command and its arguments with sudo and a space:
For example, to use pacman:
See sudo(8) for more information.
Configuration
This article or section needs expansion.
Defaults skeleton
sudoers(5) § SUDOERS OPTIONS lists all the options that can be used with the Defaults command in the /etc/sudoers file.
See [1] for a list of options (parsed from the version 1.8.7 source code) in a format optimized for sudoers .
See sudoers(5) for more information, such as configuring the password timeout.
View current settings
Run sudo -ll to print out the current sudo configuration, or sudo -lU user for a specific user.
Using visudo
The configuration file for sudo is /etc/sudoers . It should always be edited with the visudo(8) command. visudo locks the sudoers file, saves edits to a temporary file, and checks it for syntax errors before copying it to /etc/sudoers .
The default editor for visudo is vi. The sudo package is compiled with —with-env-editor and honors the use of the SUDO_EDITOR , VISUAL and EDITOR variables. EDITOR is not used when VISUAL is set.
To establish nano as the visudo editor for the duration of the current shell session, export EDITOR=nano ; to use a different editor just once simply set the variable before calling visudo:
Alternatively you may edit a copy of the /etc/sudoers file and check it using visudo -c /copy/of/sudoers . This might come in handy in case you want to circumvent locking the file with visudo.
To change the editor permanently, see Environment variables#Per user. To change the editor of choice permanently system-wide only for visudo, add the following to /etc/sudoers (assuming nano is your preferred editor):
Example entries
To allow a user to gain full root privileges when they precede a command with sudo , add the following line:
To allow a user to run all commands as any user but only on the machine with hostname HOST_NAME :
To allow members of group wheel sudo access:
To disable asking for a password for user USER_NAME :
Enable explicitly defined commands only for user USER_NAME on host HOST_NAME :
Enable explicitly defined commands only for user USER_NAME on host HOST_NAME without password:
A detailed sudoers example is available at /usr/share/doc/sudo/examples/sudoers . Otherwise, see the sudoers(5) for detailed information.
Sudoers default file permissions
The owner and group for the sudoers file must both be 0. The file permissions must be set to 0440. These permissions are set by default, but if you accidentally change them, they should be changed back immediately or sudo will fail.
Tips and tricks
Disable password prompt timeout
A common annoyance is a long-running process that runs on a background terminal somewhere that runs with normal permissions and elevates only when needed. This leads to a sudo password prompt which goes unnoticed and times out, at which point the process dies and the work done is lost or, at best, cached. Common advice is to enable passwordless sudo, or extend the timeout of sudo remembering a password. Both of these have negative security implications. The prompt timeout can also be disabled and since that does not serve any reasonable security purpose it should be the solution here:
Add terminal bell to the password prompt
To draw attention to a sudo prompt in a background terminal, users can simply make it echo a bell character:
Note the ^G is a literal bell character. E.g. in vim, insert using the sequence Ctrl+v Ctrl+g , or in nano, Alt+v Ctrl+g .
Passing aliases
If you use a lot of aliases, you might have noticed that they do not carry over to the root account when using sudo. However, there is an easy way to make them work. Simply add the following to your
/.bashrc or /etc/bash.bashrc :
Disable per-terminal sudo
If you are annoyed by sudo’s defaults that require you to enter your password every time you open a new terminal, set timestamp_type to global :
Reduce the number of times you have to type a password
If you are annoyed that you have to re-enter your password every 5 minutes (default), you can change this by setting a longer value for timestamp_timeout (in minutes):
If you are using a lot of sudo commands on a row, it is more logical to refresh the timeout every time you use sudo than to increase timestamp_timeout . Refreshing the timeout can be done with sudo -v (whereas sudo -K revokes immediately).
You might want to automate this by adding the following to your .bashrc :
It is also possible to use a bash function; for more details see stackexchange.
Environment variables
If you have a lot of environment variables, or you export your proxy settings via export http_proxy=». » , when using sudo these variables do not get passed to the root account unless you run sudo with the -E option.
The recommended way of preserving environment variables is to append them to env_keep :
Root password
Users can configure sudo to ask for the root password instead of the user password by adding targetpw (target user, defaults to root) or rootpw to the Defaults line in /etc/sudoers :
To prevent exposing your root password to users, you can restrict this to a specific group:
Disable root login
Users may wish to disable the root login. Without root, attackers must first guess a user name configured as a sudoer as well as the user password. See for example OpenSSH#Deny.
The account can be locked via passwd :
A similar command unlocks root.
Alternatively, edit /etc/shadow and replace the root’s encrypted password with «!»:
To enable root login again:
kdesu
kdesu may be used under KDE to launch GUI applications with root privileges. It is possible that by default kdesu will try to use su even if the root account is disabled. Fortunately one can tell kdesu to use sudo instead of su. Create/edit the file
or use the following command:
Alternatively, install kdesudo AUR , which has the added advantage of tab-completion for the command following.
Harden with sudo example
Let us say you create 3 users: admin, devel, and joe. The user «admin» is used for journalctl, systemctl, mount, kill, and iptables; «devel» is used for installing packages, and editing config files; and «joe» is the user you log in with. To let «joe» reboot, shutdown, and use netctl we would do the following:
Edit /etc/pam.d/su and /etc/pam.d/su-l Require user be in the wheel group, but do not put anyone in it.
Limit SSH login to the ‘ssh’ group. Only «joe» will be part of this group.
Add users to other groups.
Set permissions on configs so devel can edit them.
With this setup, you will almost never need to login as the Root user.
«joe» can connect to his home WiFi.
«joe» can not use netctl as any other user.
When «joe» needs to use journalctl or kill run away process he can switch to that user.
But «joe» cannot switch to the root user.
If «joe» want to start a gnu-screen session as admin he can do it like this:
Configure sudo using drop-in files in /etc/sudoers.d
sudo parses files contained in the directory /etc/sudoers.d/ . This means that instead of editing /etc/sudoers , you can change settings in standalone files and drop them in that directory. This has two advantages:
- There is no need to edit a sudoers.pacnew file;
- If there is a problem with a new entry, you can remove the offending file instead of editing /etc/sudoers (but see the warning below).
The format for entries in these drop-in files is the same as for /etc/sudoers itself. To edit them directly, use visudo -f /etc/sudoers.d/somefile . See sudoers(5) § Including other files from within sudoers for details.
The files in /etc/sudoers.d/ directory are parsed in lexicographical order, file names containing . or
are skipped. To avoid sorting problems, the file names should begin with two digits, e.g. 01_foo .
Editing files
sudo -e or sudoedit lets you edit a file as another user while still running the text editor as your user.
This is especially useful for editing files as root without elevating the privilege of your text editor, for more details read sudo(8) § e .
Note that you can set the editor to any program, so for example one can use meld to manage pacnew files:
Enable insults
Users can enable insults easter egg in sudo by adding the following line in sudoers file with visudo .
Upon entering an incorrect password this will replace Sorry, try again. message with humorous insults.
Troubleshooting
SSH problem without TTY
This article or section is a candidate for merging with #Configuration.
SSH does not allocate a tty by default when running a remote command. Without a allocated tty, sudo cannot prevent the password from being displayed. You can use ssh’s -t option to force it to allocate a tty.
The Defaults option requiretty only allows the user to run sudo if they have a tty.
Permissive umask
This article or section is a candidate for merging with #Configuration.
Sudo will union the user’s umask value with its own umask (which defaults to 0022). This prevents sudo from creating files with more open permissions than the user’s umask allows. While this is a sane default if no custom umask is in use, this can lead to situations where a utility run by sudo may create files with different permissions than if run by root directly. If errors arise from this, sudo provides a means to fix the umask, even if the desired umask is more permissive than the umask that the user has specified. Adding this (using visudo ) will override sudo’s default behavior:
This sets sudo’s umask to root’s default umask (0022) and overrides the default behavior, always using the indicated umask regardless of what umask the user as set.
Источник
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 .
Источник