Sysadminium
В этой статье научимся устанавливать, настраивать и использовать утилиту sudo для выполнения административных действий в Linux.
Настройка и использование sudo в Linux
В прошлых статьях этого курса мы говорили про разницу между Ubuntu и Debian в том, что по умолчанию в:
- Ubuntu — нельзя переключиться на пользователя root, зато установлена утилита sudo и административные действия можно выполнять используя эту утилиту таким образом:
- Debian — root пользователь активен, и для выполнения административных действий нужно на него переключиться, а утилита sudo не установлена:
Пришло время поближе познакомиться с утилитой sudo в Linux. В Ubuntu она уже установлена а в Debian её нужно установить таким образом:
alex@deb:~$ su - Пароль: root@deb:~# apt install sudo
Основным конфигурационным файлом для этой утилиты является файл /etc/sudoers, посмотрим на него:
root@deb:~# cat /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # 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
В самом верху говориться о том, что редактировать вручную этот файл не нужно, для редактирования нужно использовать утилиту visudo. Рассмотрим остальные не закомментированные строки:
- Defaults env_reset — сбрасывает все локальные переменные пользователя в оболочке sudo. Это повышает безопасность работы sudo в linux. Так как оболочка использует только стандартные системные переменные. А те переменные, которые создал пользователь, использоваться не будут.
- Defaults mail_badpass — говорит системе отправлять уведомления о неудачных попытках ввода пароля sudo для настроенного пользователя mailto. По умолчанию это учетная запись root. То есть, если вы настроите почтовую систему для root пользователя, то будете на почту получать оповещения о неудачных попытках ввода пароля для sudo.
- Defaults secure_path=»/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin» — здесь перечислены пути к каталогам, в которых будут искаться программы при выполнении команд с помощью sudo. То есть, вы вводите команду adduser, и файл программы adduser ищется в этих каталогах. А находится он здесь /usr/sbin/adduser.
- root ALL=(ALL:ALL) ALL — в этой строке разберём по порядку каждое слово:
- root — правило для пользователя root;
- ALL = — применяется ко всем хостам;
- (ALL:ALL) — root может выполнять команды от лица всех пользователей и групп;
- ALL — правило работает для всех команд.
Даём права на sudo включая пользователя в группу sudo
И так, по умолчанию, выполнять все команды с помощью sudo могут пользователи группы sudo. Получается, нам остаётся только поместить своего пользователя в эту группу:
root@deb:~# adduser alex sudo Добавляется пользователь «alex» в группу «sudo» . Добавление пользователя alex в группу sudo Готово.
Чтобы изменения применились нужно перезайти под пользователем alex. Проверим работу sudo:
root@deb:~# su alex alex@deb:/root$ sudo useradd user3 Мы полагаем, что ваш системный администратор изложил вам основы безопасности. Как правило, всё сводится к трём следующим правилам: №1) Уважайте частную жизнь других. №2) Думайте, прежде что-то вводить. №3) С большой властью приходит большая ответственность. [sudo] пароль для alex: alex@deb:/root$ sudo userdel user3
Как видите, система нас предупредила что с помощью sudo мы выполняем команды от имени администратора и нужно быть осторожными. Такое предупреждение даётся пользователю при первом запуске sudo, а в дальнейшем вы не увидите его.
Работая с sudo мы вводим пароль от своего пользователя (alex), а не от root. В примере выше я просто создал и удалил пользователя user3, чтобы продемонстрировать выполнение административных действий.
Даём права на sudo редактируя конфигурационный файл
Дать пользователю права на sudo можно не только включив его в группу sudo. Также вы можете отредактировать конфигурационный файл /etc/sudoers с помощью специальной утилиты visudo:
После чего вы начнете редактировать конфигурационный файл. Например, добавим следующую строку:
У нас должна получиться такая настройка:
Рядом с root пользователем создаём правило для пользователя alex. Чтобы сохранить файл и выйти из редактора нажмите Ctrl+x, а затем «y«.
Утилита visudo работает в режиме nano. Но в отличие от редактирования напрямую с помощью nano, утилита visudo открывает копию файла /etc/sudoers и перед сохранение файла проверяет его на корректность.
Теперь удалим пользователя alex из группы sudo:
alex@deb:/root$ sudo deluser alex sudo Удаляется пользователь «alex» из группы «sudo» . Готово.
Перезайдем в систему под alex, чтобы применились изменения:
alex@deb:/root$ exit exit root@deb:~# su - alex alex@deb:~$
И проверим, не потеряли ли мы права на sudo:
alex@deb:~$ sudo useradd user3 alex@deb:~$ sudo deluser user3 Удаляется пользователь «user3» . Предупреждение: в группе «user3» нет больше членов. Готово. alex@deb:~$
Тонкая настройка прав
У меня в системе остались пользователи user1 и user2. Дадим им право обновлять систему, но другие административные действия они не должны выполнять.
И так, выполните команду sudo visudo , чтобы начать редактирование конфигурационного файла.
Объедините пользователей одним псевдонимом GR_APT:
User_Alias GR_APT = user1, user2
В системах Debian и Ubuntu обновлять систему можно командами apt и apt-get (обновление системы мы будем изучать позже в этом курсе). Обе команды нужно объединить в одну команду-псевдоним APDATE:
Cmnd_Alias APDATE = /usr/bin/apt, /usr/bin/apt-get
И осталось разрешить GR_APT выполнять команды APDATE:
Вот так должен выглядеть ваш файл после всех изменений:
Проверим! Переключимся на пользователя user1 и попробуем выполнить обновление с помощью команды sudo apt update :
alex@deb:~$ su - user1 Пароль: user1@deb:~$ sudo apt update Пол:1 http://security.debian.org/debian-security bullseye-security InRelease [44,1 kB] Сущ:2 http://deb.debian.org/debian bullseye InRelease Сущ:3 http://deb.debian.org/debian bullseye-updates InRelease Пол:4 http://security.debian.org/debian-security bullseye-security/main Sources [94,1 kB] Получено 138 kB за 1с (246 kB/s) Чтение списков пакетов… Готово Построение дерева зависимостей… Готово Чтение информации о состоянии… Готово Может быть обновлено 12 пакетов. Запустите «apt list --upgradable» для их показа.
А теперь попробуем переключиться на root пользователя выполнив su:
user1@deb:~$ sudo su - Sorry, user user1 is not allowed to execute '/usr/bin/su -' as root on deb.
Как видим, выполнять команду su пользователю user1 используя sudo нельзя.
Создать нового пользователя тоже не получится:
user1@deb:~$ sudo useradd user3 Sorry, user user1 is not allowed to execute '/usr/sbin/useradd user3' as root on deb.
Получается мы дали пользователям user1 и user2 право использовать утилиту sudo, но только для команд apt и apt-get, чтобы обновлять Linux систему.
А ещё, редактируя конфигурационный файл /etc/sudoers, вы можете позволить пользователю выполнять команды под sudo без запроса своего пароля. Для этого перед разрешённой командой нужно указать NOPASSWD: :
alex ALL=(ALL:ALL) NOPASSWD: ALL
Дополнительные опции утилиты sudo
По умолчанию, утилита sudo выполняет команды от пользователя root, но с помощью опций -u или -g можно выполнить команду от имени другого пользователя или группы, например:
alex@deb:~$ sudo -u user1 id uid=1003(user1) gid=1005(user1) группы=1005(user1) alex@deb:~$ sudo -g user1 id uid=1000(alex) gid=1005(user1) группы=1005(user1),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),1000(alex)
Как видите, вначале мы выполнили команду от имени пользователя user1, а затем от имени группы user1. Во втором случае, пользователь у нас остался alex, а первичная группа стала user1.
Ещё одной полезной опцией является опция -i. Она позволяет, как бы, переключиться на пользователя. При этом нужно указать пользователя с помощью опции -u, без этого мы переключимся на root пользователя:
alex@deb:~$ sudo -u user1 -i user1@deb:~$ user1@deb:~$ exit выход alex@deb:~$ sudo -i root@deb:~# root@deb:~# exit выход alex@deb:~$
Команда chown Linux
Основа философии Linux — все объекты операционной системы — это файлы, для предоставления доступа к тем или иным возможностям системы мы просто даем доступ пользователю к нужным файлам или убираем. Я более подробно рассказывал обо всех правах в статье права доступа к файлам в Linux, здесь же скажу только что у каждого файла есть три группы прав: для владельца, группы и всех остальных.
При создании файла ему тот пользователь, от имени которого он был создан становится его владельцем, а группой устанавливается основная группа владельца. Но владельца файла и группу можно менять, для этого используются команды chown и chgrp. В этой статье будет рассмотрена команда chown linux, а также основные примеры её использования.
Команда chown Linux
1. Синтаксис и опции
Синтаксис chown, как и других подобных команд linux очень прост:
$ chown пользователь опции /путь/к/файлу
В поле пользователь надо указать пользователя, которому мы хотим передать файл. Также можно указать через двоеточие группу, например, пользователь:группа. Тогда изменится не только пользователь, но и группа. Вот основные опции, которые могут вам понадобиться:
- -c, —changes — подробный вывод всех выполняемых изменений;
- -f, —silent, —quiet — минимум информации, скрыть сообщения об ошибках;
- —dereference — изменять права для файла к которому ведет символическая ссылка вместо самой ссылки (поведение по умолчанию);
- -h, —no-dereference — изменять права символических ссылок и не трогать файлы, к которым они ведут;
- —from — изменять пользователя только для тех файлов, владельцем которых является указанный пользователь и группа;
- -R, —recursive — рекурсивная обработка всех подкаталогов;
- -H — если передана символическая ссылка на директорию — перейти по ней;
- -L — переходить по всем символическим ссылкам на директории;
- -P — не переходить по символическим ссылкам на директории (по умолчанию).
Утилита имеет ещё несколько опций, но это самые основные и то большинство из них вам не понадобится. А теперь давайте посмотрим как пользоваться chown.
2. Использование chown
Например, у нас есть несколько папок dir и их владелец пользователь sergiy:
Давайте изменим владельца папки dir1 на root:
Если вы хотите поменять сразу владельца и группу каталога или файла запишите их через двоеточие, например, изменим пользователя и группу для каталога dir2 на root:
Если вы хотите чтобы изменения применялись не только к этому каталогу, но и ко всем его подкаталогам, добавьте опцию -R:
Дальше давайте изменим группу и владельца на www-data только для тех каталогов и файлов, у которых владелец и группа root в каталоге /dir3:
chown —from=root:root www-data:www-data -cR ./
Для обращения к текущему каталогу используйте путь ./. Мы его использовали и выше. Далее указываем нужную группу с помощью опции —from и просим утилиту выводить изменения, которые она делает в файловой системе с помощью опции -c.
Выводы
Команда chown очень простая и позволяет только менять владельца и группу. Если вы хотите более подробно настроить права для владельца, группы и всех остальных, вам понадобится команда chmod. Права — довольно частая проблема при настройке работы различных программ, знание двух этих команд плюс ls и namei может помочь исправить много ошибок.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.