Какие права файлов стоит устанавливать на сервере?

calendar_month 17 марта 2025 schedule 10 мин. чтения visibility 217 просмотров
person
Valebyte Team
Какие права файлов стоит устанавливать на сервере?

Какие права файлов стоит устанавливать на сервере?

Настройка прав доступа к файлам и директориям — это не просто рутинная задача, а один из краеугольных камней безопасности любого веб-проекта. В большинстве случаев, для обеспечения баланса между функциональностью и надёжностью, оптимальными правами для файлов являются 644, а для директорий — 755. Эти значения гарантируют, что владелец может читать и записывать (для файлов) или полноценно управлять (для директорий), а веб-сервер и другие пользователи могут только читать содержимое, не имея возможности его изменять или выполнять, что минимизирует риски несанкционированного доступа и модификации. Однако, как и в любой сфере администрирования, существуют исключения и нюансы, которые мы подробно разберём в этой статье, чтобы вы могли принимать обоснованные решения для своих серверов.

Почему права доступа так важны для безопасности сервера?

A secure server rack with a padlock over a file and folder, symbolizing file permissions and server security.

Представьте свой сервер как дом, а файлы и директории — как комнаты и вещи в них. Права доступа — это замки на дверях и разрешения на использование этих вещей. Если вы оставите все двери открытыми (например, 777), любой сможет войти, взять что угодно, изменить или даже поджечь дом. В цифровом мире это означает:

  • Предотвращение несанкционированного доступа: Злоумышленник, получивший доступ к одной части системы (например, через уязвимость в плагине), не сможет легко просматривать или изменять другие, более конфиденциальные файлы, если права настроены корректно.
  • Защита от модификации и внедрения вредоносного кода: Если веб-сервер не имеет прав на запись в файлы, то даже если атакующий сможет загрузить вредоносный скрипт, он не сможет сохранить его в исполняемой директории или изменить существующие файлы сайта.
  • Ограничение выполнения: Запрет на выполнение для обычных файлов (-x) не позволит злоумышленнику запустить произвольный код, даже если он каким-то образом был загружен на сервер.
  • Минимизация ущерба: Принцип наименьших привилегий (Principle of Least Privilege, PoLP) гласит: давать сущности (пользователю, процессу) ровно столько прав, сколько необходимо для выполнения её задач, и ни байта больше. Это значительно сокращает потенциальный вектор атаки и ограничивает ущерб в случае компрометации.

Неправильно настроенные права — это одна из самых распространённых причин взломов и проблем с безопасностью веб-приложений. Поэтому понимание и правильное применение файловых прав является фундаментальным навыком для любого системного администратора.

Основы файловых прав в Linux: Быстрый рефреш для коллег

Для тех, кто уже знаком с Linux, это будет быстрым напоминанием. Но даже опытные коллеги порой нуждаются в освежении базовых концепций.

Понимание символьных и восьмеричных прав

В Linux права доступа к файлам и директориям представлены в двух основных форматах: символьном и восьмеричном.

  • Символьный формат (rwx):
    • r (read) — чтение содержимого файла или списка файлов в директории.
    • w (write) — запись в файл или создание/удаление файлов в директории.
    • x (execute) — выполнение файла (если это скрипт или программа) или вход в директорию.
  • Восьмеричный формат: Каждому символу r, w, x присваивается числовое значение:
    • r = 4
    • w = 2
    • x = 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-план →

Золотой стандарт: Рекомендуемые права для большинства веб-проектов

Как уже говорилось, для подавляющего большинства файлов и директорий на веб-сервере существуют общепринятые безопасные значения.

Файлы (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 для директории
getfacl 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). Это позволяет вам управлять файлами, а веб-серверу — читать их через групповые права.

Практические советы и лучшие практики

  • Принцип наименьших привилегий (PoLP): Это золотое правило. Всегда давайте ровно столько прав, сколько необходимо, и ни байта больше. Если файл не должен быть исполняемым, не давайте ему x. Если веб-серверу не нужно писать в директорию, не давайте ему w.
  • Регулярный аудит: Периодически проверяйте права доступа к критически важным файлам и директориям. Особенно после установки новых плагинов, тем или обновлений. Команды ls -l, find, а также различные сканеры безопасности могут помочь в этом.
  • umask: Узнайте о umask. Это значение определяет права по умолчанию для новых файлов и директорий, создаваемых в системе. Правильная настройка umask может помочь автоматически создавать файлы с более безопасными правами. Обычно для файлов это 0022 (что даёт 644) и для директорий 0002 (что даёт 775).
  • SELinux/AppArmor: Не забывайте, что файловые права — это только один слой защиты. Системы принудительного контроля доступа, такие как SELinux или AppArmor, предоставляют дополнительный уровень безопасности, ограничивая, что процессы могут делать с файлами, даже если стандартные права доступа позволяют больше. Они могут быть сложны в настройке, но обеспечивают мощную защиту.
  • Использование систем контроля версий: Хотя Git сам по себе не управляет правами доступа на сервере, он позволяет легко откатывать изменения, если вы случайно испортили файлы или права при обновлении.
  • Тестирование: После любых изменений прав доступа всегда проверяйте работоспособность вашего сайта и всех его функций.

Выводы

Правильная настройка прав доступа к файлам — это не просто рекомендация, а обязательное условие для обеспечения безопасности и стабильности работы вашего сервера и веб-приложений. Запомните "золотой стандарт": 644 для файлов и 755 для директорий, и используйте его как базовую отправную точку.

Однако будьте готовы к исключениям: конфиденциальные файлы требуют более строгих 600 или 640, а директории, куда веб-серверу нужно записывать данные (загрузки, кеш), потребуют 775 или 770 с правильной настройкой владельца/группы. Всегда следуйте принципу наименьших привилегий и регулярно проводите аудит.

Не пренебрегайте этим аспектом, ведь одна неправильно настроенная директория может стать входной точкой для злоумышленника. Инвестиции времени в понимание и правильное применение файловых прав окупятся спокойствием и надёжностью вашей инфраструктуры. Удачи в администрировании!

Масштабируйте безопасность с облачными решениями

Для максимальной гибкости и масштабируемости, переходите на облачные инстансы. Идеально для растущих проектов.

Начать с облака →

Share this post:

support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.