Представьте: вас только что сделали ответственным за сервер. Коллега Алиса просит: «Создай мне учётку, мне нужен доступ к проекту». Стажёр Боб случайно удалил чужие файлы. А ещё кто-то пытается подключиться по SSH под root — и вы видите это в логах.
Три ситуации — и все они про одно: кто есть кто в системе. В блоке «Знакомство с Linux» мы уже встречались с root, sudo и строкой rwxr-xr--. Но мы не задавались вопросом: а откуда система вообще знает, кто такой root? Где хранится информация о пользователях? И зачем нужны группы, если есть владелец?
Сейчас разберёмся — и эти вопросы больше никогда вас не поставят в тупик. Вот что может вас удивить: когда вы входите в систему, Linux не знает вас по имени. Для него вы — число. Просто число. Каждому пользователю присваивается уникальный числовой идентификатор, и именно по нему система решает, что вам можно, а что нельзя.
Хотите увидеть свой? Выполните:
id
Вывод будет примерно таким:
uid=1000(user) gid=1000(user) groups=1000(user),27(sudo),1001(developers)
Что здесь написано?
uid=1000(user)— ваш UID = 1000, имя = user.gid=1000(user)— ваша основная группа (GID = 1000).groups=...— все группы, в которых вы состоите.
Обратите внимание: одна команда — и вы видите всё о себе с точки зрения системы. UID распределяются по простой логике:
| UID | Кто |
|---|---|
0 |
root — суперпользователь. Всегда 0. Без исключений. |
1–999 |
Системные (сервисные) пользователи: www-data, postgres, nginx. Создаются автоматически при установке программ. |
1000+ |
Обычные пользователи — вроде вас. Первый созданный — 1000, второй — 1001 и так далее. |
А теперь самое интересное: откуда система берёт эту информацию? Из базы данных? Из зашифрованного хранилища? Нет. Из обычного текстового файла, который вы можете открыть и прочитать прямо сейчас:
cat /etc/passwd
Да-да, файл так и называется — passwd. И нет, пароли в нём больше не хранятся (об этом через минуту). Вы увидите много строк — каждая строка это один пользователь. Формат:
user:x:1000:1000:User Name:/home/user:/bin/bash
Семь полей, разделённых двоеточием. Звучит как что-то из прошлого века? Так и есть — этот формат не менялся с 1970-х годов. И работает до сих пор.
| Поле | Пример | Значение |
|---|---|---|
| 1. Имя | user |
Логин пользователя |
| 2. Пароль | x |
Заглушка — пароль хранится в /etc/shadow |
| 3. UID | 1000 |
Числовой идентификатор |
| 4. GID | 1000 |
Основная группа |
| 5. Описание | User Name |
Полное имя или комментарий (GECOS) |
| 6. Домашняя папка | /home/user |
Куда попадает при входе |
| 7. Оболочка | /bin/bash |
Какой шелл запускается |
Видите поле «Пароль» — там стоит x. Забавная история: когда-то пароли действительно лежали прямо здесь. Открытым текстом. В файле, который может прочитать любой пользователь. Представьте себе сейф, на котором написан код замка. В какой-то момент разработчики Unix осознали масштаб проблемы и перенесли пароли в /etc/shadow, который может читать только root. А в passwd осталась заглушка x — памятник инженерному оптимизму 70-х.
Окей, с пользователями разобрались. Но зачем нужны группы?
Вспомните права доступа из вводного блока: rwxr-xr-- — владелец, группа, остальные. Три категории. Без групп у вас было бы только две: «я» и «все остальные». А что если вы хотите дать доступ некоторым коллегам, но не всем? Тут-то группы и спасают.
Представьте офис. Есть общий принтер. Печатать на нём могут все — но менять настройки (качество, двусторонняя печать, очередь) могут только сотрудники IT-отдела. Как это решить без групп? Перечислить каждого айтишника по имени в настройках принтера. А если новый айтишник пришёл? А если кто-то уволился? А если принтеров десять?
С группами — элементарно: создать группу it-staff, дать ей права на настройку принтера, добавить нужных людей. Пришёл новый сотрудник — добавили в группу. Уволился — убрали. Принтер менять не нужно.
У группы тоже есть числовой идентификатор — GID (Group ID). А информация о группах хранится — вы уже догадались — в ещё одном текстовом файле:
cat /etc/group
Формат похож на /etc/passwd, только проще:
sudo:x:27:user,admin
developers:x:1001:user,alice,bob
| Поле | Пример | Значение |
|---|---|---|
| 1. Имя группы | developers |
Название |
| 2. Пароль | x |
Не используется (ещё один привет из 70-х) |
| 3. GID | 1001 |
Числовой идентификатор группы |
| 4. Участники | user,alice,bob |
Пользователи в группе (через запятую) |
Обратите внимание на группу sudo. Помните, как мы использовали sudo для выполнения команд от root? Так вот, право на это определяется очень просто: если ваш пользователь есть в строке sudo:x:27:... — вы можете использовать sudo. Нет — не можете. Вот и весь механизм.
Давайте посмотрим, зачем это нужно на практике. Допустим, три разработчика работают над одним проектом. Файлы проекта лежат в /var/www/project. Как дать доступ всем троим?
Плохой способ (который, к сожалению, все новички используют первым): выставить права 777 — всем всё можно. Работает? Работает. Но любой пользователь в системе — включая скомпрометированный аккаунт, взломщика или криво написанный скрипт — сможет менять файлы проекта. 777 — это как оставить ключи от квартиры в замке снаружи. Технически удобно, практически — безумие.
Хороший способ: создать группу webdev, добавить в неё трёх разработчиков, назначить эту группу на папку проекта:
# Что сделает администратор (мы научимся этому в следующем уроке):
# 1. Создать группу webdev
# 2. Добавить в неё alice, bob и charlie
# 3. Назначить группу на папку проекта
# 4. Дать группе права на запись
# Результат:
ls -l /var/www/
# drwxrwxr-x 2 root webdev 4096 Mar 25 10:00 project
Теперь alice, bob и charlie могут работать с файлами проекта. Все остальные — только читать. Никаких 777, никакого риска. Пришёл четвёртый разработчик — одна команда, и он в группе. Ушёл — одна команда, и его нет.
Подведём итог. Linux — многопользовательская система, и это не историческое наследие, а его главная сила. Каждый пользователь изолирован, у каждого файла есть владелец и группа, а права определяют, кто что может делать. Вся информация — в простых текстовых файлах, которые можно прочитать и понять за минуту. Эта система работает в Unix с 1970-х — и за 50 лет никто не придумал ничего лучше.
Сейчас мы разобрались, как устроены пользователи и группы. В следующем уроке — как ими управлять: создавать пользователей, удалять, добавлять в группы, назначать пароли. Руками.
UID (User ID) — уникальный числовой идентификатор пользователя. root = 0, системные = 1–999, обычные = 1000+.
GID (Group ID) — числовой идентификатор группы. У каждого пользователя есть основная группа и может быть любое количество дополнительных.
/etc/passwd — файл с информацией обо всех пользователях: имя, UID, GID, домашняя директория, оболочка. Пароли хранятся отдельно в /etc/shadow.
/etc/group — файл с информацией обо всех группах: имя, GID, список участников.
Группа — механизм для управления доступом нескольких пользователей к общим ресурсам. Альтернатива выставлению прав каждому по отдельности.