1. Архитектура идентификации: UID, GID и системные файлы конфигурации
Архитектура идентификации: UID, GID и системные файлы конфигурации
Операционная система Linux абсолютно равнодушна к тому, как вас зовут. Для ядра системы не существует ни пользователя root, ни пользователя alice. Ядро — математический механизм, который оперирует исключительно числами. Если вы планируете автоматизировать управление доступом, первое, что нужно усвоить: имена созданы только для удобства людей, а реальная власть в системе базируется на числовых идентификаторах.
В этой статье мы разберем, как текстовые имена превращаются в системные числа, где хранится эта связь и почему понимание простых текстовых файлов — ключ к управлению всей инфраструктурой пользователей.
UID и GID: истинные лица пользователей
Каждому процессу и файлу в Linux назначен владелец. Этот владелец определяется двумя ключевыми числами:
Когда вы вводите команду ls -l и видите, что файлом владеет alice, это лишь иллюзия, услужливо созданная утилитой ls. На самом деле файл принадлежит, например, UID . Утилита на лету «переводит» число в понятное имя.
В Linux существует строгая иерархия диапазонов UID:
| Диапазон UID | Назначение | Описание |
|---|---|---|
| 0 | Суперпользователь (root) | Абсолютный властелин системы. Ядро предоставляет неограниченные права любому аккаунту с UID 0, независимо от его текстового имени. |
| 1 – 999 | Системные аккаунты | Используются для запуска служб (веб-сервер, база данных). Под ними нельзя войти в систему. Это изолирует процессы друг от друга ради безопасности. |
| | Обычные пользователи | Реальные люди (или автоматизированные скрипты), которым нужен доступ к оболочке. При написании bash-скриптов для аудита обычно фильтруют именно этот диапазон. |
Мост между человеком и ядром: /etc/passwd
Если ядро понимает только числа, то как система узнает, что при вводе логина alice нужно использовать UID ? Эту роль выполняет плоский текстовый файл /etc/passwd.
Это главная база данных аккаунтов в Linux. В ней нет никакой магии — это просто таблица, где разделителем колонок выступает двоеточие (:).
Давайте препарируем типичную строку из этого файла:
> alice:x:1001:1001:Alice Smith,,,:/home/alice:/bin/bash
Каждая запись состоит ровно из семи полей:
alice) — логин для входа.x) — исторически здесь хранился зашифрованный пароль. Сейчас здесь всегда стоит буква x, указывающая, что пароль спрятан в другом, более безопасном месте.1001) — тот самый номер, который система использует под капотом.1001) — номер основной группы пользователя.Alice Smith,,,) — информационное поле. Обычно содержит полное имя, номер кабинета или рабочий телефон. Запятые разделяют эти метаданные./home/alice) — папка, в которую попадает пользователь сразу после успешного входа./bin/bash) — программа, которая запускается при входе. Если здесь указать /usr/sbin/nologin, аккаунт будет существовать, но войти в него через терминал станет невозможно (так делают для системных служб).!Архитектура идентификации: от имени к ядру
Иллюзия команды useradd
Зная структуру /etc/passwd, вы получаете важный инсайт для автоматизации: команда useradd не делает ничего сверхъестественного. Это просто скрипт-обертка, который:
/etc/passwd./home и копирует туда базовые файлы.Теоретически, вы можете создать пользователя вручную, просто открыв /etc/passwd в текстовом редакторе и дописав туда строку. Система примет этого пользователя как родного.
Эволюция безопасности: файл /etc/shadow
Вы обратили внимание на букву x во втором поле /etc/passwd?
На заре развития Unix зашифрованные пароли хранились прямо в /etc/passwd. Проблема заключалась в том, что этот файл должен быть доступен для чтения всем пользователям системы. Иначе команда ls не смогла бы прочитать файл, чтобы перевести UID владельца файла в имя, и система бы сломалась.
Когда вычислительные мощности выросли, злоумышленники начали просто копировать /etc/passwd и подбирать пароли на своих компьютерах методом перебора (брутфорс).
Решением стало разделение:
/etc/passwd (доступен всем для чтения)./etc/shadow.Файл /etc/shadow доступен для чтения только пользователю root. Обычный пользователь не может даже посмотреть, как выглядит зашифрованный пароль соседа.
Пример строки из /etc/shadow:
> alice:xyz1236$...) — криптографический хэш. Если здесь стоит * или !, вход по паролю заблокирован (полезно для сервисных аккаунтов или при доступе только по SSH-ключам).
Резюме
Архитектура идентификации в Linux элегантна в своей простоте. Вся сложная система прав доступа опирается на два плоских текстовых файла: /etc/passwd для маршрутизации имен в числа и /etc/shadow для безопасной аутентификации.
Понимая, что ядро доверяет только UID, а не текстовому логину, вы сможете избежать критических ошибок при написании скриптов автоматизации. В следующей главе мы расширим эту модель и посмотрим, как работает файл /etc/group и почему концепция групп является фундаментом для коллективной работы с файлами.