Сервис развивается: тестируем формат, собираем идеи, улучшаем сервис. Есть идеи?

Написать
Войти
Дайджесты
Иерархия файловой системы Linux: зачем нужен FHS и как устроена система

Иерархия файловой системы Linux: зачем нужен FHS и как устроена система

Системный разбор стандарта Filesystem Hierarchy Standard (FHS) в операционных системах Linux: назначение каталогов /etc, /var, /usr, /opt и виртуальных интерфейсов ядра /proc и /sys, двумерная классификация данных по изменчивости и правила безопасного администрирования серверов на практике.

Иерархия файловой системы Linux: зачем нужен FHS и как устроена система

В отличие от операционных систем семейства Windows, где дисковое пространство разделено на независимые буквенные разделы (C:, D:), в Linux используется единое древо файловой системы, начинающееся с корневого каталога /. Чтобы программное обеспечение, системные службы, утилиты и автоматизированные скрипты работали абсолютно одинаково на любых дистрибутивах (Debian, Ubuntu, RHEL, Alpine, Arch), используется общепринятый стандарт Filesystem Hierarchy Standard (FHS). Понимание принципов FHS необходимо каждому системному разработчику, администратору и DevOps-инженеру для правильного размещения конфигураций, логов, исполняемых файлов и виртуальных интерфейсов взаимодействия с ядром.

Двумерная классификация данных в FHS

Фундаментальный принцип стандарта FHS основан на разделении абсолютно всех файлов в системе по двум ортогональным признакам: изменчивости и возможности сетевого разделения.

1. Разделяемые (Shareable) против Неразделяемых (Unshareable)
  • Разделяемые файлы могут передаваться между различными хостами по сети (например, через сетевую файловую систему NFS) без какой-либо модификации. К ним относятся системные программы в /usr/bin, мануалы и документация в /usr/share/man.
  • Неразделяемые файлы строго привязаны к конкретному серверу, его конфигурации и аппаратному обеспечению. Примерами служат сетевые настройки в /etc, логи в /var/log и файлы загрузчика.
2. Статические (Static) против Изменяемых (Variable)
  • Статические файлы изменяются только при вмешательстве администратора или во время обновления системных пакетов (бинарные файлы, библиотеки, документация).
  • Изменяемые файлы генерируются автоматическими службами в процессе работы системы без прямого участия человека (логи, PID-файлы, очереди сообщений, базы данных).

Главные каталоги и их системные роли

Рассмотрим ключевые ветви в дереве файловой системы Linux и их практическое назначение:

  • /boot: Содержит файлы, необходимые для первичной загрузки операционной системы. Здесь хранятся образ ядра Linux (vmlinuz), начальный рамдиск (initramfs) и конфигурации загрузчика GRUB.
  • /dev: Каталог спецфайлов устройств. Каждое подключенное дисковое накопительное устройство, терминал или виртуальный генератор случайных чисел представлены файлом (/dev/sda, /dev/null, /dev/urandom), управлением которыми занимается демон udev.
  • /etc: Хранилище текстовых конфигурационных файлов системы и установленных сервисов. Файлы здесь статические и неразделяемые.
  • /var: Каталог для изменяемых данных. Внутри располагаются логи сервисов (/var/log), базы данных (/var/lib), временные файлы почтовых очередей (/var/spool) и блокировки процессов (/var/lock). Разделение /var и /etc позволяет монтировать раздел конфигураций в режиме "только чтение" (read-only) для повышения безопасности.
  • /usr: Каталог пользователя второй степени (Secondary Hierarchy). В нем находятся общесистемные приложения (/usr/bin), системные библиотеки (/usr/lib) и заголовки C-файлов (/usr/include).
  • /opt и /srv: /opt предназначен для установки стороннего проприетарного или монолитного ПО (например, сторонних баз данных), которое хранит бинарники и библиотеки в своей собственной поддиректории. /srv содержит конкретные данные веб-серверов или FTP-сервисов, предоставляемых данной машиной наружу.
  • /media и /mnt: /media используется для автоматического монтирования съемных накопителей (USB-флешек, оптических дисков). /mnt служит стандартной точкой временного монтирования файловых систем администратором вручную.
  • /tmp против /var/tmp: В /tmp хранятся временные файлы, которые могут очищаться при перезагрузке или по таймеру (systemd-tmpfiles). В /var/tmp помещаются временные данные, которые должны сохраняться между перезапусками системы.

Флаги монтирования и системная безопасность

Разделение файловой системы на специализированные каталоги FHS позволяет применять индивидуальные флаги монтирования на уровне таблицы /etc/fstab для повышения защищенности сервера:

  • Флаг noexec: Запрещает выполнение бинарных файлов на целевом разделе. Применение noexec к директориям /tmp, /var/tmp и /home предотвращает запуск вредоносных исполняемых файлов, загруженных через веб-уязвимости.
  • Флаг nosuid: Блокирует действие битов SUID/SGID, не позволяя локальным пользователям повышать привилегии через утилиты на монтируемом диске.
  • Флаг nodev: Запрещает интерпретацию спецфайлов символьных и блочных устройств на разделе.

Права доступа DAC и MAC в контексте FHS

Структура FHS тесно связана с системами разграничения доступа:

  • Стандартная модель DAC (Discretionary Access Control) оперирует правами пользователей, групп и битами chmod/chown для файлов в /etc и /var.
  • Мандатная модель MAC (Mandatory Access Control, например SELinux или AppArmor) накладывает метки безопасности на каталоги FHS. Например, SELinux блокирует веб-серверу доступ к файлам в /etc/shadow, даже если процесс запущен от пользователя с высокими правами.

Виртуальные файловые системы ядра: /proc и /sys

Особое место в Linux занимают псевдо-файловые системы /proc и /sys. Они не занимают реального места на диске и существуют только в оперативной памяти как интерфейс связи с ядром ОС (реализация концепции Unix "всё есть файл").

  • /proc (procfs): Виртуальный интерфейс доступа к структурам данных процессов и системным метрикам. Директории с числами (/proc/1, /proc/self) содержат информацию о конкретных процессах (PID), открытых дескрипторах файлов, карте памяти и переменных окружения.
  • /sys (sysfs): Иерархическое представление аппаратуры, драйверов и модулей ядра. Через файлы в /sys инженеры могут менять параметры сетевых карт, управлять частотой процессора и считывать технические метрики устройств.

Тенденции развития: UsrMerge и контейнеризация

В современных дистрибутивах Linux (Debian, Fedora, Arch) реализуется инициатива UsrMerge. Историческое разделение между /bin и /usr/bin, а также /lib и /usr/lib (когда корневые /bin требовались для минимального восстановления системы на отдельном диске) уходит в прошлое. Теперь каталог /bin является символической ссылкой на /usr/bin, что упрощает структуру и исключает дублирование системных утилит.

Понимание FHS позволяет правильно изолировать монтируемые контейнеры, настраивать правила безопасности SELinux/AppArmor и создавать предсказуемые CI/CD пайплайны развертывания ПО.