How to use sudo as root

How to use sudo as root Техника

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.

Install the package.

To use sudo, simply prefix a command and its arguments with sudo and a space:

$ sudo cmd

For example, to use pacman:

$ sudo pacman -Syu

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: Create an intro discussing Defaults, perhaps with a table that lists common settings (Discuss in Talk:Sudo)

Содержание
  1. View current settings
  2. Sudoers default file permissions
  3. Tips and tricks
  4. Disable password prompt timeout
  5. Add terminal bell to the password prompt
  6. Disable per-terminal sudo
  7. Reduce the number of times you have to type a password
  8. Disable root login
  9. Harden with sudo example
  10. Configure sudo using drop-in files in /etc/sudoers.d
  11. Enable password input feedback
  12. Colored password prompt
  13. SSH problem without TTY
  14. Просмотр текущих настроек
  15. Права доступа к файлам sudoers по умолчанию
  16. Советы и рекомендации
  17. Отключение таймаута запроса пароля
  18. Сигнал при запросе пароля
  19. Один тайм-аут на все сеансы терминала
  20. Время действия введённого пароля
  21. Отключение учетной записи root
  22. Еще один пример настройки
  23. Настройка sudo с помощью вкладываемых в /etc/sudoers.d файлов
  24. Проблемы с TTY через SSH
  25. Содержание
  26. Что такое sudo
  27. Где используется sudo
  28. Запуск графических программ с правами администратора
  29. Запуск программ с правами администратора в терминале
  30. Получение прав суперпользователя для выполнения нескольких команд
  31. Использование традиционного root аккаунта и команды su
  32. Ubuntu 11.04 и младше
  33. Ubuntu 11.10 и старше
  34. Настройка sudo и прав доступа на выполнение различных команд
  35. Разрешение пользователю выполнять команду без ввода пароля
  36. Создание синонимов (alias`ов)
  37. Время действия введённого пароля
  38. Sudo не спрашивает пароль
  39. Ссылки
  40. Syntax
  41. Options
  42. Granting sudo Privileges
  43. RedHat and CentOS
  44. Debian and Ubuntu
  45. Using visudo and the sudoers Group
  46. Examples of sudo in Linux
  47. Basic Sudo Usage
  48. Run Command as a Different User
  49. Switch to Root User
  50. Execute Previous Commands with sudo
  51. Run Multiple Commands in One Line
  52. Add a String of Text to an Existing File
  53. Creating a Debian Sudo User
  54. Step 1: Log in as the Root User
  55. Step 2: Add a New User in Debian
  56. Step 3: Add User to the Sudo Group
  57. Verify Sudo Access in Debian
  58. Using Sudo
  59. Step 1: Create New User
  60. Step 2: Add User to Sudo Group
  61. Step 3: Verify User Belongs to Sudo Group
  62. Step 4: Verify Sudo Access

sudoers(5) § SUDOERS OPTIONS lists all the options that can be used with the Defaults command in the /etc/sudoers file.

View current settings

The configuration file for sudo is /etc/sudoers. It should always be edited with the command. visudo locks the sudoers file, saves edits to a temporary file, and checks it for syntax errors before copying it to /etc/sudoers.

  • It is imperative that sudoers be free of syntax errors! Any error makes sudo unusable. Always edit it with visudo to prevent errors.
  • warns that configuring visudo to honor the user environment variables for their editor of choice may be a security hole, since it allows the user with visudo privileges to run arbitrary commands as root without logging simply by setting that variable to something else.

The default editor for visudo is vi. The 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:

# EDITOR=nano 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.

# Set default EDITOR to restricted version of nano, and do not allow visudo to use EDITOR/VISUAL.
Defaults      editor=/usr/bin/rnano, !env_editor

USER_NAME   ALL=(ALL:ALL) ALL
USER_NAME   HOST_NAME=(ALL:ALL) ALL

To allow members of group wheel sudo access:

%wheel      ALL=(ALL:ALL) ALL
Defaults:USER_NAME      !authenticate
USER_NAME HOST_NAME=/usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu
USER_NAME HOST_NAME= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu

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.

# chown -c root:root /etc/sudoers
# chmod -c 0440 /etc/sudoers

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:

Defaults passwd_timeout=0

Add terminal bell to the password prompt

Defaults passprompt="[sudo] password for %p: "

Note the is a literal bell character. E.g. in vim, insert using the sequence Ctrl+v Ctrl+g. If Ctrl+v is mapped, e.g. for pasting, one can usually use Ctrl+q instead. In nano, Alt+v Ctrl+g.

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: Is it possible to preserve the localized prompt while using bell? The same question for the case when SUDO_PROMPT is used. Is there an alternative, for example by using «-B» option as default? (Discuss in Talk:Sudo)

export SUDO_PROMPT=$'\a[sudo] please enter a password: '

alias sudo='sudo '

describes how this works:

If the replacement text ends with a space, the next word in the shell input is always eligible for purposes of alias expansions.

As well as :

If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.

Disable per-terminal sudo

Warning: This will let any process use your sudo session.

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:

Defaults timestamp_type=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):

Defaults timestamp_timeout=10

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).

alias sudo='sudo -v; sudo '

$ sudo -E pacman -Syu

The recommended way of preserving environment variables is to append them to env_keep:

/etc/sudoers
Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

Defaults targetpw
Defaults:%wheel targetpw
%wheel ALL=(ALL) ALL

Disable root login

  • Be careful, you may lock yourself out by disabling root login. Sudo is not automatically installed and its default configuration allows neither passwordless root access nor root access with your own password. Ensure a user is properly configured as a sudoer before disabling the root account!
  • If you have changed your sudoers file to use rootpw as default, then do not disable root login with any of the following commands!
  • If you are already locked out, see Password recovery for help.

The account can be locked via passwd:

# passwd -l root

A similar command unlocks root.

$ sudo passwd -u root

Alternatively, edit /etc/shadow and replace the root’s encrypted password with «!»:

root:!:12345::::::

To enable root login again:

$ sudo passwd root

Tip: To get to an interactive root prompt, even after disabling the root account, use sudo -i.

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 ~/.config/kdesurc:

[super-user-command]
super-user-command=sudo
$ kwriteconfig5 --file kdesurc --group super-user-command --key super-user-command sudo

Harden with sudo example

#%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

Limit SSH login to the ‘ssh’ group. Only «archie» will be part of this group.

# groupadd -r ssh
# gpasswd -a archie ssh
# echo 'AllowGroups ssh' >> /etc/ssh/sshd_config
# for g in power network ;do ;gpasswd -a archie $g ;done
# for g in network power storage ;do ;gpasswd -a admin $g ;done

Set permissions on configs so devel can edit them.

# 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
archie	    ALL         =   (devel) SHELL, (admin) SHELL 

«archie» can connect to their home WiFi.

$ sudo netctl start home
$ sudo poweroff
$ sudo -u admin -- netctl start home
$ sudo -i -u devel
$ sudo -i -u admin
$ sudo -i -u root
$ sudo -i -u admin
[admin]$ chown admin:tty `echo $TTY`
[admin]$ screen

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).
Дополнительно:  Xiaomi перенести приложение на карту памяти без root прав

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.

Note: The order of entries in the drop-in files is important: make sure that the statements do not override themselves.

Warning: The files in /etc/sudoers.d/ are just as fragile as /etc/sudoers itself: any improperly formatted file will prevent sudo from working. Hence, for the same reason it is strongly advised to use visudo

To edit a file, set SUDO_EDITOR to the name of the editor and pass the file name to sudoedit. For example:

$ SUDO_EDITOR=vim sudoedit /etc/file

See #Using visudo and for ways to set the editor, but beware of possible security issues.

If multiple names are passed to sudo, all files are opened in the editor in a single invocation. A feature useful for merging files:

$ SUDO_EDITOR=vimdiff sudoedit /etc/file /etc/file.pacnew

/etc/sudoers
Defaults insults

Upon entering an incorrect password this will replace Sorry, try again. message with humorous insults.

Enable password input feedback

By default, there is no visual feedback when you input a password. That is done on purpose for extra security. However, if you wish to have visual input, you can enable it by adding this line:

/etc/sudoers
Defaults pwfeedback

Colored password prompt

To customize the password prompt with colors and/or bold fonts, set the SUDO_PROMPT environment variable in your shell initialization file and use .

For example, to set the password prompt to display Password: in bold red, use this:

export SUDO_PROMPT="$(tput bold setaf 1)Password:$(tput sgr0) "

Or use different colors with the default message like so:

export SUDO_PROMPT="$(tput bold setab 1 setaf 7)[sudo]$(tput sgr0) $(tput setaf 6)password for$(tput sgr0) $(tput setaf 5)%p$(tput sgr0): "

SSH problem without TTY

Merge-arrows-2.pngThis article or section is a candidate for merging with #Configuration.Merge-arrows-2.png

Notes: please use the second argument of the template to provide more detailed indications. (Discuss in Talk:Sudo)

SSH does not allocate a tty by default when running a remote command. Without an allocated tty, sudo cannot prevent the password from being displayed. You can use ssh’s -t option to force it to allocate a 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

Merge-arrows-2.pngThis article or section is a candidate for merging with #Configuration.Merge-arrows-2.png

Notes: please use the second argument of the template to provide more detailed indications. (Discuss in Talk:Sudo)

Defaults umask = 0022
Defaults umask_override

Состояние перевода: На этой странице представлен перевод статьи Sudo. Дата последней синхронизации: 26 июня 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Sudo — это альтернатива su для выполнения команд с правами суперпользователя (root). В отличие от su, который запускает оболочку с правами root и даёт всем дальнейшим командам root-права, sudo предоставляет временное повышение привилегий для одной команды. Предоставляя привилегии root только при необходимости, sudo снижает вероятность того, что опечатка или ошибка в выполняемой команде произведут в системе разрушительные действия.

Sudo может также использоваться для выполнения команд от имени других пользователей; кроме того, sudo логирует все команды и неудачные попытки доступа для аудита безопасности.

Установите пакет .

Чтобы начать использовать sudo как непривилегированный пользователь, его нужно настроить должным образом. Для этого прочтите раздел о настройке.

Для использования sudo просто добавьте sudo и пробел перед нужной командой:

$ sudo команда

Например, для использования pacman:

$ sudo pacman -Syu

Смотрите для более подробной информации.

sudoers(5) § SUDOERS OPTIONS содержит список опций, которые можно использовать с командой Defaults в файле /etc/sudoers.

Здесь доступен список опций (извлечён из исходного кода версии 1.8.7) в формате, удобном для копирования и вставки в файл sudoers.

Смотрите для более подробной информации, например о настройке таймаутов.

Просмотр текущих настроек

Выполните sudo -ll для вывода текущей конфигурации sudo.
Чтобы посмотреть настройки, действующие для конкретного пользователя, выполните sudo -lU пользователь.

Файл настроек /etc/sudoers всегда следует редактировать с помощью команды . visudo блокирует файл sudoers, сохраняет изменения во временный файл и проверяет, что файл синтаксически корректен, перед тем как скопировать его в /etc/sudoers.

  • Крайне важно, чтобы файл sudoers был без синтаксических ошибок! Любая ошибка делает sudo неработоспособным. Всегда редактируйте его только с помощью visudo для предотвращения ошибок.
  • Из : Обратите внимание, что это дыра в безопасности, поскольку позволяет пользователю запускать любую программу, какую он захочет, просто прописав её в VISUAL или EDITOR.

visudo использует vi в качестве текстового редактора по умолчанию. Пакет скомпилирован с опцией --with-env-editor по умолчанию и использует переменные VISUAL и EDITOR. EDITOR не используется, если задана переменная VISUAL.

Чтобы выбрать nano в качестве редактора для visudo в текущем сеансе, задайте и экспортируйте переменную EDITOR перед запуском visudo. Чтобы выбрать другой редактор однократно, можно просто прописать эту переменную перед командой visudo:

# EDITOR=nano visudo

В качестве альтернативы можно отредактировать копию файла /etc/sudoers и вручную запустить проверку синтаксиса с помощью команды visudo -c /копия/файла/sudoers. Это может пригодиться, если вас не устраивает, что visudo блокирует файл.

Для изменения редактора на постоянной основе для текущего пользователя, смотрите раздел Переменные окружения#На уровне пользователя. Для того, чтобы установить выбранный редактор на постоянной основе для всей системы, но только для visudo, добавьте следующее в /etc/sudoers (предположим, что вы предпочитаете nano в качестве редактора):

# Сброс окружения
Defaults      env_reset
# Установка ограниченного варианта nano в качестве редактора по умолчанию и запрет visudo использовать EDITOR/VISUAL.
Defaults      editor=/usr/bin/rnano, !env_editor

Настройка sudo осуществляется добавлением записей в файл /etc/sudoers. Чтобы дать пользователю привилегии суперпользователя, когда он вводит sudo перед командой, добавьте следующую строку:

имя_пользователя   ALL=(ALL:ALL) ALL

Разрешить пользователю выполнять все команды от любого пользователя, но только на машине с определенным названием хоста:

имя_пользователя   название_хоста=(ALL:ALL) ALL

Предоставить членам группы wheel доступ к sudo:

%wheel      ALL=(ALL:ALL) ALL

Совет: Для добавления новых администраторов рекомендуется включить доступ к sudo для группы wheel и добавлять новых пользователей в неё, поскольку по умолчанию Polkit рассматривает членов группы wheel как администраторов. Если пользователь не является членом группы wheel, программы, использующие Polkit, могут запросить аутентификацию с использованием пароля root вместо пароля пользователя.

Чтобы не спрашивать пароль у пользователя:

Важно: Это позволит любому процессу, запущенному под вашим именем пользователя, использовать sudo, не спрашивая разрешения.

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 по умолчанию

Файл sudoers должен иметь владельца root и группу root (0). Права доступа всегда должны быть установлены как r--r----- (0440). Эти права установлены по умолчанию, однако если вы случайно измените их, они должны быть немедленно изменены обратно, иначе sudo не будет работать.

# chown -c root:root /etc/sudoers
# chmod -c 0440 /etc/sudoers

Советы и рекомендации

Отключение таймаута запроса пароля

Часто раздражает такая вещь: вы запускаете какой-то долгий процесс, который работает с обычными правами и повышает их только при необходимости, и когда sudo запросит пароль, вы можете случайно не заметить это и не ввести его вовремя, из-за чего случается таймаут, процесс умирает и проделанная работа теряется или, если повезёт, кэшируется. Обычно советуют отключить запрос пароля для sudo или увеличить время действия ранее введённого пароля, однако оба этих способа имеют негативные последствия для безопасности. Таймаут запроса пароля тоже можно отключить, и поскольку это никак не влияет на безопасность, это и должно быть предпочтительным решением:

Defaults passwd_timeout=0

Сигнал при запросе пароля

Чтобы работающий в фоне терминал привлёк ваше внимание в момент запроса пароля, можно добавить символ BELL в строку запроса пароля:

Defaults passprompt="^G[sudo] password for %p: "

Вместо ^G должен быть вписан настоящий символ BELL. Например, чтобы ввести его в vim, используйте сочетание Ctrl+v Ctrl+g, а в nano используйте Alt+v Ctrl+g.

Если у вас установлено много псевдонимов, вы могли заметить, что они не переносятся в сеанс sudo. Однако, это легко исправить. Просто добавьте в ваш ~/.bashrc или /etc/bash.bashrc строку:

alias sudo='sudo '

Один тайм-аут на все сеансы терминала

Важно: Это позволит любому процессу воспользоваться вашим открытым сеансом sudo.

По умолчанию сеанс sudo действует только в пределах текущего терминала; при запуске sudo в новом терминале он запросит пароль заново. Если вас это раздражает, укажите для опции timestamp_type значение global:

Defaults timestamp_type=global

Время действия введённого пароля

Возможно, вы захотите изменить промежуток времени, в течение которого sudo действует без ввода пароля. Этого легко добиться добавив опцию timestamp_timeout в /etc/sudoers (по умолчанию 5 минут):

Defaults timestamp_timeout=10

Если вы запускаете много sudo-команд подряд, возможно, вместо увеличения timestamp_timeout лучше просто периодически обновлять временную метку. Команда sudo -v запустит отсчёт таймаута заново. С помощью команды sudo -K можно удалить временную метку, что приведёт к запросу пароля при следующем запуске sudo.

Обновление временной метки можно автоматизировать с помощью такого псевдонима (добавьте его в .bashrc):

alias sudo='sudo -v; sudo '

Также можно сделать bash-функцию: подробнее на stackexchange.

$ sudo -E pacman -Syu

Рекомендованный способ сохранения переменных окружения — это прописать их в env_keep:

/etc/sudoers
Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

Вы можете сконфигурировать sudo так, чтобы он спрашивал пароль суперпользователя вместо пароля текущего пользователя, добавив targetpw (целевой пользователь, по умолчанию root) или rootpw в список опций Defaults в /etc/sudoers:

Defaults targetpw

Чтобы не понадобилось разглашать пароль root обычным пользователям, можно указать эту опцию только для определённой группы:

Defaults:%wheel targetpw
%wheel ALL=(ALL) ALL

Отключение учетной записи root

Вы можете захотеть отключить возможность входа систему пользователя root. Без этого атакующие сначала должны будут угадать имя пользователя, сконфигурированного как sudoer, а также пароль этого пользователя. Смотрите для примера Secure Shell (Русский)#Отключение.

  • Будьте осторожны. Вы можете попасть в свою ловушку, если отключите вход систему пользователя root. Sudo по умолчанию не установлен, и его стандартная конфигурация не позволяет ни получить доступ к правам root без пароля, ни дать такой доступ вам по вашему собственному паролю. Убедитесь, что пользователь правильно сконфигурирован как sudoer перед отключением аккаунта суперпользователя!
  • Если файл sudoers настроен на использование rootpw по умолчанию, то не отключайте root-вход ни одной из следующих команд!
  • Если вы уже попали в ловушку, смотрите статью Сброс пароля root для получения помощи.
Дополнительно:  Root mag 250

Можно заблокировать аккаунт с помощью passwd:

# passwd -l root

Похожая команда снимает блокировку:

$ sudo passwd -u root

Также вы можете отредактировать /etc/shadow и заменить зашифрованный пароль root на «!»:

root:!:12345::::::

Тогда, чтобы задать новый пароль и тем самым разблокировать пользователя root:

$ sudo passwd root

Совет: Чтобы попасть в командную оболочку root даже после отключения аккаунта, используйте команду sudo -i.

kdesu можно использовать в KDE для запуска графических программ с привилегиями суперпользователя. Вероятно, что kdesu по умолчанию будет пытаться использовать su, даже если аккаунт root отключен. К счастью, можно сказать kdesu использовать sudo вместо su. Создайте/отредактируйте файл ~/.config/kdesurc:

[super-user-command]
super-user-command=sudo

или используйте следующую команду:

$ kwriteconfig5 --file kdesurc --group super-user-command --key super-user-command sudo

Еще один пример настройки

Отредактировать /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

Перезапустите службу 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
$ 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 /etc/sudoers.d/файл. Смотрите sudoers(5) § Including other files from within sudoers для дополнительной информации.

Файлы из каталога /etc/sudoers.d/ обрабатываются в лексикографическом порядке; файлы, содержащие . или ~ в имени, пропускаются. Чтобы избежать путаницы с сортировкой, рекомендуется начинать имена файлов с двух цифр, например 01_foo.

Примечание: Порядок настроек в файлах имеет значение: убедитесь, что правила не переопределяют сами себя.

Важно: Файлы в /etc/sudoers.d/ так же хрупки, как и сам /etc/sudoers: любой некорректный файл сделает sudo неработоспособным. Поэтому по той же причине настоятельно рекомендуется использовать visudo

sudo -e или sudoedit позволяет редактировать файл от имени другого пользователя, но при этом запускать текстовый редактор от имени вашего пользователя.

Это полезно для редактирования файлов от имени root без предоставления повышенных привилегий вашему текстовому редактору. Подробнее об этом читайте в .

В качестве редактора можно использовать любую программу, поэтому, например, можно использовать для управления файлами pacnew:

$ SUDO_EDITOR=meld sudo -e /etc/файл{,.pacnew}

Вы можете сконфигурировать sudo так, чтобы при вводе неверного пароля он выводил шутливые оскорбления вместо стандартного сообщения «Sorry, try again». Найдите строку Defaults в /etc/sudoers и добавьте insults в список опции, разделяя их запятыми. Конечный результат может выглядеть так:

/etc/sudoers
Defaults insults

Для проверки, введите sudo -K, чтобы завершить текущий сеанс и позволить sudo заново запросить пароль.

Проблемы с TTY через SSH

По умолчанию SSH не выделяет tty при выполнении удалённой команды. Без tty sudo не может отключить отображение пароля при его вводе. Вы можете воспользоваться ssh опцией -t, чтобы заставить его выделять tty.

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 накладывает на значение umask пользователя свою собственную (которая по умолчанию установлена в 0022). Это предотвращает sudo от создания файлов с более либеральными правами доступа, чем это позволяет umask пользователя. Несмотря на то, что это разумное значение по умолчанию, если не используется измененная umask, это может привести к ситуации, когда программа, запущенная через sudo может создавать файлы с правами доступа отличными от тех, которые создаются при запуске программы непосредственно суперпользователем. Для исправления таких ошибок sudo предоставляет возможность исправить umask, даже если желаемая umask более либеральна, чем установлено в umask пользователя. Добавив такие строки (используйте visudo) вы измените поведение sudo по умолчанию:

Defaults umask = 0022
Defaults umask_override

Это установит sudo umask в umask суперпользователя по умолчанию (0022) и переопределит поведение по умолчанию, всегда используя указанную umask и независимо от umask пользователя.

Содержание

В любой Linux-системе обязательно есть один привилегированный пользователь — root. Этот пользователь имеет права на выполнение любых действий, удаление любых файлов и изменение любых параметров. Как-то ограничить свободу действий root практически невозможно. С другой стороны, все остальные пользователи системы обычно не имеют большинства необходимых прав, например, прав на установку программ, поскольку это является административной операцией, права на которую есть только у root. Ещё одной распространённой операцией, доступной только суперпользователю, является копирование и изменение файлов в системных папках, куда обычный пользователь доступа не имеет.

Раньше данная проблема решалась достаточно просто: при обладании паролем root можно было зайти в систему под его аккаунтом либо временно получить его права, используя команду su. Потом выполнить все необходимые операции и вернуться обратно под обычного пользователя. В принципе, такая схема работает неплохо, однако у неё есть много существенных недостатков, в частности, невозможно никак (точнее, очень сложно) ограничивать административные привилегии только определённым кругом задач.

Поэтому в современных дистрибутивах Linux вместо root аккаунта для администрирования используется утилита sudo.

В Ubuntu по умолчанию root аккаунт вообще отключён, т.е. вы никаким способом не сможете попасть под root, не включив его. root именно что отключён, т.е. он присутствует в системе, под него всего лишь нельзя зайти. Если вы хотите вернуть возможность использовать root, смотрите ниже пункт о включении root аккаунта.

Что такое sudo

sudo — это утилита, предоставляющая привилегии root для выполнения административных операций в соответствии со своими настройками. Она позволяет легко контролировать доступ к важным приложениям в системе. По умолчанию, при установке Ubuntu первому пользователю (тому, который создаётся во время установки) предоставляются полные права на использование sudo. Т.е. фактически первый пользователь обладает той же свободой действий, что и root. Однако такое поведение sudo легко изменить, об этом см. ниже в пункте про настройку sudo.

Где используется sudo

sudo используется всегда, когда вы запускаете что-то из меню Администрирования системы. Например, при запуске Synaptic вас попросят ввести свой пароль. Synaptic — это программа управления установленным ПО, поэтому для её запуска нужны права администратора, которые вы и получаете через sudo вводя свой пароль.

Однако не все программы, требующие административных привилегий, автоматически запускаются через sudo. Обычно запускать программы с правами администратора приходится вручную.

Запуск графических программ с правами администратора

Для запуска графических программ с правами администратора можно воспользоваться диалогом запуска программ, вызываемым по умолчанию сочетанием клавиш Alt+F2.

Допустим, нам необходимо запустить файловый менеджер Nautilus с правами администратора, чтобы через графический интерфейс как-то изменить содержимое системных папок. Для этого необходимо ввести в диалог запуска приложений команду

gksudo nautilus

Вместо gksudo можно подставить gksu, кроме того, пользователи KDE должны вместо gksudo писать kdesu. У вас попросят ввести свой пароль, и, если вы обладаете нужными правами, Nautilus запуститься от имени администратора. Запуск любого графического ПО можно производить с правами администратора, просто написав в диалоге запуска

gksudo <имя_команды>

Будьте предельно внимательны при работе в приложениях, запущенных с правами администратора. Вы безо всяких предупреждений со стороны системы сможете выполнить любую операцию, в частности, удалить системные файлы, сделав при этом систему неработоспособной.

Запуск программ с правами администратора в терминале

Для запуска в терминале команды с правами администратора просто наберите перед ней sudo:

sudo <команда>

У вас попросят ввести ваш пароль. Будьте внимательны, пароль при вводе никак не отображается, это нормально и сделано в целях безопасности, просто вводите до конца и нажимайте Enter. После ввода пароля указанная команда исполнится от имени root.

Система какое-то время помнит введённый пароль (сохраняет открытой sudo-сессию). Поэтому при последующих выполнениях sudo ввод пароля может не потребоваться. Для гарантированного прекращения сессии sudo наберите в терминале

sudo -K

Кроме того, часто встречаются ошибки, связанные с каналами в Linux. При исполнении команды

Дополнительно:  Gang Beasts: 10 особых приемов и приемов, которые вам нужно освоить

sudo cat test.txt | grep text > result.txt

с правами root исполнится только cat, поэтому файл result.txt может не записаться. Нужно либо писать sudo перед каждой командой, либо временно переходить под суперпользователя.

Получение прав суперпользователя для выполнения нескольких команд

Иногда возникает необходимость выполнить подряд несколько команд с правами администратора. В этом случае можно временно стать суперпользователем одной из следующих команд:

sudo -s
sudo -i

После этого вы перейдёте в режим суперпользователя (с ограничениями, наложенными через настройки sudo), о чём говорит символ # в конце приглашения командной строки. Данные команды по действию похожа на su, однако:
sudo -s — не меняет домашний каталог на /root, домашним остается домашний каталог пользователя вызвавшего sudo -s, что обычно очень удобно.
sudo -i — сменит так же и домашний каталог на /root.

Для выхода обратно в режим обычного пользователя наберите exit или просто нажмите Ctrl+D.

Использование традиционного root аккаунта и команды su

Разблокировка учетной записи root приводит неоправданным рискам (работая постоянно под рутом вы имеете 100500 способов «отстрелить себе ногу»), а также упрощает получение доступа к вашему компьютеру злоумышленником.

Ubuntu 11.04 и младше

Для входа под root достаточно задать ему пароль:

sudo passwd root

Ubuntu 11.10 и старше

Начиная с версии 11.10 был установлен менеджер входа lightdm, и дело со входом под root обстоит немного сложнее.

1. Устанавливаем root пароль.
Введите в терминал:

sudo passwd root
gksu gedit /etc/lightdm/lightdm.conf

В конце файла допишите:

greeter-show-manual-login=true

3. Перезагружаем lightdm.
Введите в терминал:

sudo service lightdm restart

Для обратной блокировки учетной записи root вам потребуется откатить изменения в настройках lightdm, а также заблокировать учетную запись root командой в терминале:

sudo passwd -l root

Настройка sudo и прав доступа на выполнение различных команд

sudo позволяет разрешать или запрещать пользователям выполнение конкретного набора программ. Все настройки, связанные с правами доступа, хранятся в файле /etc/sudoers. Это не совсем обычный файл. Для его редактирования необходимо (в целях безопасности) использовать команду

sudo visudo
%admin ALL=(ALL) ALL

Подробнее о синтаксисе и возможностях настройки этого файла можно почитать выполнив

man sudoers

Если вы допустите ошибку при редактировании этого файла, то вполне возможно полностью лишитесь доступа к административным функциям. Если такое случилось, то необходимо загрузиться в recovery mode, при этом вы автоматически получите права администратора и сможете всё исправить. Кроме того, отредактировать этот файл можно с LiveCD.

Разрешение пользователю выполнять команду без ввода пароля

Для того, что бы система не запрашивала пароль при определенных командах необходимо в sudoers после строки # Cmnd alias specification добавить строку, где через запятую перечислить желаемые команды с полным путём(путь команды можно узнать, выполнив which имя_команды:

# Cmnd alias specification
Cmnd_Alias SHUTDOWN_CMDS = /sbin/shutdown, /usr/sbin/pm-hibernate, /sbin/reboot

И в конец файла дописать строку

имя_пользователя ALL=(ALL) NOPASSWD: SHUTDOWN_CMDS

Внимание! Вышеописанные действия не отменяют необходимости ввода команды sudo перед вашей командой

Создание синонимов (alias`ов)

Для того, чтобы не только не вводить пароль для sudo, но и вообще не вводить sudo, сделайте следующее:
откройте файл .bashrc, находящейся в вашем домашнем каталоге

  ~bashrc 

и добавьте в конец файла строки

 =
 =
 pm-hibernate=
 =
 = 

Время действия введённого пароля

Возможно, вы хотите изменить промежуток времени, в течение которого sudo действует без ввода пароля. Этого легко добиться добавив в /etc/sudoers (visudo) примерно следующее:

Defaults:foo timestamp_timeout=20

Здесь sudo для пользователя foo действует без необходимости ввода пароля в течение 20 минут.
Если вы хотите, чтобы sudo всегда требовал ввода пароля, сделайте timestamp_timeout равным 0.

Sudo не спрашивает пароль

sudo без пароля — чудовищная дыра в безопасности, кому попало разрешено делать что угодно. Если вы разрешили это намеренно — срочно верните обратно как было.

Однако, в некоторых случаях sudo внезапно перестаёт требовать пароль само по себе. Если сделать visudo, то можно увидеть примерно такую строку, которую пользователь вроде бы не добавлял:

ALL ALL=(ALL) NOPASSWD:ALL

Скорее всего, эта катастрофичная строка была добавлена при установке программы типа Connect Manager от МТС или Мегафона. В таком случае, её нужно поменять на строку, разрешающую с правами root запускать только этот Connect Manager, примерно так:

юзернейм ALL= NOPASSWD: /путь/к/программе

Есть и другие варианты решения проблемы, небольшое обсуждение здесь.

Ссылки

  • Настройка sudo — топик на форуме о времени действия пароля

[userA@rhel7 ~]$ su -
Password:

visudo command cannot allow to edit /etc/sudoers file simultaneously by just locking the file and if someone tries to access the same it will get a message to try later. 

[root@rhel7 ~]# visudo
visudo: /etc/sudoers busy, try again later

It also checks the syntax of edits and provide basic sanity checks which are very helpful. If it identifies any error, then visudo won’t allow to save the file with edits. 

root    ALL=(ALL:ALL) ALL

This allows root to run any command anywhere.Meaning of this line is –  

username    hosts=(users:groups)    commands
userA   ALL=(ALL:ALL)   ALL

If you wish to use command without password then use PASSWD parameter –  

userA    ALL(ALL:ALL)    NOPASSWD:ALL
userA   ALL=(root)      /usr/bin/systemctl, /usr/sbin/httpd start stop restart
[root@rhel7 ~]# su - userA
Last login: Thu Sep 13 15:01:18 EDT 2018 on pts/0
[userA@rhel7 ~]$ sudo -u root systemctl stop httpd
[sudo] password for userA:
[userA@rhel7 ~]$

Note – We can also use vim with visudo.  

export VISUAL=vim; visudo

Using nano with visudo  

export VISUAL=nano; visudo
%wheel  ALL=(ALL)       ALL
usermod -aG wheel username
tutorial explains how to use the sudo command in linux
  • A system running Linux
  • Access to a command line/terminal window (Activities > Search > Terminal)
  • A user account with sudo or root privileges

Syntax

sudo [command]

Options

sudo can be used with additional options:

  • -h – help; displays syntax and command options
  • -V – version; displays the current version of the sudo application
  • -v – validate; refresh the time limit on sudo without running a command
  • -l – list; lists the user’s privileges, or checks a specific command
  • -k – kill; end the current sudo privileges

Additional options can be found under the -h option.

Options related to the sudo command in Linux.

Granting sudo Privileges

RedHat and CentOS

usermod -aG wheel [username]

Debian and Ubuntu

usermod -aG sudo [username]

Using visudo and the sudoers Group

1. Use the visudo command to edit the configuration file:

sudo visudo
[username] ALL=(ALL:ALL) ALL
Image of the visudo configuration file in Linux.

3. Save and exit the file.

Here’s a breakdown of the granted sudo privileges:

[username] [any-hostname]=([run-as-username]:[run-as-groupname]) [commands-allowed]

Examples of sudo in Linux

Basic Sudo Usage

apt-get update

2. You should see an error message. You do not have the necessary permissions to run the command.

example of an action in Linux that requires elevated permissions

3. Try the same command with sudo:

sudo apt-get update

4. Type your password when prompted. The system executes the command and updates the repositories.

system updating the official repositories when sudo invoked

Run Command as a Different User

whoami
sudo -u [different_username] whoami
Using the sudo -u command to run a command as another user

Switch to Root User

sudo bash

Your command line should change to:

root@hostname:/home/[username]
Using the sudo bash command to switch root user

Execute Previous Commands with sudo

The Linux command line keeps a record of previously executed commands. These records can be accessed by pressing the up arrow. To repeat the last command with elevated privileges, use:

sudo !!
sudo !6

This example repeats the 6th entry in history with the sudo command.

To learn about how to efficiently use history command, check out our article on sudo history command with examples.

Run Multiple Commands in One Line

String multiple commands together, separated by a semicolon:

sudo ls; whoami; hostname
Running multiple sudo commands.

Add a String of Text to an Existing File

echo ‘string-of-text’ | sudo tee -a [path_to_file]
echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Invoking the sudo command to add the Nginx repository

Note: This would add the Nginx software repositories to your system.

You should now understand the sudo command, and how to use it. Next, learn the difference between the sudo and su command.

Note: Linux Sudo Command tutorials also available for:

Creating a Debian Sudo User

Step 1: Log in as the Root User

ssh root@ip_address

Replace ip_address with the IP address of your server.

Step 2: Add a New User in Debian

adduser username
adduser sudo_user

The output looks like this:

Remember that setting a strong password is extremely important for accounts with sudo access.

entering the password for unix

Step 3: Add User to the Sudo Group

usermod -aG sudo username
  • usermod is the tool that modifies a user account.
  • -aG is the option that tells the command to add the user to a specific group. The -a option adds a user to the group without removing it from current groups. The -G option states the group where to add the user. In this case, these two options always go together.
  • sudo is the group we append to the above options. In this case, it is sudo, but it can be any other group.
  • username is the name of the user account you want to add to the sudo group.
getent group sudo
output checking is user was added to sudo group

Verify Sudo Access in Debian

su - username

Using Sudo

To run a command with root access, type in sudo and enter the desired command.

For example, to view details for the root directory, run the ls tool as:

sudo ls -la /root

The sudo command is the preferred means to handle elevated permissions. In supported versions of Ubuntu, using the sudo command will grant elevated permissions for 15 minutes.

  • A system running a supported version of Ubuntu
  • Access to a root user account or another account with sudo privileges
  • Access to a terminal window/command line (CtrlAltT)

Note: Linux Sudo Command tutorials also available for CentOS and Debian.

Step 1: Create New User

adduser newuser
sudo adduser newuser

Step 2: Add User to Sudo Group

In a terminal, enter the command:

usermod -aG sudo newuser
sudo usermod -aG sudo newuser

Step 3: Verify User Belongs to Sudo Group

groups newuser

Step 4: Verify Sudo Access

su - newuser
ls /home

However, some commands or locations require elevated privileges. If you try to list the contents of the /root directory, you’ll get an access denied error: ls /root

The command can be executed with:

sudo ls /root

The system will prompt for your password. Use the same password you set in Step 1. You should now see the contents of the /root directory.

Оцените статью
Master Hi-technology
Добавить комментарий