Перейти до змісту

04. Файли, права доступу і користувачі

Навіщо це потрібно

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 символів — права

rwxr-xr--
^^^       — права власника (owner)
   ^^^    — права групи (group)
      ^^^ — права всіх інших (others)

Що означають r, w, x

Символ Назва Для файлу Для директорії
r read Можна читати вміст Можна бачити список файлів
w write Можна змінювати і видаляти Можна створювати/видаляти файли
x execute Можна запускати як програму Можна заходити через cd
- немає права — —

Приклад розбору

-rwxr-xr--

-    = звичайний файл
rwx  = власник може: читати, писати, запускати
r-x  = група може: читати, запускати (писати — НІ)
r--  = всі інші можуть: тільки читати

Числові права (octal)

Часто права записують числами:

Символ Число
r 4
w 2
x 1
- 0

Права для кожного набору — сума чисел:

rwx = 4+2+1 = 7
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4
--- = 0+0+0 = 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 +x script.sh
chmod — change mode. +x — додати (+) право execute (x). Без цього Linux відмовиться запускати файл як скрипт.

chmod 600 ~/.ssh/id_rsa
Приватний SSH-ключ має мати права 600 — тільки власник може читати. Якщо права ширші, SSH відмовить у підключенні.


Команда chown — зміна власника

chown student file.txt              # змінити власника
chown student:www-data file.txt     # змінити власника і групу
chown -R www-data /var/www/         # рекурсивно

Коли це потрібно: Якщо ти скопіював файли через scp або sudo, власником може стати root. Тоді Nginx або Gunicorn не зможуть читати файли.


Що таке sudo

sudo apt update
sudo systemctl restart nginx
sudo nano /etc/nginx/nginx.conf

sudo — Superuser Do. Дозволяє виконати команду з правами суперкористувача (root), навіть якщо ти звичайний користувач.

Уяви, що ти орендар квартири. Звичайні команди — це те, що ти можеш робити у своїй кімнаті. sudo — це попросити господаря (root) зробити щось у загальних зонах.

Чому не треба постійно працювати під root:

  1. Помилка в команді може знищити систему без попередження
  2. Програми, запущені від root, мають доступ до всього
  3. Якщо сервіс зламають — зловмисник отримає root-права
  4. Звичайний робочий режим — від імені звичайного користувача

Команда 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

touch test_file.py
ls -la test_file.py
Які права у новоствореного файлу? Що означає кожен символ?

Завдання 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-права. Наступний крок — процеси, порти і сервіси.