Linux: пользователи, группы и sudo
Создание, изменение и удаление учётных записей и групп, права администратора и контроль сессий
Создание пользователя
| Команда | Вариант | Что делает |
| useradd | useradd ivan | Создаёт пользователя без домашней папки (в Debian/Ubuntu без -m папка не появится). |
| useradd -m | useradd -m ivan | Создаёт пользователя и его домашнюю папку /home/ivan. |
| useradd -m -s | useradd -m -s /bin/bash ivan | Задаёт оболочку входа. |
| useradd -c | useradd -m -c "Иван Петров" ivan | Добавляет комментарий (полное имя) в /etc/passwd. |
| useradd -G | useradd -m -G sudo,docker ivan | Сразу добавляет в дополнительные группы (через запятую, без пробелов). |
| useradd -g | useradd -m -g developers ivan | Задаёт основную группу (она должна существовать). |
| useradd -u | useradd -m -u 2001 ivan | Задаёт UID вручную (полезно для согласованности между серверами). |
| useradd -d | useradd -m -d /srv/ivan ivan | Указывает нестандартную домашнюю папку. |
| useradd -e | useradd -m -e 2027-01-01 ivan | Учётная запись истекает в указанную дату. |
| useradd -r | useradd -r -s /usr/sbin/nologin svc_app | Системный пользователь для службы: без входа и без домашней папки по умолчанию. |
| adduser | adduser ivan | Интерактивная обёртка (Debian/Ubuntu): сама создаёт папку и спрашивает пароль. |
Пароли и блокировка
| Команда | Вариант | Что делает |
| passwd | passwd ivan | Интерактивно задаёт пароль. |
| passwd | passwd | Меняет пароль текущего пользователя. |
| passwd -l | passwd -l ivan | Блокирует вход (добавляет ! перед хэшем). |
| passwd -u | passwd -u ivan | Снимает блокировку. |
| passwd -e | passwd -e ivan | Требует сменить пароль при следующем входе. |
| passwd -S | passwd -S ivan | Показывает состояние: P (есть пароль), L (заблокирован), NP (без пароля). |
| chpasswd | echo "ivan:NewPass" | chpasswd | Задаёт пароль из стандартного ввода (пароль останется в истории оболочки, лучше через файл). |
| chage -l | chage -l ivan | Показывает сроки действия пароля. |
| chage -M | chage -M 90 ivan | Максимальный срок пароля: 90 дней. |
| chage -E | chage -E 2027-01-01 ivan | Дата окончания учётной записи. |
| chage -d 0 | chage -d 0 ivan | Принудительная смена пароля при следующем входе. |
Изменение пользователя
| Команда | Вариант | Что делает |
| usermod -aG | usermod -aG docker ivan | Добавляет в группу docker, сохраняя остальные группы. Флаг -a обязателен. |
| usermod -G | usermod -G docker ivan | Заменяет все дополнительные группы на указанные. Частая ошибка: все прежние группы пропадают. |
| usermod -g | usermod -g devops ivan | Меняет основную группу. |
| usermod -s | usermod -s /bin/zsh ivan | Меняет оболочку. |
| usermod -l | usermod -l ivan.petrov ivan | Переименовывает логин (домашнюю папку переименуйте отдельно, если нужно). |
| usermod -d -m | usermod -d /srv/ivan -m ivan | Меняет домашнюю папку и переносит содержимое. |
| usermod -L / -U | usermod -L ivan | Блокирует или разблокирует учётную запись. |
| usermod -e | usermod -e 2027-06-30 ivan | Задаёт дату истечения учётной записи. |
| usermod -c | usermod -c "Иван, бухгалтерия" ivan | Меняет комментарий. |
Удаление пользователя
| Команда | Вариант | Что делает |
| userdel | userdel ivan | Удаляет учётную запись, домашняя папка остаётся. |
| userdel -r | userdel -r ivan | Удаляет учётную запись вместе с домашней папкой и почтовым ящиком. |
| userdel -f | userdel -f ivan | Удаляет, даже если пользователь сейчас в системе (процессы не завершаются автоматически). |
| deluser | deluser --remove-home ivan | Обёртка в Debian/Ubuntu с той же логикой. |
Группы
| Команда | Вариант | Что делает |
| groupadd | groupadd developers | Создаёт группу. |
| groupadd -g | groupadd -g 3000 devops | Создаёт группу с заданным GID. |
| groupadd -r | groupadd -r svc_group | Системная группа. |
| groupmod -n | groupmod -n devs developers | Переименовывает группу. |
| groupmod -g | groupmod -g 3100 devs | Меняет GID. |
| groupdel | groupdel developers | Удаляет группу (нельзя, если это основная группа существующего пользователя). |
| gpasswd -a | gpasswd -a ivan developers | Добавляет пользователя в группу. |
| gpasswd -d | gpasswd -d ivan developers | Убирает пользователя из группы. |
| gpasswd -M | gpasswd -M ivan,petr,anna developers | Задаёт полный список участников группы. |
| gpasswd -A | gpasswd -A ivan developers | Назначает администратора группы (может управлять её составом). |
| gpasswd | gpasswd developers | Задаёт пароль группы (используется редко). |
| newgrp | newgrp docker | Открывает оболочку с новой основной группой без перелогина. |
Просмотр и поиск
| Команда | Вариант | Что делает |
| id | id ivan | UID, GID и все группы пользователя. |
| id -gn | id -gn ivan | Имя основной группы. |
| id -u | id -u | Числовой UID текущего пользователя (0 — root). |
| groups | groups ivan | Список групп пользователя. |
| whoami | whoami | Имя текущего пользователя. |
| getent | getent group developers | Читает базу учётных записей, в том числе из LDAP и AD. |
| getent | getent passwd ivan | Данные пользователя из всех источников NSS. |
| grep | grep ivan /etc/passwd | Поиск в файлах учётных записей напрямую. |
| lid | lid -g developers | Пользователи группы (пакет libuser). |
Переключение пользователя и sudo
| Команда | Вариант | Что делает |
| su - | su - ivan | Переходит к пользователю с его окружением (дефис обязателен). |
| su -c | su -c "systemctl restart nginx" root | Выполняет одну команду от имени другого пользователя. |
| sudo | sudo apt update | Выполняет команду от root по правилам sudoers. |
| sudo -i | sudo -i | Оболочка root с его окружением. |
| sudo -u | sudo -u postgres psql | Выполнить от имени произвольного пользователя. |
| sudo -l | sudo -l | Какие команды разрешены текущему пользователю. |
| sudo -l -U | sudo -l -U ivan | То же для другого пользователя (требует прав). |
| sudo -k | sudo -k | Сбрасывает кеш пароля sudo. |
| visudo | visudo -f /etc/sudoers.d/ivan | Безопасное редактирование sudoers с проверкой синтаксиса. |
Пример правила в /etc/sudoers.d/ivan
# Разрешить перезапуск только одной службы без пароля
ivan ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
# Разрешить группе devops полный доступ через sudo
%devops ALL=(ALL:ALL) ALL
Сессии и журналы входа
| Команда | Вариант | Что делает |
| who | who -a | Кто сейчас в системе, с подробностями. |
| w | w | Кто в системе и что делает (нагрузка, команда). |
| last | last -n 20 ivan | История входов конкретного пользователя. |
| lastb | sudo lastb -n 20 | Неудачные попытки входа (нужны права root). |
| lastlog | lastlog -u ivan | Время последнего входа каждого пользователя. |
| pkill | pkill -KILL -u ivan | Завершить все процессы пользователя (например, перед удалением). |
Где хранятся данные
/etc/passwd учётные записи (имя, UID, GID, комментарий, домашняя папка, оболочка)
/etc/shadow хэши паролей и сроки действия (доступ только root)
/etc/group группы и их участники
/etc/gshadow пароли групп и администраторы групп
/etc/sudoers правила sudo (править только через visudo)
/etc/sudoers.d/ дополнительные правила sudo, отдельные файлы
Не используйте usermod -G без -a для уже существующих пользователей: список дополнительных групп будет заменён целиком. Всегда используйте usermod -aG. А правила sudo редактируйте только через visudo: ошибка в sudoers может закрыть доступ к системе.
Для доступа к сервисам удобнее создавать группы по ролям (например, www-data, deploy) и добавлять в них пользователей, а не выдавать права каждому файлу отдельно.