Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
Linux Адміністрація

Як перевірити дозволи файлів у Linux: повний посібник

Linux живить більшість світових серверів — від середовищ VPS Hosting до серверів корпоративного рівня Dedicated Servers — і це не випадково. Він швидкий, стабільний і побудований з урахуванням безпеки. Одним з найфундаментальніших стовпів цієї безпеки є система дозволів файлів: точний, елегантний механізм, який контролює, хто саме може читати, змінювати або виконувати будь-який файл або каталог у системі.

Незалежно від того, чи ви розробник, який розгортає веб-додаток, системний адміністратор, який посилює безпеку сервера, чи новачок, який вивчає командний рядок, розуміння того, як перевіряти та інтерпретувати дозволи файлів у Linux, є обов’язковою навичкою. Цей посібник охоплює все, що вам потрібно знати — від основ моделі дозволів до розширених спеціальних бітів — з практичними командами та прикладами з реального світу.

Що таке дозволи файлів Linux?

Кожен файл і директорія в Linux мають набір дозволів, прикріплених до них. Ці дозволи визначають, які дії дозволені і кому. Існує три основних типи дозволів:

ДозвілСимволЩо він робить з файломЩо він робить з директорією
ЧитанняrПереглянути вміст файлуВивести список імен файлів всередині
ЗаписwЗмінити або видалити файлСтворити або видалити файли всередині
ВиконанняxЗапустити файл як програмуУвійти (перейти в) директорію

Ці три дозволи застосовуються незалежно до трьох окремих категорій користувачів:

  • Власник (користувач) — користувач, який володіє файлом, зазвичай його творець.
  • Група — будь-який користувач, який належить до призначеної групи файлу.
  • Інші — всі інші в системі.

Ця матриця дозволів три на три дає адміністраторам Linux детальний, потужний контроль над доступом до кожного ресурсу в системі.

Як перевірити дозволи файлів: команда ls -l

Найшвидший і найчастіше використовуваний метод перевірки дозволів файлів — це команда ls -l (формат довгого списку).

ls -l file.txt

Приклад виведення:

-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 file.txt

Давайте розберемо кожен компонент цього виведення:

-  rw-  r--  r--   1   alice   developers   1024   Aug 16 12:30   file.txt
│   │    │    │    │     │          │          │         │             │
│   │    │    │    │     │          │          │         │             └─ Filename
│   │    │    │    │     │          │          │         └─ Last modified
│   │    │    │    │     │          │          └─ File size (bytes)
│   │    │    │    │     │          └─ Group name
│   │    │    │    │     └─ Owner name
│   │    │    │    └─ Number of hard links
│   │    │    └─ Others' permissions
│   │    └─ Group's permissions
│   └─ Owner's permissions
└─ File type (- = regular file, d = directory, l = symlink)

Отже -rw-r--r-- говорить нам:

  • Власник (alice): Читання + Запис (rw-)
  • Група (developers): Тільки читання (r--)
  • Інші: Тільки читання (r--)

Перевірка дозволів для кількох файлів

Щоб побачити дозволи для всіх файлів у каталозі одночасно:

ls -la /var/www/html

Прапор -a включає приховані файли (ті, що починаються з крапки). Це особливо корисно при аудиті каталогів веб-сервера в середовищі Shared Web Hosting або VPS.

Отримання детальної інформації про дозволи за допомогою stat

Для більш детального розбору — включаючи як символічні, так і числові представлення — використовуйте команду stat:

stat file.txt

Приклад виведення:

  File: file.txt
  Size: 1024            Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 131073      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   alice)   Gid: ( 1000/developers)
Access: 2024-08-16 12:30:00.000000000 +0000
Modify: 2024-08-16 12:30:00.000000000 +0000
Change: 2024-08-16 12:30:00.000000000 +0000

Ключовий рядок:

Access: (0644/-rw-r--r--)  Uid: ( 1000/   alice)   Gid: ( 1000/developers)

Це дає вам:

  • Числове (восьмеричне) позначення: 0644
  • Символічне позначення: -rw-r--r--
  • ID користувача (UID) та ID групи (GID) з їхніми читаними іменами

Команда stat є неоціненною при усуненні помилок дозволів на виробничих серверах, оскільки вона надає весь необхідний контекст в одному виведенні.

Розуміння числової (восьмеричної) нотації дозволів

Дозволи Linux можна виразити як числа, що є форматом, який використовується командами на кшталт chmod. Кожному типу дозволу присвоюється значення:

ДозвілЧислове значення
Читання (r)4
Запис (w)2
Виконання (x)1
Без дозволу (-)0

Ви обчислюєте значення дозволу для кожної категорії користувача, додаючи значення разом:

КомбінаціяОбчисленняЧислове значення
rwx4 + 2 + 17
rw-4 + 2 + 06
r-x4 + 0 + 15
r--4 + 0 + 04
---0 + 0 + 00

Трьохзначне восьмеричне число представляє повний набір дозволів:

0644  →  Owner: 6 (rw-)  |  Group: 4 (r--)  |  Others: 4 (r--)
0755  →  Owner: 7 (rwx)  |  Group: 5 (r-x)  |  Others: 5 (r-x)
0700  →  Owner: 7 (rwx)  |  Group: 0 (---)  |  Others: 0 (---)

Перевірка дозволів на каталогах

Каталоги використовують ту саму модель дозволів, але значення кожного біта дещо відрізняється. Використовуйте ls -ld (зверніть увагу на прапор -d) для перевірки самого каталогу, а не його вмісту:

ls -ld myfolder

Приклад виведення:

drwxr-x--- 2 alice developers 4096 Aug 16 12:30 myfolder

Перший символ d підтверджує, що це каталог. Дозволи розбиваються так:

  • Власник (alice): rwx — Може перелічувати, створювати/видаляти файли та входити в каталог
  • Група (developers): r-x — Може перелічувати файли та входити, але не може створювати або видаляти
  • Інші: --- — Немає доступу взагалі

> Важливо: Біт виконання (x) на каталозі означає можливість входити в нього (тобто використовувати cd). Без x користувач не може перейти в каталог, навіть якщо має дозвіл на читання. Це часта причина плутанини для новачків.

Спеціальні біти дозволів: setuid, setgid та Sticky Bit

Крім стандартних дев’яти бітів дозволів, Linux підтримує три спеціальні біти дозволів, які забезпечують розширений контроль доступу:

1. setuid (s на біті виконання власника)

Коли встановлено на виконуваному файлі, програма запускається з привілеями власника файлу, а не користувача, який її викликав. Саме так команди на кшталт passwd дозволяють звичайним користувачам змінювати /etc/shadow (який належить root).

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Mar 27 2023 /usr/bin/passwd

s у позиції виконання власника вказує на setuid.

2. setgid (s на біті виконання групи)

На файлі програма запускається з привілеями групи. На директорії нові файли, створені всередині, автоматично успадковують групу директорії — корисно для спільних папок проектів.

ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project

3. Sticky Bit (t на біті виконання для інших)

Коли встановлено на директорії, тільки власник файлу (або root) може видаляти або перейменовувати файли всередині неї, навіть якщо інші мають дозвіл на запис. Це стандартна конфігурація для /tmp:

ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmp

t в кінці сигналізує про активність sticky bit.

Числове представлення спеціальних бітів:

Спеціальний бітЧислове значення
setuid4000
setgid2000
Sticky bit1000

Отже drwxrwxrwt = 1777 (1000 + 777).

Таблиця повного довідника дозволів

СимволічнийЧисловийЗначення для файлуЗначення для каталогу
---0Без доступуБез доступу
--x1Тільки виконанняТільки вхід
-w-2Тільки записЗмінення вмісту (з x)
-wx3Запис + виконанняВхід та змінення
r--4Тільки читанняСписок імен (потребує x для корисності)
r-x5Читання + виконанняСписок та вхід
rw-6Читання + записСписок та змінення (без входу)
rwx7Повний доступПовний контроль

Приклади дозволів у реальному світі

Ось найпоширеніші шаблони дозволів, які ви зустрінете на практиці:

-rw-r--r-- (0644) — Стандартний файл

-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 config.txt

Власник може читати та писати. Група та інші можуть тільки читати. Типово для файлів конфігурації та веб-контенту.

-rwxr-xr-x (0755) — Виконуваний скрипт або бінарний файл

-rwxr-xr-x 1 alice developers 4096 Aug 16 12:30 deploy.sh

Власник має повний доступ. Всі інші можуть читати та виконувати, але не можуть змінювати. Стандартно для shell-скриптів, бінарних файлів веб-сервера та публічних виконуваних файлів.

-rw------- (0600) — Приватний файл

-rw------- 1 alice alice 1679 Aug 16 12:30 id_rsa

Тільки власник може читати або писати. Ніякого доступу для інших. Необхідно для приватних ключів SSH — SSH відмовиться використовувати файл ключа з більш широкими дозволами.

drwxr-xr-x (0755) — Стандартна публічна директорія

drwxr-xr-x 5 alice developers 4096 Aug 16 12:30 public_html

Поширено для директорій веб-кореня. Власник має повний контроль; інші можуть переглядати та входити.

drwx------ (0700) — Приватна директорія

drwx------ 3 alice alice 4096 Aug 16 12:30 .ssh

Повністю приватна. Тільки власник може отримати доступ. Необхідно для директорії ~/.ssh.

drwxrwxrwt (1777) — Доступна для запису всім зі sticky bit

drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmp

Кожен може створювати файли, але тільки власник кожного файлу може видалити свої файли.

Практичні поради для серверних середовищ

Якщо ви керуєте Linux сервером — чи то VPS, що запускає веб-додаток, поштовий сервер, захищений SSL Certificate, або машина, що розміщує кілька доменів, зареєстрованих через Domain Registration — ось деякі основні рекомендації щодо дозволів:

  1. Ніколи не встановлюйте 777 для файлів або каталогів, якщо у вас немає дуже конкретної, тимчасової причини. Файли, доступні для запису всім, — це серйозний ризик безпеки.
  2. Файли веб-сервера (наприклад, під /var/www/) зазвичай повинні мати 644 для файлів і 755 для каталогів, належати користувачу вашого додатку.
  3. SSH ключі повинні мати 600 для приватних ключів і 644 для публічних ключів. SSH суворо це контролює.
  4. Файли конфігурації, що містять паролі або ключі API, повинні мати 600 або 640 максимум.
  5. Використовуйте find для аудиту дозволів у дереві каталогів:
   # Find all world-writable files (potential security risk)
   find /var/www -type f -perm -o+w

   # Find all SUID files (for security auditing)
   find / -type f -perm -4000 2>/dev/null

Швидкий довідник команд

ЗавданняКоманда
Список дозволів файлуls -l filename
Список дозволів усіх файлів у каталозіls -la /path/to/dir
Перевірка дозволів самого каталогуls -ld /path/to/dir
Отримати повні деталі включно з числовими дозволамиstat filename
Зміна дозволів (символічна)chmod u+x filename
Зміна дозволів (числова)chmod 755 filename
Зміна власника файлуchown user:group filename
Рекурсивна зміна дозволівchmod -R 755 /path/to/dir
Пошук файлів, доступних для запису світуfind . -perm -o+w -type f

Висновок

Розуміння дозволів файлів Linux — це не просто академічна вправа — це практичний, повсякденний навик для всіх, хто керує серверами, розгортає додатки або працює в середовищі Linux. Щоб підсумувати ключові моменти:

  • Використовуйте ls -l для швидкого, зрозумілого для людини огляду дозволів на файли та каталоги.
  • Використовуйте stat коли вам потрібні як символічні, так і числові представлення разом з деталями власності.
  • Оволодійте обома нотаціями — символічною (rwx) та числовою (755, 644) — оскільки різні інструменти та документація використовують обидві взаємозамінно.
  • Пам’ятайте про різницю каталогів: біт виконання (x) на каталозі означає можливість входу в нього, а не його запуск.
  • Будьте обізнані зі спеціальними бітами — setuid, setgid та sticky bit — оскільки вони часто з’являються на виробничих системах і мають значні наслідки для безпеки.

Правильне управління дозволами — це основа безпеки Linux. Незалежно від того, чи ви запускаєте особистий проект на VPS Hosting або адмініструєте флот Dedicated Servers, правильна установка дозволів з самого початку збереже вас від вразливостей безпеки, зламаних додатків та безлічі годин усунення несправностей у майбутньому.