← Linux: инструменты
11 мин · просто · Урок 1 из 4

Пользователи, группы и sudo

Как устроены пользователи и группы в Linux, где они хранятся, и как sudo даёт точечные права без раздачи root.

Пользователи и их id

В уроке про права мы видели, что доступ к файлу определяется по числовому uid. Этот uid принадлежит пользователю. У каждого пользователя есть имя, числовой uid, основная группа, домашний каталог и shell. Себя показывает id, всех пользователей хранит файл /etc/passwd:

$ id
uid=1000(deploy) gid=1000(deploy) groups=1000(deploy),27(sudo)

$ grep deploy /etc/passwd
deploy:x:1000:1000:Deploy User:/home/deploy:/bin/bash

Поля /etc/passwd: имя, x (пароль лежит отдельно), uid, gid, описание, домашний каталог, shell. x означает, что хеш пароля не здесь, а в /etc/shadow, который читает только root.

Системные и обычные пользователи

Пользователи делятся по uid. 0 это root, всемогущий. Малые uid (обычно до 1000) — системные пользователи под сервисы: nginx работает под www-data, postgres под postgres. Они нужны, чтобы сервис не работал под root, как мы видели в уроке про Dockerfile. Обычные люди получают uid от 1000.

Создать и удалить пользователя:

useradd -m -s /bin/bash alice   # -m создаёт домашний каталог
passwd alice                    # задать пароль
userdel -r alice                # -r удаляет и домашний каталог

Группы

Группа объединяет пользователей, чтобы давать права сразу нескольким. Файл доступа из урока про права смотрит на группу владельца. У пользователя есть одна основная группа и сколько угодно дополнительных.

groups alice           # в каких группах состоит
usermod -aG docker alice   # добавить в группу docker (-a чтобы не стереть остальные)

Флаг -a (append) важен: usermod -G docker alice без -a заменит все группы пользователя на одну docker, выкинув его из остальных. Добавление в группу docker или sudo даёт расширенные возможности, поэтому к нему относятся как к выдаче прав.

sudo: точечный root

Раздавать пароль root всем плохо. sudo позволяет обычному пользователю выполнять команды от имени root, не зная его пароля, и только если ему это разрешено. Кто что может, описано в /etc/sudoers (правят через visudo).

$ sudo systemctl restart nginx
[sudo] password for deploy:     # вводит свой пароль, не root

Членство в группе sudo (или wheel на RHEL) обычно даёт право выполнять любые команды через sudo. sudo ещё и логирует, кто что запускал от root, что важно для разбора инцидентов. Это пример принципа наименьших привилегий: давать ровно нужные права, а не root целиком.

Что важно запомнить

Пользователь — это имя плюс uid, основная группа, домашний каталог и shell; всё это в /etc/passwd, а хеши паролей отдельно в /etc/shadow. Сервисы работают под системными пользователями, не под root.

Группы дают права сразу нескольким; в группу добавляют через usermod -aG именно с -a, иначе сотрёшь остальные. Членство в sudo/docker это выдача прав.

sudo даёт точечный root по правилам из /etc/sudoers, под своим паролем и с логированием. Это принцип наименьших привилегий на практике.

В следующем уроке разберём сеть на самом хосте: ip, ss и маршруты.

Прошли материал до конца? Отметьте урок пройденным.