Администрирование Linux-серверов

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

Как создавать и удалять пользователей и группы, назначать sudo и безопасно менять владельца и права файлов в Linux.

14 минут
абстрактная иллюстрация управления доступом в Linux
В Linux учётная запись пользователя связана с постоянным UID, основной группой и дополнительными группами. Административные действия делегируют через правила sudo, а доступ к объектам задают владелец, группа-владелец и стандартные права доступа к файлам. Перед любым изменением проверьте текущие UID, GID, группы, владельца и режим объекта: права файла и права содержащего его каталога решают разные задачи.

Сначала проверьте пользователя, UID, GID и владельца объекта

Имя пользователя удобно людям, но система сопоставляет его с числовым UID. Группа также имеет числовой GID. Доступ по группе определяется фактическим членством учётной записи в группе и её GID, а не сходством имён пользователя и группы.

Показывает UID текущего пользователя, его основную группу и дополнительные группы.
id
`id -u` выводит effective UID процесса, `id -ru` — real UID, `id -g` — effective GID, а `id -G` — основной и дополнительные GID процесса. Обычно real и effective UID совпадают; типичный случай их расхождения — выполнение setuid-программы.
id -u; id -ru; id -g; id -G
Проверяет запись пользователя и группы через настроенные системные источники учётных данных, затем показывает членство конкретного пользователя. Замените `trainee` и `operators` своими именами.
getent passwd trainee; getent group operators; id trainee
`ls -ld` показывает сам каталог, а не его содержимое. `stat` выводит владельца, группу, восьмеричный режим и имя объектов.
ls -ld /srv/training /srv/training/report.txt; stat -c '%U %G %a %n' /srv/training /srv/training/report.txt

Учётная запись и процесс — не одно и то же

Запись пользователя хранит имя, UID, домашний каталог и другие атрибуты. У запущенного процесса есть учётные данные, в том числе real и effective UID/GID. Поэтому команда, запущенная через sudo, обычно действует с effective UID целевого пользователя, часто суперпользователя, хотя интерактивный сеанс был открыт обычной учётной записью.

Создать пользователя Linux и отдельную группу

useradd — низкоуровневая системная утилита создания учётной записи. groupadd создаёт группу, passwd задаёт или меняет пароль, usermod изменяет существующую учётную запись, а userdel удаляет её запись. Команда adduser не является единообразной заменой useradd: в Debian и Ubuntu это отдельная интерактивная надстройка, а в RHEL-подобных системах она обычно предоставляется как совместимое имя useradd.

Различия, важные для примеров создания пользователя. Настройки по умолчанию могут быть изменены локальной политикой и файлами конфигурации.

Система`useradd``adduser`Как явно создать дом и начальную группу
Debian 13Системная утилита; домашний каталог задавайте ключом -m.Отдельная надстройка пакета adduser; обычно интерактивно создаёт домашний каталог и пользовательскую группу, если это не изменено конфигурацией.groupadd operators; useradd -m -g operators trainee
Ubuntu Server 24.04 LTSСистемная утилита; для переносимого сценария указывайте -m явно.Отдельная надстройка adduser; её интерактивное поведение и настройки отличаются от useradd.groupadd operators; useradd -m -g operators trainee
RHEL 9Системная утилита shadow-utils; -m явно создаёт домашний каталог.Обычно совместимое имя useradd, а не Debian-подобная интерактивная надстройка.groupadd operators; useradd -m -g operators trainee
Rocky Linux 9Поведение следует документации и man-странице shadow-utils данного выпуска; используйте -m явно.Обычно совместимое имя useradd.groupadd operators; useradd -m -g operators trainee
AlmaLinux 9Поведение следует документации и man-странице shadow-utils данного выпуска; используйте -m явно.Обычно совместимое имя useradd.groupadd operators; useradd -m -g operators trainee

Не полагайтесь на неявное создание домашнего каталога или персональной группы: это зависит от параметров useradd, конфигурации дистрибутива и локальной политики. Для целевой системы сверяйте man useradd, man adduser, man groupadd и официальное руководство её выпуска.

Создание учебной группы и пользователя

Пример создаёт группу operators и пользователя trainee с этой группой как основной. Выполняйте команды от имени root либо через уже разрешённый sudo.

  1. 1
    Убедитесь, что имена свободны
    Выполните getent passwd trainee и getent group operators. Пустой вывод означает, что соответствующая запись не найдена через текущую конфигурацию NSS.
  2. 2
    Создайте отдельную группу
    Выполните sudo groupadd operators, затем getent group operators. Группа получит GID, выбранный системой или заданный политикой.
  3. 3
    Создайте пользователя с домашним каталогом
    Выполните sudo useradd -m -g operators trainee. Ключ -m запрашивает создание домашнего каталога, а -g operators назначает основную группу. Не заменяйте эту команду на adduser, не проверив его документацию для своего дистрибутива.
  4. 4
    Задайте первоначальный пароль
    Выполните sudo passwd trainee и введите пароль без отображения в терминале. Для смены пароля существующего пользователя применяется та же команда.
  5. 5
    Проверьте результат
    Выполните id trainee, getent passwd trainee и ls -ld /home/trainee. Сверьте UID, основную группу, домашний каталог и его владельца.

Добавить пользователя в группу

Дополнительные группы не заменяют основную. Для добавления пользователя в дополнительную группу применяют usermod -aG: -G задаёт список дополнительных групп, а -a добавляет указанные группы к уже существующему списку. Если использовать -G без -a, список дополнительных групп обычно будет заменён указанным — это частая причина потери ранее назначенного членства.

Создаёт для примера группу `reviewers`, добавляет `trainee` в неё как дополнительного участника и проверяет запись. Если нужная группа уже существует, пропустите `groupadd`. Чтобы изменить основную группу, используют `usermod -g имя_группы пользователь` после оценки последствий.
sudo groupadd reviewers && sudo usermod -aG reviewers trainee && id trainee

Новое членство не меняет уже работающий сеанс

Ядро хранит список групп у процесса. Уже открытые shell-сеансы и процессы пользователя обычно не увидят новое членство автоматически. Войдите заново, откройте новый сеанс или используйте иной документированный для вашей среды способ создать процесс с обновлёнными группами. id trainee показывает запись учётной записи, а id внутри старого сеанса может показывать прежний набор.

Настроить sudo Linux: ограниченные и административные права

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

Имя административной группы не универсально. В одних системах и политиках используется sudo, в других — wheel; само членство работает только если соответствующее правило есть в sudoers. Для Debian 13 и Ubuntu Server 24.04 LTS, RHEL 9, Rocky Linux 9 и AlmaLinux 9 сверяйте штатные правила, установленный пакет sudo и документацию конкретного выпуска. Не переносите настройку группы между семействами ОС без проверки.

Выдача sudo с минимально необходимыми полномочиями

Правила меняют через visudo: утилита проверяет синтаксис и защищает от одновременного редактирования. Ошибка в sudoers может лишить административного доступа, поэтому держите открытым действующий административный сеанс до проверки нового правила.

  1. 1
    Посмотрите действующие разрешения
    Под целевой учётной записью выполните sudo -l. Команда показывает разрешённые и запрещённые правила, если политика позволяет их раскрыть.
  2. 2
    Создайте отдельный файл правила
    Откройте sudo visudo -f /etc/sudoers.d/trainee-maintenance. Каталог /etc/sudoers.d обычно подключён пакетной конфигурацией sudo в рассматриваемых семействах, но его наличие и директивы @include/@includedir нужно подтвердить в /etc/sudoers и man sudoers целевой ОС.
  3. 3
    Разрешите только нужную команду
    Для учебного примера добавьте trainee ALL=(root) /usr/bin/systemctl --no-pager status example.service. Параметр --no-pager исключает запуск пейджера с полномочиями root. Укажите фактический абсолютный путь команды и точное имя разрешённой службы; не заменяйте их масками без понимания последствий.
  4. 4
    Проверьте синтаксис и доступ
    После сохранения visudo проверит файл. Дополнительно выполните sudo visudo -c, затем войдите как trainee, проверьте sudo -l и вызовите точную разрешённую команду: sudo /usr/bin/systemctl --no-pager status example.service. Управление службами рассматривается отдельно в статье systemd и systemctl: управление службами и автозагрузкой Linux.
/etc/sudoers.d/trainee-maintenance
trainee ALL=(root) /usr/bin/systemctl --no-pager status example.service

Для полного административного доступа обычно используют уже предусмотренное политикой правило группы либо явное правило пользователя, например trainee ALL=(ALL:ALL) ALL в синтаксисе, поддерживаемом sudo вашей системы. Это широкое разрешение: выдавайте его только когда оно действительно требуется. Правило NOPASSWD не является безопасной настройкой по умолчанию и требует отдельного обоснования.

Как читать права 755 и 644 в Linux

Стандартная модель UNIX разделяет разрешения для владельца файла, группы-владельца и остальных пользователей. Каждая тройка состоит из r — чтение, w — запись и x — выполнение или поиск, но точный смысл зависит от типа объекта.

БитОбычный файлКаталог
rРазрешает читать содержимое файла.Разрешает читать список имён в каталоге.
wРазрешает изменять содержимое файла.Разрешает создавать, удалять или переименовывать записи в каталоге; для конкретных операций обычно также нужен x на каталоге.
xРазрешает выполнять файл как программу или сценарий при других выполненных условиях.Разрешает пройти через каталог и обращаться к объектам по известному имени; этот бит также называют search.

Число режима состоит из трёх восьмеричных цифр: r=4, w=2, x=1. Поэтому 755 означает rwxr-xr-x: владелец получает 7 (4+2+1), группа и остальные — 5 (4+1). 644 означает rw-r--r--: владелец может читать и изменять файл, остальные — только читать. Это понятные примеры, но не универсальные безопасные значения для любого приложения или данных.

Право на файл не заменяет право на каталог

Даже если файл имеет режим 644, доступ к нему может быть невозможен без x на каждом каталоге в пути. И наоборот, x на каталоге без r обычно позволяет обращаться к объекту по известному имени, но не просматривать список имён. Не пытайтесь исправить отказ в доступе массовым chmod: сначала проверьте весь путь и владельцев.

chmod и chown: изменить права, владельца и группу

chmod меняет биты режима, а chown — владельца и, при указании через двоеточие, группу. Символьный синтаксис chmod удобен, когда надо изменить один класс прав, а числовой — когда требуется установить точный базовый режим.

Символьная запись устанавливает для `report.txt` режим `644`: владельцу — чтение и запись, группе и остальным — только чтение.
chmod u=rw,g=r,o=r report.txt
Числовая запись устанавливает на каталог `rwxr-x---`. Перед применением проверьте, соответствует ли это требуемому доступу пользователей и служб.
chmod 750 /srv/training
Меняет владельца на `trainee` и группу-владельца на `operators`, затем показывает результат. Если нужно сменить только группу, используйте `chown :operators путь` или `chgrp operators путь`.
sudo chown trainee:operators /srv/training/report.txt && ls -l /srv/training/report.txt

umask действует при создании, а не задним числом

umask исключает некоторые биты при создании новых объектов процессом. Он не изменяет права уже существующих файлов и каталогов; для них применяют chmod.

У chmod есть также специальные биты setuid, setgid и sticky bit. Они меняют поведение выполнения файлов или совместного доступа к каталогам и требуют отдельной оценки; не устанавливайте их как способ общего исправления прав.

Почему опасны chmod -R и chown -R

Рекурсивная операция затрагивает всё дерево

chmod -R и chown -R могут изменить права и владельцев тысяч объектов, включая файлы с намеренно отличающимися режимами, каталоги, сокеты и данные приложения. Не запускайте их на системных каталогах и не применяйте к рабочему дереву без предварительного списка объектов, резервного плана и понимания ожидаемого результата.

Символические ссылки требуют отдельного внимания. Изменение атрибутов самой ссылки, обращение к объекту по её цели и переход по ссылке при рекурсивном обходе — разные действия. Поведение зависит от утилиты, её реализации и выбранных параметров обхода; перед массовой операцией прочитайте man chmod и man chown именно на целевой системе и проверьте дерево на тестовой выборке.

Предварительно выводит тип, режим, владельца, группу и путь объектов в одном дереве. `-xdev` не переходит на другие файловые системы, смонтированные внутри пути, но не делает операцию безопасной автоматически.
find /srv/training -xdev -printf '%y %m %u %g %p\n' | less

Если политика требует разные режимы для каталогов и обычных файлов, задавайте их отдельными, сначала проверяемыми выборками. Например, перед изменением можно просмотреть find /srv/training -type d -print и find /srv/training -type f -print; конкретные команды изменения выбирайте только после проверки списка.

Удалить пользователя Linux без потери контроля над данными

Удаление записи пользователя, домашнего каталога, почтового ящика, файлов вне домашнего каталога и группы — независимые действия. userdel без специальных параметров удаляет учётную запись, но не следует считать это удалением всех данных с её UID. Обработка домашнего каталога и почтового ящика при userdel -r определяется документацией утилиты и фактическим расположением этих объектов; файлы вне дома нужно искать и обрабатывать отдельно.

Безопасное удаление пользователя

Пример относится к пользователю trainee. Не удаляйте учётную запись, пока не определили владельцев данных, активные процессы и необходимость сохранить архив.

  1. 1
    Зафиксируйте UID и текущие атрибуты
    Выполните id trainee и getent passwd trainee. UID нужен для поиска файлов, поскольку после удаления имя может перестать разрешаться, а объекты сохранят числового владельца.
  2. 2
    Проверьте процессы пользователя
    Выполните ps -u trainee -f либо pgrep -a -u trainee. Завершение процессов и остановка связанных служб — отдельная задача; сначала установите их назначение.
  3. 3
    Найдите файлы вне домашнего каталога
    После подстановки фактического UID выполните, например, sudo find /srv /var -xdev -uid 12345 -ls. Выберите только релевантные файловые системы и каталоги: поиск от / может быть долгим и затронуть сетевые либо служебные монтирования.
  4. 4
    Передайте, архивируйте или удалите найденные данные
    Если файлы нужны другому владельцу, смените владельца адресно, например sudo chown -R newowner:newgroup /srv/project только после проверки дерева. Если данные надо хранить, создайте архив по принятой политике и проверьте его.
  5. 5
    Удалите учётную запись
    Для удаления только записи используйте sudo userdel trainee. Если подтверждено удаление домашнего каталога и связанных с ним локальных данных, применяют sudo userdel -r trainee; последствия для почтового ящика и нестандартного home сверяйте по man userdel целевого выпуска.
  6. 6
    Проверьте остатки и решите судьбу группы
    Выполните getent passwd trainee, затем повторите поиск по сохранённому UID. Группу удаляйте отдельно командой sudo groupdel operators только после getent group operators и проверки, что она не нужна другим пользователям или объектам.

Не удаляйте пользователя с активными задачами вслепую

Процессы могут продолжить работу с уже удалённым UID, а службы и задания могут ссылаться на имя удалённой учётной записи. Удаление домашнего каталога также необратимо без заранее подготовленной копии. Сначала проверьте процессы, задания, владельцев данных и зависимости приложения.

Проверка после настройки пользователей и прав

  • id имя_пользователя — UID, основная и дополнительные группы записи.
  • getent passwd имя_пользователя и getent group имя_группы — видимость записей через системные источники.
  • ls -ld каталог и ls -l файл — владелец, группа и символьный режим; stat удобен для восьмеричного режима.
  • sudo -l под целевой учётной записью — фактически видимые правила sudo.
  • После добавления в группу — новый вход в систему или новый процесс с обновлённым списком групп.
  • При неожиданном отказе в доступе — проверка прав каждого каталога в пути, а не только конечного файла.

Эта статья описывает стандартные UNIX-права. ACL могут задавать дополнительные разрешения и ограничения, а SELinux и другие обязательные механизмы могут запретить действие, разрешённое стандартными правами. Поэтому совпадение владельца и режима не всегда полностью объясняет фактический результат.

Термины в статье

Владелец файла — числовой UID, записанный в метаданных объекта и определяющий применение класса прав владельца.
Группа пользователей — объект разграничения доступа, объединяющий учётные записи под общим GID для назначения прав на файлы, службы и иные ресурсы нескольким пользователям.
Командная оболочка — программа-интерпретатор, принимающая команды и запускающая процессы; в отличие от терминала, она обрабатывает синтаксис и сценарии.
Права доступа к файлам — разрешения файловой системы на чтение, запись и выполнение объекта для его владельца, группы-владельца и остальных пользователей.
Процесс — экземпляр выполняемой программы в Linux с PID, виртуальным адресным пространством, состоянием и связанными с ним ресурсами.
Системная служба — программный компонент, которым ОС управляет как логической единицей для фонового выполнения задач или предоставления функций программам и пользователям.
Суперпользователь — учётная запись с UID 0 или процесс с эффективным UID 0, обладающий административными правами; его полномочия шире, чем у обычного пользователя.
Учётная запись пользователя — запись в системе идентификации ОС, связывающая имя и UID с параметрами входа, домашним каталогом и членством в группах.
AlmaLinux — корпоративный дистрибутив Linux, поддерживаемый сообществом и AlmaLinux OS Foundation, ориентированный на совместимость с интерфейсами и экосистемой RHEL.
Bash — командная оболочка Unix-подобных систем, реализующая язык POSIX shell и добавляющая расширения для интерактивной работы и сценариев.
Debian — универсальный дистрибутив Linux с пакетами DEB и системой APT, известный консервативной веткой Stable и разделением репозиториев по веткам разработки.
GID — числовой идентификатор группы в Linux, связывающий пользователей и объекты файловой системы с групповыми правами доступа; это не имя группы и не UID.
LTS — модель выпуска ПО с продлённым периодом сопровождения, в котором исправления безопасности и критических ошибок поставляются дольше обычного релиза.
RHEL — корпоративный дистрибутив Linux от Red Hat с фиксированными основными версиями, сертификационной экосистемой и моделью сопровождения, зависящей от подписки.
Rocky Linux — корпоративный дистрибутив Linux, создаваемый из исходных пакетов экосистемы RHEL и ориентированный на совместимость с RHEL без использования его товарных знаков.
sudo — утилита контроля и делегирования привилегий, которая по заданной политике запускает команду от имени целевого пользователя, обычно root.
Ubuntu Server — серверный вариант дистрибутива Ubuntu на базе Debian с APT и типовыми средствами автоматизации, доступный в виде установочных и готовых образов.
UID — числовой идентификатор учётной записи в Unix-подобной системе, используемый в учётных данных процессов и записываемый как владелец объектов файловой системы.
umask — атрибут процесса с маской битов прав, исключаемых при создании файлов и каталогов; существующие объекты он не изменяет. При default ACL действует другой порядок.

Вопросы по теме

Все вопросы и ответы

Почему новая группа не видна в уже открытом сеансе пользователя?

Это нормально: добавление в группу не обновляет группы уже работающих процессов. Ядро хранит список групп у каждого процесса, поэтому id trainee может показывать новое членство в записи учётной записи, а id в старом shell — прежний набор. Выйдите из системы и войдите снова либо создайте новый сеанс с обновлёнными группами.

Удалит ли `userdel -r` все файлы пользователя?

Перед удалением сохраните UID командой id trainee: после удаления имени пользователя объекты могут остаться с числовым владельцем. Проверьте активные процессы через ps -u trainee -f или pgrep -a -u trainee, так как они способны продолжить работу с уже удалённым UID.

Для поиска данных вне домашнего каталога используйте выборку по фактическому UID и только по нужным путям, например sudo find /srv /var -xdev -uid 12345 -ls. Необязательно искать от /: это может занять много времени и затронуть служебные или сетевые монтирования. Нужные данные передайте новому владельцу адресно, например после проверки дерева, либо архивируйте по принятой политике.

Только затем удаляйте запись через sudo userdel trainee или, если удаление home подтверждено, через sudo userdel -r trainee. После этого повторите поиск по UID и отдельно решите судьбу основной группы: groupdel допустим только после проверки, что группа не нужна другим пользователям и объектам.

Достаточно ли добавить пользователя в группу `sudo` или `wheel`?

Нет, самого членства в группе недостаточно. Оно даёт права только при наличии соответствующего правила в sudoers. В разных системах и политиках могут использоваться группы sudo или wheel, поэтому сначала проверьте штатные правила, установленный пакет sudo и вывод sudo -l под целевой учётной записью.

Почему файл с правами 644 может не открываться?

Потому что для доступа важны не только права самого файла. Даже при режиме 644 пользователю нужен бит x на каждом каталоге в пути к нему. Право x на каталоге позволяет пройти через него и обратиться к объекту по известному имени, а без него чтение файла может быть недоступно.

Создаёт ли `useradd` домашний каталог пользователя автоматически?

Зависит от дистрибутива и локальной конфигурации, поэтому полагаться на это нельзя. Для переносимого сценария явно указывайте -m, например useradd -m -g operators trainee. Ключ -g назначает основную группу, а создание персональной группы и home без явных параметров может отличаться между системами.

Безопасно ли применять `chmod -R` или `chown -R` ко всему каталогу?

Нет, без предварительной проверки это рискованно. Рекурсивные команды могут изменить тысячи объектов с намеренно разными режимами и владельцами, включая каталоги, сокеты и данные приложения. Сначала просмотрите дерево, например через find, учтите символические ссылки и отдельно проверяйте выборки обычных файлов и каталогов.