Представьте: вас только что сделали ответственным за сервер. Коллега Алиса просит: «Создай мне учётку, мне нужен доступ к проекту». Стажёр Боб случайно удалил чужие файлы. А ещё кто-то пытается подключиться по 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, список участников.

Группа — механизм для управления доступом нескольких пользователей к общим ресурсам. Альтернатива выставлению прав каждому по отдельности.

Обсуждение урока

0
Комментарии видны всем. Чтобы участвовать в обсуждении, войдите или зарегистрируйтесь.
Модерация сообщества

Пожаловаться на комментарий

Расскажите модераторам, что именно требует внимания.