Нередко администраторы сталкиваются с ситуацией, когда веб-сервер не имеет прав на запись в директорию, или файлы неожиданно изменяются, несмотря на надёжные пароли. Это указывает на недостаточное понимание многоуровневой системы прав доступа в Linux. В данной статье мы рассмотрим три ключевых механизма управления файловыми разрешениями: chown, chmod и chattr, а также затронем расширенные списки контроля доступа (ACL).

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

1. chown: Управление Владением Файлами и Директориями

Команда chown (change owner) используется для изменения владельца и группы файла или директории. Это первый и фундаментальный аспект безопасности, определяющий, кто является «хозяином» данного объекта файловой системы.

Синтаксис:

chown [пользователь]:[группа] [файл/директория]

Примеры использования:

sudo chown www-data:www-data /var/www/html  # Веб-сервер www-data станет владельцем директории
sudo chown alex:developers script.sh        # Файл script.sh переходит пользователю alex в группу developers

Частая ошибка: рекурсивная смена прав со звездочкой

sudo chown -R user:group ./project/  # Опция -R рекурсивно меняет владельца ВСЕМ файлам и поддиректориям внутри папки.

Рекомендация: Для файлов и директорий веб-сервера (nginx/apache) устанавливайте владельца www-data (или соответствующего пользователя веб-сервера). Системные конфигурационные файлы в /etc должны принадлежать пользователю root.

2. chmod: Управление Базовыми Разрешениями Доступа

Команда chmod (change mode) управляет базовыми разрешениями для владельца (u), группы (g) и остальных (o) пользователей. Разрешения задаются в виде трёх цифр (восьмеричная система) или символьного формата.

Восьмеричный формат:

Каждая цифра — это сумма значений разрешений:

  • read (r) = 4 (чтение)
  • write (w) = 2 (запись)
  • execute (x) = 1 (выполнение/доступ)

Примеры использования:

chmod 755 script.sh    # Владелец: читать, писать, выполнять (4+2+1=7); Группа и остальные: читать, выполнять (4+1=5)
chmod 640 config.cfg   # Владелец: читать, писать (4+2=6); Группа: только читать (4); Остальные: ничего (0)

Символьный формат:

Позволяет точечно добавлять (+) или отнимать (-) разрешения.

  • u — владелец (user)
  • g — группа (group)
  • o — остальные (others)
  • a — все (all)

Примеры использования:

chmod u+x script.sh    # Добавить владельцу право на выполнение
chmod o-r file.txt     # Забрать у всех остальных право на чтение
chmod a+w log.txt      # Дать всем право на запись (a = all)

Важно: Для директорий право execute (x) означает не «запуск», а возможность входа в директорию (просмотр её содержимого при наличии права read). Без этого права невозможно открыть директорию, даже если присутствуют права на чтение.

3. chattr: Управление Атрибутами Файловой Системы

Команда chattr (change attributes) позволяет устанавливать атрибуты файловой системы, которые работают на более глубоком уровне, чем стандартные разрешения chmod. Эти атрибуты не могут быть изменены или обойдены простой сменой владельца или прав доступа; они требуют привилегий root и часто используются для дополнительной защиты критически важных файлов.

Установка атрибута (только с правами root):

sudo chattr +i /etc/passwd      # +i (immutable) — файл нельзя изменить, переименовать или удалить. Отменить это может только root.
sudo chattr +a /var/log/auth.log # +a (append only) — в файл можно только дописывать в конец. Идеально для логов, чтобы предотвратить их удаление или изменение предыдущих записей.

Просмотр атрибутов:

lsattr /etc/passwd

Снятие атрибута:

sudo chattr -i /etc/passwd

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

4. ACL: Расширенные Списки Контроля Доступа

Расширенные списки контроля доступа (ACL — Advanced Access Control Lists) используются в более сложных сценариях, когда стандартных трёх категорий (владелец, группа, остальные) недостаточно. ACL позволяют предоставить специфические права доступа конкретному пользователю или группе, не меняя основной группы файла и не добавляя пользователя в существующую группу.

Установка ACL:

setfacl -m u:alex:rwx /shared/project  # Дать пользователю alex полные права (чтение, запись, выполнение) на директорию
setfacl -m g:dev:r-x /shared/project   # Дать группе dev права на чтение и выполнение на директорию

Просмотр ACL:

getfacl /shared/project

Рекурсивное применение:

setfacl -R -m u:alex:rwx /shared/

Полезно: ACL особенно применимы в сценариях веб-хостинга или общих сетевых ресурсов, где различные пользователи должны иметь детально настроенные уровни доступа к одним и тем же файлам или директориям.

Типичная Ошибка Новичка и Правильный Подход

Плохо: Предоставление полных прав доступа всем подряд — серьёзная брешь в безопасности.

sudo chmod 777 /var/www/html

Правильно: Назначение специфических прав доступа только необходимым сущностям.

sudo chown -R www-data:www-data /var/www/html  # Сделать веб-сервер владельцем файлов
sudo chmod -R 750 /var/www/html        # Владелец (www-data) — полные права; Группа (www-data) — чтение и вход; Остальные — никаких прав.

Вместо универсального chmod 777, теперь вы знаете, какой инструмент использовать для каждой конкретной задачи. Запомните правило: сначала chown для назначения владельца, затем chmod для установки базовых прав, и, наконец, chattr для усиленной защиты критических файлов. Этот многослойный подход обеспечивает надёжную и гибкую систему безопасности в вашей Linux-системе.