Ось урок, створений спеціально для тебе в стилі CS50. Уяви, що ми зараз в аудиторії Sanders Theatre, я ходжу сценою, жестикулюю, і ми розбираємося з тим, хто має право чіпати твої файли.
🎓 CS50: Linux Permissions. Тема: chmod, chown та umask
Привіт, друзі! 👋
Сьогодні ми поговоримо про безпеку, приватність і порядок. Але не про складні алгоритми шифрування, а про базу, на якій тримається весь Linux-світ (і, ймовірно, сервери, на яких працюватиме ваш код).
1. 🔥 Вступ: проблема та мотивація
Уявіть ситуацію: ви написали геніальний скрипт, який має автоматизувати вашу роботу. Ви гордо вводите команду запуску, натискаєте Enter і...
bash: ./script.sh: Permission denied
😡 Відмовлено в доступі.
Або інша ситуація: ви завантажили сайт на сервер, а відвідувачі бачать помилку 403 Forbidden. Сервер каже: "Я бачу ці файли, але мені заборонено їх читати".
Чому так відбувається? Тому що Linux — це багатокористувацька система. Це як великий офісний центр. * Є ваш особистий кабінет (ваша домашня папка). * Є спільна кухня (системні папки). * Є кабінет директора (root).
Якби кожен міг зайти в будь-який кабінет і викинути документи у смітник, настав би хаос, правда?
Ось тут на сцену виходять chmod, chown та umask. Це ваші інструменти, щоб роздавати ключі від дверей і вирішувати, хто може зайти "подивитися", хто може "переставити меблі", а хто взагалі не має права наближатися.
2. 🧠 Теоретична база (Що під капотом?)
У Linux у кожного файлу є "паспорт". Давайте поглянемо на нього. Коли ви вводите ls -l, ви бачите щось таке:
-rwxr-xr-- 1 david staff ... script.sh
Що це за магія? Давайте розшифруємо.
🔑 Три категорії людей (Who?)
Linux ділить усіх на три групи щодо будь-якого файлу: 1. User (u) — Власник. Це ви (або той, хто створив файл). 2. Group (g) — Група. Ваші колеги по проекту. Наприклад, група "developers". 3. Others (o) — Решта світу. Усі інші користувачі системи.
🛠 Три типи дій (What?)
Що можна робити з файлом? 1. Read (r) — Читати. (Дивитися вміст файлу або список файлів у папці). 2. Write (w) — Писати. (Змінювати вміст або видаляти файл). 3. Execute (x) — Виконувати. (Запускати як програму). Важливо: Для папок це означає право "зайти" всередину папки (cd).
🔢 Математика прав (Octal Notation)
Комп'ютери люблять цифри. Кожній букві відповідає число: * r = 4 * w = 2 * x = 1
Якщо ви хочете дати повний доступ (читати + писати + виконувати), ви просто додаєте: $4 + 2 + 1 = 7$. Тільки читати і виконувати? $4 + 0 + 1 = 5$.
Інструменти
chown(Change Owner) — Змінює власника. "Цей файл тепер належить Марії".chmod(Change Mode) — Змінює права. "Марія може читати, але не писати".umask(User Mask) — Це "фільтр за замовчуванням". Коли ви створюєте новий файл, які права він отримає автоматично?umaskвирішує, які права забрати зі старту.
3. 🧪 Приклади (Step-by-step)
Приклад 1: "Зроби це, будь ласка, виконуваним"
Ви написали hello.sh. За замовчуванням він може мати права rw-r--r-- (644).
Ви намагаєтесь його запустити — помилка.
Що ми робимо? Нам треба додати x (execute) для власника (u).
chmod u+x hello.sh
Результат: Тепер власник може його запустити.
Приклад 2: "Цифрова магія веб-сервера"
У реальному проекті для файлів сайту часто ставлять права 644, а для папок — 755. Давайте розберемо, чому саме ці цифри?
Файл (644): * Власник (6 = 4+2): Читає і пише. * Група (4): Тільки читає. * Інші (4): Тільки читають (це важливо, щоб веб-сервер міг віддати файл користувачу!).
Папка (755):
* Власник (7): Повний доступ.
* Група та Інші (5 = 4+1): Можуть подивитися список файлів і зайти в папку (cd), але не можуть створювати там сміття (немає Write).
chmod 644 index.html
chmod 755 images/
Приклад 3: Передача естафети (chown)
Ви (користувач dev) залили файли на сервер, але сервер працює від імені користувача www-data. Сервер намагається записати кеш і падає з помилкою.
Чому? Бо власник файлу — dev, а сервер — www-data.
Рішення: Змінити власника папки на того, хто нею користується.
sudo chown -R www-data:www-data /var/www/html/cache
-R— рекурсивно (для всіх файлів всередині).www-data:www-data— користувач:група.
4. 🛠 Практична частина
Час "забруднити руки" в терміналі. Виконуйте по черзі:
Завдання 1: Створи та перевір
1. Створіть пустий файл: touch secret.txt
2. Перевірте його права: ls -l secret.txt
3. Питання: Які цифри відповідають цим буквам? (наприклад, rw-r--r-- → 644).
Завдання 2: Режим "Цілком таємно" 1. Зробіть так, щоб цей файл могли читати й змінювати тільки ви, а група та інші — взагалі нічого не бачили. 2. Яку команду використаєте? (Підказка: для групи та інших має бути 0).
Завдання 3: Фатальна помилка (simulation)
1. Створіть папку mydir і зайдіть у неї.
2. Вийдіть назад (cd ..) і заберіть у себе право на виконання (x) для цієї папки: chmod u-x mydir.
3. Спробуйте знову зайти в неї: cd mydir.
4. Що сталося? Чому read права (які залишилися) недостатньо, щоб зробити cd?
Завдання 4: umask детективи
1. Введіть команду umask. Ви побачите щось типу 0022.
2. Це означає, що від базових прав (666 для файлів) віднімається 022.
3. $666 - 022 = 644$.
4. Спробуйте змінити umask на 0000 (umask 0000), створіть новий файл. Які в нього права? (Увага: поверніть umask назад після тесту!).
5. 💡 Мислення як у розробника
Як відрізнити новачка від профі, дивлячись на history команд?
🚫 Помилка новачка:
chmod 777 file
"Воно не працювало, я дав права всім на все, і тепер працює!"
Це еквівалент того, щоб зняти вхідні двері з петель, бо ви загубили ключі. Будь-який скрипт, будь-який хакер, будь-який вірус тепер може робити з цим файлом що завгодно. Ніколи не використовуйте 777 на продакшені.
🧠 Мислення профі (Principle of Least Privilege):
"Які мінімальні права потрібні цій програмі, щоб вона працювала?"
* Якщо скрипту треба тільки читати конфіг — дай 400 (тільки власнику read).
* Якщо веб-серверу треба віддавати статику — дай 644.
Лайфхак: Запам'ятайте лише три комбінації, які покривають 90% задач: 1. 755 — для папок і скриптів (власник все, інші читають/виконують). 2. 644 — для звичайних файлів (власник пише, інші читають). 3. 400 або 600 — для SSH ключів та паролів (тільки власник!).
6. 🧩 Підсумок
Отже, що ми сьогодні розібрали?
- chmod — це про те, ЩО можна робити (читати, писати, бігати).
- chown — це про те, ХТО головний (власник і група).
- umask — це налаштування ЗА ЗАМОВЧУВАННЯМ для нових файлів.
- Ми навчилися рахувати до 7: Read(4) + Write(2) + Execute(1).
Тепер ви не будете сліпо копіювати команди зі StackOverflow, а розумітимете, кому і навіщо ви відкриваєте доступ.
Що далі? Ви вже вмієте керувати файлами. Але що, як ми захочемо керувати процесами, які ці файли використовують? Як "вбити" завислу програму або запустити її у фоні? Про це — на наступному уроці: Processes, Jobs та Signals.
А поки що — це був CS50. Удачі з кодом! 🖐🎤