Які права файлів варто встановлювати на сервері?
Налаштування прав доступу до файлів і директорій - це не просто рутинна задача, а один з наріжних каменів безпеки будь-якого веб-проєкту. У більшості випадків, для забезпечення балансу між функціональністю та надійністю, оптимальними правами для файлів є 644, а для директорій - 755. Ці значення гарантують, що власник може читати та записувати (для файлів) або повноцінно керувати (для директорій), а веб-сервер та інші користувачі можуть лише читати вміст, не маючи можливості його змінювати або виконувати, що мінімізує ризики несанкціонованого доступу та модифікації. Однак, як і в будь-якій сфері адміністрування, існують винятки та нюанси, які ми детально розберемо в цій статті, щоб ви могли приймати обґрунтовані рішення для своїх серверів.
Чому права доступу такі важливі для безпеки сервера?
Уявіть свій сервер як будинок, а файли і директорії - як кімнати і речі в них. Права доступу - це замки на дверях і дозволи на використання цих речей. Якщо ви залишите всі двері відкритими (наприклад, 777), будь-хто зможе увійти, взяти що завгодно, змінити або навіть підпалити будинок. У цифровому світі це означає:
- Запобігання несанкціонованому доступу: Зловмисник, який отримав доступ до однієї частини системи (наприклад, через вразливість у плагіні), не зможе легко переглядати або змінювати інші, більш конфіденційні файли, якщо права налаштовані коректно.
- Захист від модифікації та впровадження шкідливого коду: Якщо веб-сервер не має прав на запис у файли, то навіть якщо атакуючий зможе завантажити шкідливий скрипт, він не зможе зберегти його у виконуваній директорії або змінити існуючі файли сайту.
- Обмеження виконання: Заборона на виконання для звичайних файлів (
-x) не дозволить зловмиснику запустити довільний код, навіть якщо він якимось чином був завантажений на сервер. - Мінімізація збитків: Принцип найменших привілеїв (Principle of Least Privilege, PoLP) говорить: давати сутності (користувачу, процесу) рівно стільки прав, скільки необхідно для виконання її завдань, і ні байта більше. Це значно скорочує потенційний вектор атаки та обмежує збитки у разі компрометації.
Неправильно налаштовані права - це одна з найпоширеніших причин злому та проблем з безпекою веб-застосунків. Тому розуміння та правильне застосування файлових прав є фундаментальною навичкою для будь-якого системного адміністратора.
Основи файлових прав в Linux: Швидкий рефреш для колег
Для тих, хто вже знайомий з Linux, це буде швидким нагадуванням. Але навіть досвідчені колеги часом потребують освіження базових концепцій.
Розуміння символьних і вісімкових прав
В Linux права доступу до файлів і директорій представлені у двох основних форматах: символьному та вісімковому.
- Символьний формат (
rwx):r(read) - читання вмісту файлу або списку файлів у директорії.w(write) - запис у файл або створення/видалення файлів у директорії.x(execute) - виконання файлу (якщо це скрипт або програма) або вхід в директорію.
- Вісімковий формат: Кожному символу
r,w,xприсвоюється числове значення:r= 4w= 2x= 1-(немає права) = 0
rwx= 4+2+1 = 7,rw-= 4+2+0 = 6,r-x= 4+0+1 = 5.
Ці комбінації застосовуються до трьох категорій користувачів:
u(user) - власник файлу або директорії.g(group) - група, якій належить файл або директорія.o(others) - всі інші користувачі системи.
Коли ви бачите права виду 755, це означає:
- Перша цифра (7) - права для власника (
rwx). - Друга цифра (5) - права для групи (
r-x). - Третя цифра (5) - права для інших (
r-x).
Ось коротка таблиця основних комбінацій:
| Вісімкове значення | Символьне значення | Опис |
|---|---|---|
0 |
--- |
Немає прав |
1 |
--x |
Тільки виконання (для файлів) / вхід (для директорій) |
2 |
-w- |
Тільки запис |
3 |
-wx |
Запис і виконання / вхід |
4 |
r-- |
Тільки читання |
5 |
r-x |
Читання і виконання / вхід |
6 |
rw- |
Читання і запис |
7 |
rwx |
Читання, запис і виконання / вхід |
Власник, Група, Інші (User, Group, Other)
Кожен файл і директорія в Linux має власника (користувача) і групу. Управління ними здійснюється командами chown (change owner) і chgrp (change group).
Для веб-серверів критично важливо розуміти, під яким користувачем і групою працює ваш веб-сервер (Apache, Nginx). Зазвичай це www-data, apache, nginx або інші специфічні користувачі. Ці користувачі повинні мати достатні права для читання файлів сайту і, в деяких випадках, для запису в певні директорії (наприклад, для завантаження зображень або кешування).
Порада від Valebyte: Завжди перевіряйте, який користувач запускає ваш веб-сервер. Наприклад, для Nginx на Ubuntu це часто
www-data. Переконайтеся, що файли вашого сайту належать цьому користувачу або групі, або що у цього користувача є необхідні права через групу.Потрібен надійний сервер для ваших проєктів?
Забезпечте безпеку своїх даних з нашими VPS-планами. Ідеально для проєктів, що потребують контролю та продуктивності. - від €4.49/міс.
Обрати VPS-план →
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Золотий стандарт: Рекомендовані права для більшості веб-проєктів
Як вже говорилося, для переважної більшості файлів і директорій на веб-сервері існують загальноприйняті безпечні значення.
Файли (644)
Права: rw-r--r--
- Власник (
u): Може читати і записувати (rw-). Це необхідно для того, щоб ви, як адміністратор, могли змінювати файли (наприклад, оновлювати код, вносити правки в конфігурацію) через SFTP/SSH. - Група (
g): Може тільки читати (r--). Це дозволяє веб-серверу (який часто належить до тієї ж групи або має доступ через неї) читати вміст файлів для відображення сайту. - Інші (
o): Можуть тільки читати (r--). Це дозволяє будь-якому іншому процесу в системі (наприклад, іншим користувачам на загальному хостингу, якщо такі є) читати файли, але не змінювати їх.
Приклади: index.php, .htaccess, style.css, image.jpg, config.php (якщо не містить надчутливих даних).
Директорії (755)
Права: rwxr-xr-x
- Власник (
u): Повні права (rwx). Ви можете створювати, видаляти, перейменовувати файли і піддиректорії всередині неї. - Група (
g): Читання і виконання (r-x). Веб-сервер може переглядати вміст директорії (r) і входити в неї (x), щоб отримати доступ до файлів всередині. - Інші (
o): Читання і виконання (r-x). Аналогічно групі, дозволяє іншим процесам переглядати і входити в директорію.
Приклади: wp-content, uploads (для звичайних файлів), cache (якщо веб-сервер не повинен туди писати), includes.
Ці налаштування забезпечують достатню функціональність для роботи більшості веб-застосунків, одночасно надаючи хороший рівень безпеки.
Винятки з правил: Коли стандартні права не підходять
Як і в будь-якому правилі, тут є винятки. Деякі файли і директорії вимагають особливих прав для коректної роботи або підвищеної безпеки.
Виконувані скрипти (755 або 700)
Якщо у вас є скрипти на PHP, Python, Bash (наприклад, CGI-скрипти, консольні утиліти, крони), які повинні бути виконуваними, їм буде потрібен біт x.
755(rwxr-xr-x): Для скриптів, які повинні виконуватися веб-сервером або іншими користувачами. Наприклад, CGI-скрипти.700(rwx------): Для скриптів, які повинні виконуватися тільки власником (наприклад, ваш особистий скрипт для бекапу, що запускається по крону). Це максимально обмежує доступ.
Важливо: Ніколи не давайте виконувані права (x) файлам, які не повинні бути виконуваними, таким як зображення, CSS, HTML або звичайні PHP-файли, які інтерпретуються, а не виконуються безпосередньо як бінарники.
Файли конфігурації з конфіденційними даними (600 або 640)
Файли, що містять паролі до баз даних, API-ключі або інші чутливі дані, вимагають максимального захисту.
600(rw-------): Власник може читати і записувати, ніхто інший не має ніяких прав. Це найбезпечніший варіант.640(rw-r-----): Власник може читати і записувати, група може читати. Використовується, якщо веб-серверу (який знаходиться в цій групі) потрібно прочитати цей файл, але ніякому іншому користувачу.
Приклади: wp-config.php (для WordPress), .env файли, database.php.
Директорії для завантаження файлів (775 або 770)
Якщо ваш веб-застосунок дозволяє користувачам завантажувати файли (зображення, документи) або створює кеш, сесії, логи, веб-серверу буде потрібне право на запис у відповідні директорії.
775(rwxrwxr-x): Власник і група мають повні права, інші можуть тільки читати і входити. Це безпечно, якщо веб-сервер працює під користувачем, який входить в групу-власника директорії.770(rwxrwx---): Власник і група мають повні права, інші не мають ніяких прав. Більш суворий варіант, якщо ви не хочете, щоб хто-небудь, крім власника і групи, мав доступ.
Важливо: Ніколи не встановлюйте 777 (rwxrwxrwx) на директорії, доступні через веб! Це відкриває вашу систему для запису будь-якому користувачу, що є величезною дірою в безпеці.
Для таких директорій також важливо правильно налаштувати власника і групу. Наприклад, якщо веб-сервер працює як www-data, а директорія належить user:www-data з правами 775, то www-data зможе в неї писати.
Використання ACL (Access Control Lists)
У більш складних сценаріях, коли стандартні права user/group/other недостатні (наприклад, потрібно дати права запису декільком різним користувачам або групам на один і той же ресурс, не розширюючи права для "others"), можна використовувати ACL. Це дозволяє встановлювати більш гранулярні права. Команди setfacl і getfacl допоможуть вам у цьому.
# Дать пользователю 'dev' права на чтение и запись в директорию 'uploads'
setfacl -m u:dev:rwx uploads
Однак ACL — це тема для окремої статті, і для більшості типових веб-проєктів достатньо стандартних прав.
Як керувати правами: Команди chmod та chown
Управління правами доступу здійснюється за допомогою двох основних команд:
chmod – Зміна прав доступу
Команда chmod (change mode) використовується для зміни прав доступу до файлів і директорій.
# Встановити права 644 для файлу index.html
chmod 644 index.html
# Встановити права 755 для директорії images
chmod 755 images
# Рекурсивно встановити права 644 для всіх файлів в поточній директорії та піддиректоріях
find . -type f -exec chmod 644 {} \;
# Рекурсивно встановити права 755 для всіх директорій в поточній директорії та піддиректоріях
find . -type d -exec chmod 755 {} \;
Увага: Будьте вкрай обережні з рекурсивними командами chmod -R або find ... -exec chmod .... Помилка може зробити ваш сайт непрацездатним або, що ще гірше, вразливим.
chown – Зміна власника та групи
Команда chown (change owner) використовується для зміни власника та/або групи файлу або директорії.
# Змінити власника файлу на 'www-data'
chown www-data index.html
# Змінити власника та групу директорії 'uploads' на 'www-data:www-data'
chown www-data:www-data uploads
# Рекурсивно змінити власника та групу для всіх файлів і директорій в /var/www/html
chown -R www-data:www-data /var/www/html
Зазвичай рекомендується, щоб файли вашого вебсайту належали користувачу, під яким ви працюєте (наприклад, youruser), а група була тією, під якою працює вебсервер (наприклад, www-data). Це дозволяє вам керувати файлами, а вебсерверу — читати їх через групові права.
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Практичні поради та найкращі практики
- Принцип найменших привілеїв (PoLP): Це золоте правило. Завжди давайте рівно стільки прав, скільки необхідно, і ні байта більше. Якщо файл не повинен бути виконуваним, не давайте йому
x. Якщо вебсерверу не потрібно писати в директорію, не давайте йомуw. - Регулярний аудит: Періодично перевіряйте права доступу до критично важливих файлів і директорій. Особливо після встановлення нових плагінів, тем або оновлень. Команди
ls -l,find, а також різні сканери безпеки можуть допомогти в цьому. umask: Дізнайтеся проumask. Це значення визначає права за замовчуванням для нових файлів і директорій, які створюються в системі. Правильне налаштуванняumaskможе допомогти автоматично створювати файли з більш безпечними правами. Зазвичай для файлів це0022(що дає644) і для директорій0002(що дає775).- SELinux/AppArmor: Не забувайте, що файлові права — це лише один шар захисту. Системи примусового контролю доступу, такі як SELinux або AppArmor, надають додатковий рівень безпеки, обмежуючи, що процеси можуть робити з файлами, навіть якщо стандартні права доступу дозволяють більше. Вони можуть бути складні в налаштуванні, але забезпечують потужний захист.
- Використання систем контролю версій: Хоча Git сам по собі не управляє правами доступу на сервері, він дозволяє легко відкочувати зміни, якщо ви випадково зіпсували файли або права при оновленні.
- Тестування: Після будь-яких змін прав доступу завжди перевіряйте працездатність вашого сайту і всіх його функцій.
Висновки
Правильне налаштування прав доступу до файлів — це не просто рекомендація, а обов'язкова умова для забезпечення безпеки та стабільності роботи вашого сервера та веб-застосунків. Запам'ятайте "золотий стандарт": 644 для файлів і 755 для директорій, і використовуйте його як базову відправну точку.
Однак будьте готові до винятків: конфіденційні файли вимагають більш суворих 600 або 640, а директорії, куди вебсерверу потрібно записувати дані (завантаження, кеш), потребують 775 або 770 з правильним налаштуванням власника/групи. Завжди дотримуйтесь принципу найменших привілеїв і регулярно проводьте аудит.
Не нехтуйте цим аспектом, адже одна неправильно налаштована директорія може стати вхідною точкою для зловмисника. Інвестиції часу в розуміння і правильне застосування файлових прав окупляться спокоєм і надійністю вашої інфраструктури. Удачі в адмініструванні!
Масштабуйте безпеку з хмарними рішеннями
Для максимальної гнучкості та масштабованості, переходьте на хмарні інстанси. Ідеально для зростаючих проєктів.
Почати з хмари →