Ось урок, згенерований за твоїм майстер-промптом. Я обрав тему 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--
- Розбиваємо на трійки:
rwx|r-x|r-- - Перша трійка (Власник/David):
rwx(4+2+1 = 7). Девід може все: читати, писати, запускати. - Друга трійка (Група/Students):
r-x(4+0+1 = 5). Студенти можуть читати і запускати, але не можуть змінювати код! - Третя трійка (Інші):
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. 🧩 Підсумок
Отже, що ми маємо у своєму арсеналі?
- Ownership (u, g, o): Знаємо, хто "хазяїн", хто "свої", а хто "чужі".
- Permissions (r, w, x): Знаємо, що читання, запис і виконання — це різні речі.
- Octal (755, 644): Розуміємо, що це не магія, а проста арифметика прав.
Тепер ви не просто користувач, який тицяє кнопки. Ви — адміністратор, який контролює доступ до інформації.
Що далі? Тепер, коли ми вміємо захищати файли, наступного разу ми поговоримо про Процеси. Хто саме стукає у двері ваших файлів і як операційна система керує цим натовпом програм?
Це був CS50. Побачимось! 👋