Ось готовий урок, створений за твоїм майстер-промптом.
🐧 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 "все є файлом". Інформація про користувачів — теж.
/etc/passwd— База даних користувачів (хто є в системі)./etc/shadow— Тут лежать паролі (у зашифрованому вигляді, звісно)./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.
- Створюємо групу:
bash sudo groupadd devs - Додаємо Боба в цю групу:
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. 💡 Мислення як у розробника
Як відрізнити новачка від профі в управлінні користувачами?
-
Принцип найменших привілеїв (Least Privilege).
- Новачок: Працює під
root, "щоб не було проблем з правами доступу". - Профі: Створює окремого користувача для кожного сервісу (наприклад,
postgres,nginx). Якщо зламають базу даних, хакер застрягне в межах користувачаpostgresі не отримає доступ до всієї системи.
- Новачок: Працює під
-
Useradd vs Adduser.
- В багатьох системах (Ubuntu/Debian) є команда
adduser. Це "дружня" обгортка, яка сама запитає пароль, створить папку і все налаштує.useradd— це низькорівневий інструмент (робить тільки те, що скажеш). - Порада: Для швидкого створення в інтерактивному режимі використовуйте
adduser. Для скриптів автоматизації —useradd.
- В багатьох системах (Ubuntu/Debian) є команда
-
Небезпека
-Gбез-a.- Я бачив, як сеньйори випадково видаляли себе з групи
sudo, використовуючиusermod -G sudo userзамість-aG. Це як вийти з квартири і зачинити двері, залишивши ключі всередині. Завжди перевіряйте прапорці!
- Я бачив, як сеньйори випадково видаляли себе з групи
6. 🧩 Підсумок
Отже, що ми сьогодні зробили? Ми перетворили прохідний двір на режимний об'єкт.
Тепер ви вмієте:
1. ✅ Створювати "цифрові особистості" (користувачів).
2. ✅ Об'єднувати їх у команди (групи).
3. ✅ Розуміти різницю між root і звичайним смертним.
4. ✅ Читати /etc/passwd як відкриту книгу.
Але зачекайте! Ми створили користувачів і групи, але ми ще не знаємо, як сказати системі: "Група devs може писати в цей файл, а managers — тільки читати".
Це — Права доступу до файлів (Permissions). Таємничі rwx-r-x---.
І це — тема нашого наступного уроку.
А поки — це був CS50! 🖐️🎤 (уявний кидок мікрофона)