Модуль 9

Права доступу та ownership

Ось урок, згенерований за твоїм майстер-промптом. Я обрав тему Linux File Permissions (Права доступу до файлів), оскільки це фундаментальна тема в CS, де поняття "ownership" (власність) та "permissions" (права) є критичними, і яку часто пояснюють занадто сухо.


🎓 Урок: Права доступу та Ownership (Linux)

Привіт, друзі! Це CS50 (умовно 😉), і сьогодні ми поговоримо про те, що відокремлює хаос від порядку у світі операційних систем.

1. 🔥 Вступ: Чому мій сервер зламали?

Уявіть ситуацію. Ви написали крутий веб-сайт. У ньому є файл config.php, де лежить пароль до вашої бази даних. Ви завантажуєте все це на сервер... і наступного ранку ваші дані вкрадено. Чому? Тому що ви залишили двері відчиненими.

Коли ви працюєте на своєму ноутбуці, ви — цар і бог. Ви відкриваєте будь-який файл. Але в реальному світі (на серверах, у хмарі) комп’ютером користуються сотні програм і користувачів одночасно.

Питання до вас: Як операційна система знає, що ви можете читати свій щоденник, а ваш сусід по серверу — ні? І що заважає веб-серверу випадково видалити ваші системні файли?

Без розуміння прав доступу та володіння (ownership), будь-яка система перетворилася б на гуртожиток, де кожен бере чужу їжу з холодильника. Сьогодні ми навчимося вішати замки на цей холодильник.


2. 🧠 Теоретична база: Матриця прав

В Linux (і macOS) у кожного файлу є дві головні характеристики: Власник (Owner) і Права (Permissions).

Уявіть, що кожен файл — це кімната в офісній будівлі.

🎭 Хто є хто? (Ownership)

Система ділить усіх на три категорії стосовно файлу: 1. User (u) — Власник. Це ви. Той, хто створив файл (зазвичай). Ви маєте повний контроль. 2. Group (g) — Група. Це ваша команда. Наприклад, відділ "Developers". Вони можуть мати доступ до кімнати, але не можуть робити ремонт. 3. Others (o) — Інші. Весь інший світ. Випадкові перехожі.

🚦 Що можна робити? (Permissions)

Є лише три базові дії. Запам'ятайте цю трійцю, як "Отче наш": * R (Read) — 👀 Читати. Можна подивитися вміст файлу. * W (Write) — ✏️ Писати. Можна змінити вміст або видалити файл. * X (Execute) — 🏃 Запустити. Якщо це скрипт або програма, її можна виконати.

🔢 Магія чисел (Під капотом)

Комп’ютер не розуміє літер rwx, він розуміє біти. * Read = 4 * Write = 2 * Execute = 1

Чому такі цифри? Це бінарний код! * r-- = 4 (100 у двійковій) * -w- = 2 (010 у двійковій) * --x = 1 (001 у двійковій)

Якщо ви хочете дати повні права (читати + писати + запустити), ви просто додаєте: 4 + 2 + 1 = 7. Це те саме "магічне число" 777, про яке ми ще поговоримо.


3. 🧪 Приклади: Розшифровуємо ієрогліфи

Давайте подивимося на реальний термінал. Ви вводите команду ls -l і бачите щось таке:

-rwxr-xr--  1 david  students  1024 Jan 28 14:00 script.sh

Виглядає як шифр? Давайте зламаємо його.

Дивимось на першу частину: rwxr-xr--

  1. Розбиваємо на трійки: rwx | r-x | r--
  2. Перша трійка (Власник/David): rwx (4+2+1 = 7). Девід може все: читати, писати, запускати.
  3. Друга трійка (Група/Students): r-x (4+0+1 = 5). Студенти можуть читати і запускати, але не можуть змінювати код!
  4. Третя трійка (Інші): r-- (4+0+0 = 4). Решта світу може тільки читати.

Питання на розуміння: Якщо я, як власник, хочу заборонити собі писати у цей файл (щоб випадково не стерти), як зміниться перша трійка?

(Пауза для роздумів)

Відповідь: Вона стане r-x (Читаю і запускаю, але Write зник).


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

Час забруднити руки. Відкрийте термінал (або уявіть, що відкрили).

Завдання 1: Створити і закрити

Створіть файл із секретом:

echo "Мій супер секрет" > secret.txt

Зараз його можуть читати майже всі. Зробіть так, щоб тільки ви могли його читати і змінювати, а всі інші — взагалі нічого не бачили. Підказка: Вам (u) треба rw-, Групі (g) нічого, Іншим (o) нічого.

chmod 600 secret.txt

(6 = 4+2. 0 = нічого. 0 = нічого).

Завдання 2: "Тільки для читання"

У вас є важливий звіт report.txt. Заберіть у себе право на запис (w), щоб випадково не видалити текст, поки ви його читаєте.

Завдання 3: Виконання

Створіть простий скрипт:

echo 'echo "Hello CS50!"' > hello.sh

Спробуйте запустити його: ./hello.sh. Що сталося? "Permission denied". Чому? Виправте це однією командою, додавши право на виконання (x) для власника.

Завдання 4: Реальний кейс (Веб-сервер)

У вас є папка public_html. * Ви (власник) повинні мати повний доступ. * Веб-сервер (група www-data) повинен мати можливість читати файли, щоб показати сайт людям. * Інші користувачі сервера не повинні бачити нічого. Яка комбінація цифр (chmod) тут потрібна? (Спробуйте порахувати: 7 для вас, ? для групи, 0 для інших).


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

Ось де новачки роблять фатальну помилку. Коли щось не працює (наприклад, сервер каже "Forbidden"), новачок робить це:

🚫 Помилка: chmod 777 file Це означає: "Дозволити ВСІМ робити ВСЕ". Це як залишити ключі від квартири під килимком і написати про це в Instagram. Ніколи так не робіть на продакшні.

Як думає профі (Принцип найменших привілеїв): "Які мінімальні права потрібні цій програмі, щоб вона працювала?" Якщо їй треба тільки читати — дай тільки r. Не давай w "про всяк випадок".

Порада з практики: Якщо ви не можете відредагувати файл, не поспішайте міняти права (chmod). Спочатку перевірте, хто власник (ls -l). Можливо, вам просто треба змінити власника командою chown (change owner), а не ламати права доступу.


6. 🧩 Підсумок

Отже, що ми маємо у своєму арсеналі?

  1. Ownership (u, g, o): Знаємо, хто "хазяїн", хто "свої", а хто "чужі".
  2. Permissions (r, w, x): Знаємо, що читання, запис і виконання — це різні речі.
  3. Octal (755, 644): Розуміємо, що це не магія, а проста арифметика прав.

Тепер ви не просто користувач, який тицяє кнопки. Ви — адміністратор, який контролює доступ до інформації.

Що далі? Тепер, коли ми вміємо захищати файли, наступного разу ми поговоримо про Процеси. Хто саме стукає у двері ваших файлів і як операційна система керує цим натовпом програм?

Це був CS50. Побачимось! 👋