Як перевірити дозволи файлів у 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 |
Ви обчислюєте значення дозволу для кожної категорії користувача, додаючи значення разом:
| Комбінація | Обчислення | Числове значення |
|---|---|---|
rwx | 4 + 2 + 1 | 7 |
rw- | 4 + 2 + 0 | 6 |
r-x | 4 + 0 + 1 | 5 |
r-- | 4 + 0 + 0 | 4 |
--- | 0 + 0 + 0 | 0 |
Трьохзначне восьмеричне число представляє повний набір дозволів:
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/passwds у позиції виконання власника вказує на setuid.
2. setgid (s на біті виконання групи)
На файлі програма запускається з привілеями групи. На каталозі нові файли, створені всередину, автоматично успадковують групу каталогу — корисно для спільних папок проектів.
ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project3. Sticky Bit (t на біті виконання інших)
Коли встановлено на каталозі, тільки власник файлу (або root) можуть видаляти або перейменовувати файли всередину, навіть якщо інші мають дозвіл на запис. Це стандартна конфігурація для /tmp:
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpt в кінці сигналізує про те, що sticky bit активний.
Числове представлення спеціальних бітів:
| Спеціальний біт | Числове значення |
|---|---|
| setuid | 4000 |
| setgid | 2000 |
| Sticky bit | 1000 |
Отже drwxrwxrwt = 1777 (1000 + 777).
Повна таблиця довідки дозволів
| Символічно | Числово | Значення на файлі | Значення у каталозі |
|---|---|---|---|
--- | 0 | Без доступу | Без доступу |
--x | 1 | Тільки виконання | Тільки вхід |
-w- | 2 | Тільки запис | Змінити вміст (з x) |
-wx | 3 | Запис + Виконання | Вхід та змінення |
r-- | 4 | Тільки читання | Список імен (потребує x щоб бути корисним) |
r-x | 5 | Читання + Виконання | Список та вхід |
rw- | 6 | Читання + Запис | Список та змінення (без входу) |
rwx | 7 | Повний доступ | Повний контроль |
Приклади дозволів з реального світу
Ось найпоширеніші шаблони дозволів, які ви зустрінете на практиці:
-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Повністю приватний. Тільки власник може отримати доступ. Потрібно для ка
