Модуль 10

chmod, chown та umask

Ось урок, створений спеціально для тебе в стилі 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$.

Інструменти

  1. chown (Change Owner) — Змінює власника. "Цей файл тепер належить Марії".
  2. chmod (Change Mode) — Змінює права. "Марія може читати, але не писати".
  3. 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. 🧩 Підсумок

Отже, що ми сьогодні розібрали?

  1. chmod — це про те, ЩО можна робити (читати, писати, бігати).
  2. chown — це про те, ХТО головний (власник і група).
  3. umask — це налаштування ЗА ЗАМОВЧУВАННЯМ для нових файлів.
  4. Ми навчилися рахувати до 7: Read(4) + Write(2) + Execute(1).

Тепер ви не будете сліпо копіювати команди зі StackOverflow, а розумітимете, кому і навіщо ви відкриваєте доступ.

Що далі? Ви вже вмієте керувати файлами. Але що, як ми захочемо керувати процесами, які ці файли використовують? Як "вбити" завислу програму або запустити її у фоні? Про це — на наступному уроці: Processes, Jobs та Signals.

А поки що — це був CS50. Удачі з кодом! 🖐🎤