04. Файли, права доступу і користувачі¶
Довідник бонус-уроку «Linux для розробника»
Розділ перевірено: кожну команду виконано в контейнерах Ubuntu, Debian і python:3.12-slim. Урок з вправами — Бонус. Linux.
Навіщо це потрібно¶
Linux — багатокористувацька система. На одному сервері можуть працювати кілька людей, кілька програм і кілька сервісів. Щоб вони не заважали одне одному і не мали доступу до чужих даних, Linux використовує систему прав доступу.
Як Python/Django-розробник, ти регулярно стикатимешся з помилками Permission denied. Щоб їх виправляти — потрібно розуміти, як права працюють.
Просте пояснення¶
Уяви, що кожен файл — це папка з документами. Права доступу — це замки: хто може читати, хто може редагувати, хто може запускати.
Кожен файл і директорія в Linux мають: - власника (user/owner) — зазвичай той, хто створив файл - групу (group) — набір користувачів зі спільними правами - права (permissions) — що можна робити з файлом
Як читати права доступу¶
Введи ls -la і побачиш рядки типу:
-rwxr-xr-- 1 student www-data 4096 Jun 10 12:00 manage.py
^ ^ ^ ^ ^ ^
тип+права links owner group size name
Перший символ — тип файлу¶
| Символ | Тип |
|---|---|
- |
Звичайний файл |
d |
Директорія |
l |
Символічне посилання |
Наступні 9 символів — права¶
Що означають r, w, x¶
| Символ | Назва | Для файлу | Для директорії |
|---|---|---|---|
r |
read | Можна читати вміст | Можна бачити список файлів |
w |
write | Можна змінювати вміст (видалити файл дозволяє w на директорії) |
Можна створювати/видаляти/перейменовувати файли (разом з x) |
x |
execute | Можна запускати як програму | Можна заходити через cd |
- |
немає права | — | — |
Приклад розбору¶
-rwxr-xr--
- = звичайний файл
rwx = власник може: читати, писати, запускати
r-x = група може: читати, запускати (писати — НІ)
r-- = всі інші можуть: тільки читати
Числові права (octal)¶
Часто права записують числами:
| Символ | Число |
|---|---|
r |
4 |
w |
2 |
x |
1 |
- |
0 |
Права для кожного набору — сума чисел:
Типові комбінації:
| Число | Символи | Значення |
|---|---|---|
755 |
rwxr-xr-x |
Власник: все; Група і Всі: читати і запускати |
644 |
rw-r--r-- |
Власник: читати+писати; Всі: тільки читати |
600 |
rw------- |
Тільки власник може читати і писати |
777 |
rwxrwxrwx |
Всі можуть все (небезпечно!) |
Команда chmod — зміна прав¶
chmod +x script.sh # додати право запуску всім
chmod -x script.sh # видалити право запуску
chmod 755 script.sh # встановити конкретні права
chmod 644 settings.py # зазвичай для конфіг-файлів
chmod -R 755 /var/www/ # рекурсивно для директорії
Пояснення:
chmod — change mode. +x — додати (+) право execute (x). Без цього Linux відмовиться запускати файл як скрипт.
Приватний SSH-ключ має мати права 600 — тільки власник може читати. Якщо права ширші, SSH відмовить у підключенні.
Команда chown — зміна власника¶
sudo chown student file.txt # змінити власника (лише root/sudo)
sudo chown student:www-data file.txt # змінити власника і групу
sudo chown -R www-data /var/www/ # рекурсивно
Коли це потрібно:
Якщо ти скопіював файли через scp або sudo, власником може стати root. Тоді Nginx або Gunicorn не зможуть читати файли.
Що таке sudo¶
sudo — Superuser Do. Дозволяє виконати команду з правами суперкористувача (root), навіть якщо ти звичайний користувач.
Уяви, що ти орендар квартири. Звичайні команди — це те, що ти можеш робити у своїй кімнаті.
sudo— це попросити господаря (root) зробити щось у загальних зонах.
Чому не треба постійно працювати під root:
- Помилка в команді може знищити систему без попередження
- Програми, запущені від root, мають доступ до всього
- Якщо сервіс зламають — зловмисник отримає root-права
- Звичайний робочий режим — від імені звичайного користувача
Команда whoami і id¶
whoami # ім'я поточного користувача
id # uid, gid і всі групи користувача
id student # групи конкретного користувача
Практичний приклад — Django проєкт на сервері¶
# Переглянути права файлів проєкту
ls -la /var/www/myapp/
# Зробити скрипт запуску виконуваним
chmod +x /var/www/myapp/start.sh
# Передати файли Nginx-користувачу
sudo chown -R www-data:www-data /var/www/myapp/static/
# Зробити конфіг доступним тільки власнику
chmod 600 /var/www/myapp/.env
Типові помилки початківців¶
Помилка 1: Permission denied при запуску скрипта
Виконай
chmod +x script.sh
Помилка 2: Permission denied при роботі з Nginx/static
Перевір, що Nginx-процес (
www-data) має права на читання директорії
Помилка 3: Виставити chmod 777 на всі файли "щоб точно працювало"
Це небезпечно. Будь-яка програма на сервері зможе змінити твої файли. Використовуй мінімально необхідні права.
Помилка 4: SSH-ключ не приймається
Перевір:
chmod 600 ~/.ssh/id_rsaіchmod 700 ~/.ssh/
Практичне завдання¶
Завдання 1¶
Які права у новоствореного файлу? Що означає кожен символ?Завдання 2¶
chmod +x test_file.py
ls -la test_file.py
chmod 644 test_file.py
ls -la test_file.py
chmod 755 test_file.py
ls -la test_file.py
Завдання 3¶
mkdir secret_config
touch secret_config/.env
echo "SECRET_KEY=abc123" > secret_config/.env
chmod 700 secret_config/
chmod 600 secret_config/.env
ls -la secret_config/
ls -la secret_config/.env
Самоперевірка¶
- [ ] Я можу прочитати вивід
ls -laі пояснити кожен символ прав - [ ] Я розумію різницю між
r,w,xдля файлів і директорій - [ ] Я знаю числову форму прав:
755,644,600 - [ ] Я можу змінити права через
chmod - [ ] Я можу змінити власника через
chown - [ ] Я розумію, що таке
sudoі чому не треба постійно бути root
Короткий підсумок¶
Права доступу — це захист файлів від несанкціонованого доступу. Кожен файл має власника, групу і права (r/w/x) для трьох категорій. chmod міняє права, chown міняє власника, sudo дає тимчасові root-права. Наступний крок — процеси, порти і сервіси.