Sudo
su смена пользователя на root
Чтобы войти в учётную запись root, просто введите в консоли su. После того, как вы введёте пароль, будет создан сеанс суперпользователя.
su cat journal.log exit
Запуск команды от пользователя root
Если вам нужно выполнить какое-то разовое действие с привилегиями суперпользователя, не нужно создавать новую оболочку. Вместо этого воспользуйтесь командой sudo. Но в отличие от su, вам нужно будет ввести пароль учётной записи текущего пользователя, а не root. А также у вас должны быть права для запуска sudo.
Например, вам нужно прочитать лог-файл, который закрыт для обычных пользователей. Тогда просто добавьте перед командой чтения слово sudo:
sudo cat journal.log
Присвоение привилегий sudo
По умолчанию пользователи создаются в системе без доступа к sudo. Это делается вручную с помощью добавления учётной записи к одноимённой группе:
usermod -aG **sudo** username
Или:
gpasswd -a username sudo
В CentOS группа с полными привилегиями администратора называется wheel, значит вы можете использовать примеры выше, заменив sudo на wheel.
Настройка sudo
Настроить команду sudo можно в файле /etc/sudoers с помощью команды
visudo
Она проверит ошибки перед сохранением.
Выбрать редактор по умолчанию можно
sudo update-alternatives --config editor
В CentOS задать редактор по умолчанию ещё проще — в ~/.bashrc нужно добавить строку:
export EDITOR=`which [editor]`
где [editor] — название программы-редактора.
Изменение файла sudoers
Для работы с файлом sudoers у вас уже должен быть доступ к учётной записи суперпользователя. Откройте файл с помощью программы visudo:
sudo visudo
Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Defaults use_pty # This preserves proxy settings from user environments of root # equivalent users (group sudo) #Defaults:%sudo env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy" # This allows running arbitrary commands, but so does ALL, and it means # different sudoers have their choice of editor respected. #Defaults:%sudo env_keep += "EDITOR" # Completely harmless preservation of a user preference. #Defaults:%sudo env_keep += "GREP_COLOR" # While you shouldn't normally run git as root, you need to with etckeeper #Defaults:%sudo env_keep += "GIT_AUTHOR_* GIT_COMMITTER_*" # Per-user preferences; root won't have sensible values for them. #Defaults:%sudo env_keep += "EMAIL DEBEMAIL DEBFULLNAME" # "sudo scp" or "sudo rsync" should be able to use your SSH agent. #Defaults:%sudo env_keep += "SSH_AGENT_PID SSH_AUTH_SOCK" # Ditto for GPG agent #Defaults:%sudo env_keep += "GPG_AGENT_INFO" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "@include" directives: @includedir /etc/sudoers.d
Настройки по умолчанию
env_reset | удаляет переменные пользователя, которые могут создаваться в системе и потенциально повлиять на работу в режиме суперпользователя. |
mail_badpass | указывает, что система будет отправлять на почту, указанную в настройках root, неудачные попытки получить неограниченные привилегии. |
secure_path | определяет путь для операций sudo. Иными словами, она содержит каталоги, в которых ОС будет искать приложения. Переопределяя пользовательские настройки, мы избегаем выполнения потенциально вредоносных программ. |
Вы можете добавлять настройки по умолчанию с помощью псевдонима Default. Например, если у вас сложный пароль, вы можете расширить количество попыток ввода с трёх (по умолчанию) до 5.
Defaults passwd_tries=5
Sudo сохраняет данные сеанса в течение 5 минут после первой аутентификации. Это сделано, чтобы вам не нужно было каждый раз при выполнении программ вводить пароль. Вы можете сбросить форсировать запрос пароля с помощью флага -k при выполнении команды sudo. Если нужно вводить пароль каждый раз, установите значение этого таймаута 0.
Defaults timestamp_timeout=0
Чтобы обезопасить систему от перебора пароля sudo, добавьте таймаут между попытками ввода неверного пароля, а также записывайте в журнал все попытки подключения к sudo.
Defaults passwd_timeout=5 Defaults logfile=/var/log/sudo.journal.log
Пользовательские привилегии
Четвёртая строка определяет привилегии sudo для root. Она содержит имя пользователя, список хостов, пользователей, групп и команд.
root ALL=(ALL:ALL) ALL
В начале стоит имя пользователя, затем указываются его привилегии. Первое ALL означает, что правило применяется ко всем хостам и IP-адресам. Второе ALL указывает на то, что пользователь может запускать команды от имени любого пользователя, третье — от имени любой группы. Четвёртое ALL применяет эти правила ко всем командам.
То есть эта строка означает, что пользователь root может выполнять любые команды от лица всех групп и пользователей после ввода sudo.
Пятая и шестая строки определяют привилегии для групп admin и sudo (на это указывает символ процента перед названием). По умолчанию группа admin может выполнять любые команды от имени любого пользователя, а sudo — любые команды от лица любой группы.
Добавим новые полномочия для пользователя timeweb-backup, которому нужно выполнять команду монтирования директории root/backup.d. Для этого добавим следующую строку:
timeweb-backup ALL=(root) /bin/mount /root/backup.d
Теперь пользователь timeweb-backup сможет запустить команду sudo mount /root/backup.d со своим паролем, а не с паролем пользователя root.
Настройка пользовательских привилегий позволяет очень гибко настраивать систему. Например, вы можете разрешать выполнение определённых команд без пароля с помощью флага NOPASSWD или вообще ограничить пользователя одной программой.
Подключение других файлов
Строка, которая начинается с #includedir означает подключение конфигурации из других источников. В данном случае указано, что нужно применить правила из файлов внутри каталога /etc/sudoers.d, при этом подключается любой файл, если он не содержит в названии точку или не заканчивается тильдой (~).
Подключение файлов из этого каталога нужно для приложений, которые после установки изменяют привилегии sudo. Все файлы в одном каталоге помогают определить какие права соответствуют учётным записям, а также работать с ними, не редактируя основной файл sudoers.
Так как все файлы из этого каталога подключаются в основной файл, редактировать их нужно с помощью visudo. Для того, чтобы открыть отдельный файл, добавьте флаг -f:
visudo -f /etc/sudoers.d/config_file
Можно назначить права, чтобы пользователь не вводил свой пароль при использовании sudo
myuser ALL=(ALL) NOPASSWD:ALL
Псевдонимы
Чтобы упростить работу с конфигурацией файла sudoers, разработчики предусмотрели псевдонимы. Они позволяют создавать списки пользователей, флагов и команд и группировать их. Они делятся на четыре типа:
User_Alias | Псевдоним пользователей, которые будут использовать sudo. |
Runas_Alias | Псевдоним пользователей, от имени которых команды будут выполняться. |
Host_Alias | Псевдоним хоста. Представляет собой список IP-адресов или хостов, с которых выполняются программы. |
Cmnd_Alias | Псевдоним команды. |
Например, отредактируем файл sudoers так, чтобы различные пользователи могли запускать скрипты резервирования системы от пользователя root.
User_Alias Users = timeweb-backup,remote,hal9000 Host_Alias REMOTE = timeweb.cloud Cmd_Alias Cmds = /root/backup
После создания псевдонима применяем правило:
Users Hosts = (root) Cmds
Теперь пользователи timeweb-backup, remote, hal9000 смогут запускать команды бэкапа от имени пользователя root на хосте REMOTE.
Представим, что этим пользователям должна быть доступна команда монтирования, при этом мы можем пренебречь вводом пароля:
Users ALL = (root) NOPASSWD: /bin/mount
…а размонтировать уже нельзя:
Users ALL = (root) NOEXEC: /bin/umount
В нашей системе мы можем разрешить всем пользователям группы admin обновлять пакеты Ubuntu, но без ввода пароля:
Cmnd_Alias APT_UPDATE = /usr/bin/apt-get update,/usr/bin/apt-get upgrade ... %admin ALL=(ALL) NOPASSWD: APT_UPDATE
Псевдонимы помогут эффективно делить пользователей на группы и выдавать им права (или забирать их с помощью флага NOEXEC) на выполнение только определённых команд.
В случае конфликта правил в приоритете более поздние. Так что располагайте в начале файла более общие установки, чем конкретнее правило, тем ниже его стоит расположить.
Флаги sudo
Вы можете запускать команды sudo от имени тех пользователей или групп, которых задали в файле sudoers. Используйте для этого флаги -u и -g соответственно.
Чтобы посмотреть привилегии для вашего пользователя, просто используйте команду sudo -l. Вы увидите список всех правил из файла /etc/sudoers. Так вы поймёте, на что именно у вас есть разрешение в системе.