Модуль 11

Користувачі та групи в Linux

Ось готовий урок, створений за твоїм майстер-промптом.


🐧 CS50: Користувачі та групи в Linux

(Спеціальний випуск | Українська версія)


1. 🔥 Вступ: Хаос у гуртожитку

Уявіть, що ви живете у величезному гуртожитку. Тут є сотні кімнат, кухня, пральня і кімната коменданта.

А тепер уявіть, що у всіх мешканців є один і той самий ключ, який відчиняє будь-які двері. * Ваш сусід може зайти у вашу кімнату і "випадково" видалити ваш дипломну роботу. * Ви можете зайти в кімнату коменданта і змінити правила проживання. * Хтось може зайти на кухню і викинути всю їжу з холодильника, просто тому, що у нього був поганий настрій.

Звучить як рецепт катастрофи, правда?

В операційній системі Linux — це саме те, що станеться, якби всі працювали під одним користувачем (особливо під root).

Навіщо нам ця тема? Тому що Linux — це багатокористувацька система (multi-user system). Навіть якщо ви єдиний, хто фізично торкається ноутбука, всередині вашої ОС живуть десятки "сервісних" користувачів (www-data, mail, nobody), які виконують свої задачі.

Якщо ми не навчимося розділяти права і створювати користувачів, ми: 1. Знищимо систему однією помилковою командою. 2. Відкриємо двері хакерам (якщо зламають веб-сервер, отримають доступ до всього).

Сьогодні ми наведемо лад у цьому гуртожитку.


2. 🧠 Теоретична база: Паспорти та Бейджики

Давайте зазирнемо "під капот". Як Linux розуміє, хто є хто?

🆔 UID (User ID) — Це ваш "ІПН"

Ви можете назвати себе super_hacker_99, але для ядра Linux ви — просто число. * UID 0 — Це root (Суперкористувач). Бог системи. Він може все: читати будь-чий файл, зупиняти процеси, форматувати диски. * UID 1–999 — Зарезервовано для системних служб (щоб веб-сервер не мав прав бога). * UID 1000+ — Це звичайні смертні (ми з вами).

👥 Групи (GID) — Це ваші "тусовки"

Керувати правами кожного окремо — це пекло. Уявіть, що у вас в компанії 50 розробників. Ви будете кожному окремо прописувати доступ до сервера? Ні! Ви створите групу developers і дасте права групі. * Один користувач може бути в багатьох групах (як у житті: ви можете бути і в групі "Студенти", і в групі "Футболісти").

📂 Де це все лежить? (Обов'язково запам'ятати)

В Linux "все є файлом". Інформація про користувачів — теж.

  1. /etc/passwd — База даних користувачів (хто є в системі).
  2. /etc/shadow — Тут лежать паролі (у зашифрованому вигляді, звісно).
  3. /etc/group — Список груп.

Інтуїтивно: /etc/passwd — це як список мешканців на вході в будинок. Відкритий для читання всім (спробуйте cat /etc/passwd), щоб система знала імена сусідів. А от /etc/shadow — це сейф із ключами, туди доступ має тільки root.


3. 🧪 Приклади: Від простого до реального

Відкриваємо термінал. Ви зараз, ймовірно, звичайний користувач. Давайте перевіримо.

Приклад 1: "Хто я?"

whoami
id

Питання до вас: Що ви очікуєте побачити у виводі команди id? (Пауза для роздумів...)

Результат:

uid=1000(ivan) gid=1000(ivan) groups=1000(ivan),27(sudo),...

Пояснення: Бачите uid=1000? Ви перший реальний користувач. Бачите групу sudo? Це ваш "золотий квиток", який дозволяє вам іноді ставати адміністратором.


Приклад 2: Народження нового користувача

Давайте створимо користувача для нашого друга, назвемо його bob.

sudo useradd -m -s /bin/bash bob
  • sudo — "Я дію від імені root".
  • useradd — команда створення.
  • -m — створити йому домашню папку (/home/bob), інакше він буде безхатьком.
  • -s /bin/bash — дати йому нормальну оболонку (термінал), інакше він не зможе вводити команди.

Перевіримо:

grep bob /etc/passwd

Ви побачите рядок типу: bob:x:1001:1001::/home/bob:/bin/bash.


Приклад 3: Розподіл по групах (Реальний кейс)

Уявіть, що bob — стажер. Ми не хочемо давати йому sudo. Але ми хочемо, щоб він мав доступ до логів проекту. Створимо групу devs.

  1. Створюємо групу: bash sudo groupadd devs
  2. Додаємо Боба в цю групу: bash sudo usermod -aG devs bob (Тут -aG означає Append Group — додати до існуючих груп. Якщо забудете -a і напишете просто -G, ви виженете Боба з усіх інших груп!)

4. 🛠 Практична частина

Прийшов час забруднити руки. Виконуйте по черзі:

🔹 Завдання 1. Створення команди Створіть двох користувачів: alice та charlie. Переконайтеся, що у них є домашні папки.

🔹 Завдання 2. Забудькуватий адмін Ви забули встановити пароль для alice. Вона не може увійти. * Знайдіть команду, як встановити пароль (підказка: passwd). * Встановіть їй пароль 12345 (система буде лаятися, що пароль надто простий, але як root ви можете наполягти).

🔹 Завдання 3. Шпигунські ігри Спробуйте "стати" Еліс у своєму терміналі:

su - alice

Введіть пароль. Перевірте whoami. Спробуйте прочитати файл /etc/shadow. Питання: Що сталося? Чому? (Вийдіть назад командою exit).

🔹 Завдання 4. Виправлення помилки Ви випадково додали charlie не в ту групу. * Створіть групу managers. * Додайте Чарлі в managers. * Перевірте його групи командою groups charlie.

🔹 Міні-кейс: "Звільнення" Чарлі переходить до конкурентів. * Заблокуйте його акаунт (не видаляючи файли), щоб він не міг увійти. (Гугліть usermod lock або passwd lock). * Спробуйте увійти під ним (su - charlie). Що пише система?

🔹 А що, якщо... Що буде, якщо видалити користувача userdel bob, але не видалити його домашню папку? Кому належатимуть його файли? (Спойлер: вони залишаться сиротами з ID замість імені).


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі в управлінні користувачами?

  1. Принцип найменших привілеїв (Least Privilege).

    • Новачок: Працює під root, "щоб не було проблем з правами доступу".
    • Профі: Створює окремого користувача для кожного сервісу (наприклад, postgres, nginx). Якщо зламають базу даних, хакер застрягне в межах користувача postgres і не отримає доступ до всієї системи.
  2. Useradd vs Adduser.

    • В багатьох системах (Ubuntu/Debian) є команда adduser. Це "дружня" обгортка, яка сама запитає пароль, створить папку і все налаштує. useradd — це низькорівневий інструмент (робить тільки те, що скажеш).
    • Порада: Для швидкого створення в інтерактивному режимі використовуйте adduser. Для скриптів автоматизації — useradd.
  3. Небезпека -G без -a.

    • Я бачив, як сеньйори випадково видаляли себе з групи sudo, використовуючи usermod -G sudo user замість -aG. Це як вийти з квартири і зачинити двері, залишивши ключі всередині. Завжди перевіряйте прапорці!

6. 🧩 Підсумок

Отже, що ми сьогодні зробили? Ми перетворили прохідний двір на режимний об'єкт.

Тепер ви вмієте: 1. ✅ Створювати "цифрові особистості" (користувачів). 2. ✅ Об'єднувати їх у команди (групи). 3. ✅ Розуміти різницю між root і звичайним смертним. 4. ✅ Читати /etc/passwd як відкриту книгу.

Але зачекайте! Ми створили користувачів і групи, але ми ще не знаємо, як сказати системі: "Група devs може писати в цей файл, а managers — тільки читати".

Це — Права доступу до файлів (Permissions). Таємничі rwx-r-x---. І це — тема нашого наступного уроку.

А поки — це був CS50! 🖐️🎤 (уявний кидок мікрофона)