Linux notes #7 — su и sudo

Начнем с создания еще одного пользователя

sudo useradd linux_user

Зададим ему пароль

sudo passwd linux_user

Попробуем перейти в директорию этого пользователя

[sysadmin@almalinux ~]$ cd /home/linux_user/
bash: cd: /home/linux_user/: Permission denied

Видим ошибку. Залогинимся под этим пользователем и зайдем снова

su linux_user

[linux_user@almalinux sysadmin]$ cd /home/linux_user/
[linux_user@almalinux ~]$ pwd
/home/linux_user

Команда su позволяет переключить текущего пользователя на другого
Если написать su без указания имени пользователя, нас переключит на root (потребуется ввести пароль от рута). Если указать после su имя пользователя, то мы переключимся на него (нужно знать пароль от его учетной записи)

[sysadmin@almalinux linux_user]$ su
Password:
[root@almalinux linux_user]# su sysadmin
[sysadmin@almalinux linux_user]$ su linux_user
Password:
[linux_user@almalinux ~]$

С помощью su можно выполнять команды от имени другого пользователя. Если не указать имя пользователя, то команда выполнится от root

[linux_user@almalinux ~]$ su -c "nano /etc/ssh/sshd_config"

Важно отметить, что su и sudo — не одно и то же. Команда su переключает на root и предоставляет полный доступ к системе, а sudo позволяет выполнять определенные команды с повышенными привилегиями.

Ошибка ниже возникает тогда, когда пользователь не имеет прав на выполнение команд с повышенными привилегиями через sudo. Пользователь sysadmin при установке системы был отмечен как администратор, соответственно команда выполнится.

[linux_user@almalinux ~]$ sudo nano /etc/ssh/sshd_config
[sudo] password for linux_user:
linux_user is not in the sudoers file.  This incident will be reported.
[linux_user@almalinux ~]$ su sysadmin
Password:
[sysadmin@almalinux linux_user]$ sudo nano /etc/ssh/sshd_config
[sudo] password for sysadmin:

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

Для редактирования файла выполним 

sudo visudo

Обратим внимание на 2 строчки

root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL

Первая говорит о том, что у root есть все права на систему
Вторая о том, что у группы wheel и соответственно пользователей, входящих в нее, тоже есть все права на систему.
Чтобы узнать в какой группе состоит текущий пользователь или другой, выполните

[sysadmin@almalinux linux_user]$ groups
sysadmin wheel
[sysadmin@almalinux linux_user]$ groups linux_user
linux_user : linux_user
[sysadmin@almalinux linux_user]$ groups root
root : root

Пользователь sysadmin состоит в группе wheel соответственно имеет все права на систему. Группа wheel в разных дистрибутивах может именоваться по-разному.

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