· 15 мин чтения

Управление пользователями и правами в Linux: полный гайд для администратора офисного сервера

Управление пользователями и правами в Linux: полный гайд для администратора офисного сервера

Привет! Я, Семёнов Евгений Сергеевич, директор ITFresh. За плечами — больше пятнадцати лет работы с Linux-серверами. И каких только не было! От крошечных виртуальных машин на одном ядре до настоящих монстров: многопроцессорных Dell Xeon Platinum 8280, которые крутятся в дата-центре МТС с 40G Mellanox. И вот что я понял за эти годы: большинство серьёзных проблем с безопасностью возникают не из-за хитрых хакерских атак. Нет, всё куда проще! Чаще всего это банальные ошибки в управлении учётными записями. Этот гайд — моя личная квинтэссенция многолетней практики. Никакой воды, только суть. Обещаю!

База: файлы /etc/passwd, /etc/shadow, /etc/group

Вся логика пользователей Linux держится на четырёх текстовых файлах. Всего на четырёх! Разберётесь в их структуре — и безопасность вашей системы, считайте, уже в надёжных руках.

Вот как выглядит каждая строка в /etc/passwd:

ivanov:x:1001:1001:Ivan Ivanov,IT-отдел,+74951234567:/home/ivanov:/bin/bash

UID ниже 1000 всегда отданы системным учётным записям. А где же обычные пользователи? Они стартуют с 1000 (так в Debian/Ubuntu) или 1001 (если вы работаете с RHEL).

Создание и удаление пользователей

Вот базовый набор команд, без которого мы и дня не проводим в своей практике:

# Создать пользователя с домашним каталогом и bash
useradd -m -s /bin/bash -c "Ivan Ivanov, Sales" ivanov
passwd ivanov

# То же самое на Debian через adduser
adduser ivanov

# Добавить в дополнительные группы
usermod -aG sudo,docker,sales ivanov

# Сменить оболочку
chsh -s /bin/zsh ivanov

# Заблокировать учётку (но не удалять)
usermod -L ivanov
# Или через passwd
passwd -l ivanov

# Разблокировать
usermod -U ivanov

# Удалить пользователя вместе с домашним каталогом
userdel -r ivanov

Я всегда использую флаг -aG при добавлении в группы — без -a команда заменит все вторичные группы, и пользователь потеряет доступ к критичным ресурсам. Классическая ошибка начинающих админов.

Группы и их роль в политике доступа

Группы — наш незаменимый помощник. Это основной инструмент, чтобы чётко разделить права доступа к файлам, да и ко многим службам. Забудьте навсегда про то, чтобы давать права каждому пользователю по отдельности! Гораздо, гораздо проще создавать группы. Объединяйте людей по отделам, по проектам — как угодно, лишь бы это было логично и удобно.

КомандаЧто делаетПример
groupaddСоздать группуgroupadd -g 2001 sales
groupdelУдалить группуgroupdel sales
gpasswd -aДобавить пользователя в группуgpasswd -a ivanov sales
gpasswd -dУдалить из группыgpasswd -d ivanov sales
newgrpВременно сменить активную группуnewgrp sales
idПоказать UID/GID пользователяid ivanov

Запомните ключевое отличие: у каждого пользователя — только одна первичная группа. Но вторичных групп может быть сколько душе угодно! Все новые файлы, которые он создаст, автоматически наследуют права именно первичной группы.

Права на файлы: chmod, chown, umask

POSIX-модель доступа к файлам? Да это же элементарно! Она работает с тремя категориями — user, group, other — и тремя битами: read, write, execute. Мы задаём эти комбинации двумя способами: либо восьмеричным числом, либо используя символический синтаксис.

# Дать владельцу полный доступ, группе — чтение и исполнение, остальным — ничего
chmod 750 /var/www/intranet

# Изменить владельца и группу рекурсивно
chown -R www-data:www-data /var/www/intranet

# Установить setgid на каталоге — все новые файлы наследуют группу
chmod g+s /srv/share/sales

# Sticky bit — удалять файлы в каталоге может только владелец
chmod +t /tmp

# Маска по умолчанию для новых файлов (022 = 644, 077 = 600)
echo "umask 077" >> /etc/profile

Помните: для каталогов бит execute значит «можно войти в каталог и прочитать список файлов». Без него даже владелец не сможет сделать cd.

POSIX ACL: когда стандартных прав не хватает

Классические права? Они работают отлично, но только для связки «владелец/группа/остальные». А что, если надо дать доступ к конкретному файлу какому-то одному пользователю? При этом вы не хотите трогать ни владельца, ни группу! В такой ситуации выручают списки контроля доступа — или, как мы их зовём, ACL.

# Проверить, смонтирована ли ФС с поддержкой ACL
mount | grep acl
# В /etc/fstab добавить опцию acl, если её нет

# Дать пользователю petrov права rwx на каталог
setfacl -m u:petrov:rwx /srv/share/finance

# Посмотреть ACL
getfacl /srv/share/finance

# Сделать ACL наследуемыми для новых файлов внутри
setfacl -d -m u:petrov:rwx /srv/share/finance

# Удалить ACL-запись
setfacl -x u:petrov /srv/share/finance

На нашей практике ACL просто незаменимы. Возьмём, к примеру, общие папки бухгалтерии: главбух получает полный доступ, его помощники могут только читать, а внешний аудитор на время проверки спокойно получает временный rwx, даже не входя в основную группу. Очень удобно!

sudo: привилегированный доступ без root-пароля

Раздавать пароль root? Нет, это просто ужасная практика! Я всегда, слышите, всегда настаиваю на sudo. Почему? Всё просто: каждая команда логируется, а права можно ограничить до конкретной утилиты. Если что-то пойдёт не так, вы точно будете знать, кто и что сделал. Это же бесценно при расследовании инцидентов!

# Редактирование только через visudo — иначе рискуете сломать синтаксис
visudo

# Примеры правил
# Полный sudo для группы wheel/sudo без пароля
%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

# Только перезапуск nginx пользователю devops
devops  ALL=(root) NOPASSWD: /bin/systemctl restart nginx, /bin/systemctl reload nginx

# Запрет опасных команд
Cmnd_Alias DANGEROUS = /usr/bin/rm -rf /*, /usr/sbin/shutdown, /sbin/reboot
admins  ALL=(ALL) ALL, !DANGEROUS

Правила лучше класть в отдельные файлы в /etc/sudoers.d/ — так проще управлять через Ansible и откатывать изменения.

Кейс: наведение порядка на файловом сервере юридической фирмы

Помню, был март 2026 года. К нам обратилась одна московская юркомпания. У них стоял Ubuntu Server 22.04 на Dell PowerEdge, с рейдом на 8 ТБ, и на нём работали 42 сотрудника из четырёх разных отделов. Главная боль? Сервер жил своей жизнью почти полтора года (целых 14 месяцев!), разрастаясь совершенно хаотично. Представляете: у пятерых учётных записей каким-то чудом оказался UID 0, в группу sudo входило аж 28 человек, а общие папки... да они вообще были с правами 777! Ну и что в итоге? Всего за один день аудита мы нашли конфиденциальные договоры, лежащие прямо в общедоступной шаре. Неудивительно, правда?

За 2 дня мы провели санацию:

Каков результат? В следующие полгода, после того как мы навели порядок, число инцидентов информационной безопасности упало до нуля. Все работы обошлись в 78 000 рублей. Кстати, в эту сумму уже был включён полный бэкап системы. Мало ли что!

SELinux и AppArmor — мандатный контроль доступа

POSIX-права решают базовую задачу: может ли пользователь вообще открыть этот файл? А вот MAC, Mandatory Access Control, копает куда глубже. Он спрашивает: «А имеет ли право процесс, который запустил этот пользователь, открыть файл именно в этом контексте?» На CentOS/RHEL, вы знаете, это SELinux. А на Ubuntu/Debian — наш добрый друг AppArmor.

# Состояние SELinux
getenforce
sestatus

# Переключить в permissive (только логирование) на время отладки
setenforce 0

# Посмотреть контекст файла
ls -Z /var/www/html/index.html

# Восстановить стандартные контексты
restorecon -Rv /var/www/html

# Открыть нестандартный порт для httpd
semanage port -a -t http_port_t -p tcp 8081

# На AppArmor — посмотреть и отключить профиль
aa-status
aa-disable /usr/sbin/nginx

Аудит и мониторинг учётных записей

Какой смысл настраивать права, если вы в принципе не понимаете, что творится на сервере? Вот минимальный набор, без которого о мониторинге можно забыть:

# Найти пользователей с UID=0 кроме root
awk -F: '$3==0 {print $1}' /etc/passwd

# Учётки без пароля
awk -F: '$2=="" {print $1}' /etc/shadow

# Пользователи с shell, но никогда не входившие
lastlog -b 90 | grep "Never"

Настройка и аудит Linux-серверов под ключ

Я лично провожу санацию учётных записей и политик доступа на Linux-серверах компаний от 10 рабочих мест. Обследование, план изменений, применение с бэкапом и документацией — за 1–3 рабочих дня. Работаю с CentOS, RHEL, AlmaLinux, Ubuntu Server, Debian.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы по правам в Linux

Чем отличается useradd от adduser?
useradd — низкоуровневая утилита, доступная во всех дистрибутивах. adduser — интерактивная обёртка, которая есть только в Debian/Ubuntu и автоматически создаёт домашний каталог, копирует скелет и запрашивает пароль. На RHEL/CentOS используйте useradd с ключом -m.
Какая разница между chmod 755 и chmod 775?
755 — владельцу полный доступ, группе и остальным только чтение и исполнение. 775 — владельцу и группе полный доступ, остальным чтение и исполнение. 775 используется для общих каталогов, где члены группы должны иметь возможность создавать файлы.
Зачем нужен setgid на каталоге?
Флаг setgid на каталоге заставляет все новые файлы внутри наследовать группу-владельца каталога. Это стандартное решение для общих папок отдела.
Как посмотреть последние входы пользователей?
Команда last показывает успешные входы, lastb — неудачные попытки, lastlog — последний вход каждого пользователя. Для аудита sudo — journalctl или /var/log/auth.log.
Стоит ли отключать SELinux?
Нет. Используйте режим permissive на этапе отладки, чтобы увидеть нарушения в audit.log, и переводите систему в enforcing после настройки политик через audit2allow.

Подпишитесь на рассылку ITfresh

Думаете, где найти по-настоящему полезные материалы для руководителя IT-отдела или сисадмина? Мы каждую неделю готовим практические гайды, основанные на реальном боевом опыте. Здесь вы найдёте бесценные лайфхаки, охватывающие самые острые темы: от безопасности и 1С до сложных миграций и надёжных резервных копий. Ведь кто, как не мы, сталкивался с этим в настоящих проектах?

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.