ОПИСАНИЕ
Представьте что вас ночью подняли по тревоге — сервер ведёт себя странно. Вы подключаетесь по SSH и… не знаете куда смотреть. Где логи? Где конфиги? Где вообще всё находится? Без понимания структуры файловой системы Linux вы как чужой в чужом городе без карты. Эта карта — перед вами.
ЧТО ВЫ УЗНАЕТЕ
Как устроена файловая система Linux и чем она отличается от Windows
Что находится в каждой ключевой директории
Где хранятся конфиги, логи, бинарники и данные
Почему структура FHS важна для безопасности
Как использовать знание структуры при анализе инцидентов
ВСЁ ЕСТЬ ФАЙЛ
В Linux всё является файлом. Не только документы и программы — но и устройства, процессы, сетевые соединения. Жёсткий диск — файл. Клавиатура — файл. Оперативная память — файл. Это не метафора, это архитектурный принцип который делает Linux невероятно гибким и предсказуемым.
Файловая система Linux начинается с корня — символа /. Всё остальное находится внутри него. Нет дисков C:\ и D:\ как в Windows — есть одно дерево директорий, в которое монтируются все устройства и разделы.
СТАНДАРТ FHS
Структура директорий в Linux определяется стандартом FHS — Filesystem Hierarchy Standard. Это не случайный набор папок, а чётко описанное соглашение о том что где должно лежать. Любой дистрибутив Linux следует этому стандарту — поэтому зная структуру Ubuntu вы сразу ориентируетесь и в Debian и в Rocky Linux.
КАРТА ФАЙЛОВОЙ СИСТЕМЫ
/
├── etc/ # конфиги всех сервисов
│ ├── ssh/ # конфиг SSH
│ ├── nginx/ # конфиг nginx
│ ├── systemd/ # конфиг systemd
│ └── cron.d/ # задания cron
├── var/ # переменные данные
│ ├── log/ # логи системы и сервисов
│ │ ├── auth.log # попытки входа
│ │ ├── syslog # системные события
│ │ └── nginx/ # логи веб-сервера
│ ├── www/ # файлы веб-сайтов
│ └── lib/ # данные приложений
├── home/ # домашние директории пользователей
│ └── username/
│ └── .ssh/ # SSH-ключи пользователя
├── root/ # домашняя директория root
├── bin/ -> usr/bin/ # системные команды
├── sbin/ -> usr/sbin/ # команды администрирования
├── usr/
│ ├── bin/ # исполняемые файлы
│ ├── sbin/ # системные утилиты
│ └── lib/ # библиотеки
├── tmp/ # временные файлы (опасная зона!)
├── proc/ # виртуальная ФС — процессы и ядро
│ └── sys/ # параметры ядра (sysctl)
├── sys/ # виртуальная ФС — устройства
├── dev/ # файлы устройств
│ ├── sda # первый диск
│ ├── null # чёрная дыра
│ └── urandom # генератор случайных чисел
├── boot/ # загрузчик и ядро
├── lib/ -> usr/lib/ # библиотеки
├── opt/ # стороннее ПО
├── srv/ # данные сервисов
├── mnt/ # временное монтирование
└── media/ # съёмные устройства
КЛЮЧЕВЫЕ ДИРЕКТОРИИ
/ — корень файловой системы. Всё начинается отсюда. Думайте о нём как о стволе дерева — все остальные директории это ветви.
/etc — сердце конфигурации системы. Здесь живут все конфигурационные файлы: настройки сети, SSH, nginx, PostgreSQL, cron и сотни других сервисов. Если что-то настраивается — конфиг почти наверняка в /etc. Это первое место куда смотрит администратор при изучении системы — и первое место куда смотрит злоумышленник после взлома. Получил доступ к /etc — считай получил доступ ко всей системе.
/var — переменные данные. Всё что меняется в процессе работы: логи, базы данных, очереди почты, кэш пакетов. Именно здесь растут файлы которые могут заполнить диск если за ними не следить. Один переполненный /var может положить весь сервер — без единой атаки извне.
/var/log — директория логов. Здесь хранится история всего что происходило в системе. /var/log/auth.log — попытки входа и авторизации. /var/log/syslog — системные события (если установлен rsyslog). На системах с чистым systemd логи читаются через journalctl. При любом инциденте первым делом идём сюда. Кстати, первое что делает умный злоумышленник после взлома — чистит именно эти логи.
/home — домашние директории пользователей. У каждого своя: /home/username. Здесь хранятся личные файлы и SSH-ключи (~/.ssh/).
Права доступа к SSH-ключам — критически важная тема. Приватный ключ с правами 644 — это дыра в безопасности размером с ворота. Права 644 означают что ключ может прочитать любой пользователь системы. То есть если на сервере есть хоть один скомпрометированный аккаунт — злоумышленник читает ваш приватный ключ и подключается к любому серверу куда этот ключ открывает доступ. Правильные права: 600 для файла ключа и 700 для директории ~/.ssh. SSH сам откажется работать если увидит что ключ «слишком открыт» — выдаст ошибку «Permissions are too open».
/root — домашняя директория суперпользователя root. Живёт отдельно от /home — намеренно. Root не обычный пользователь, у него и дом особый.
/bin и /usr/bin — исполняемые файлы системных команд. ls, cp, mv, cat и тысячи других утилит. В современных дистрибутивах /bin — символическая ссылка на /usr/bin. Если эти файлы кто-то подменил — система скомпрометирована на самом низком уровне.
/sbin и /usr/sbin — системные утилиты для администрирования. Команды которые требуют прав root: fdisk, iptables, useradd. Обычному пользователю они недоступны — и это правильно.
/tmp — временные файлы. Очищается при перезагрузке. В /tmp может писать любой пользователь — это классическое место где злоумышленники оставляют свои инструменты после взлома. После ребута следы исчезают. Хороший признак взлома — подозрительные исполняемые файлы в /tmp.
/proc — виртуальная файловая система. Не существует на диске — создаётся ядром в памяти при запуске. Содержит информацию о запущенных процессах и параметрах ядра. /proc/sys/ — именно здесь живут параметры которые мы меняем через sysctl. Хотите знать что реально происходит в системе прямо сейчас — смотрите в /proc.
/sys — ещё одна виртуальная файловая система. Информация об устройствах и драйверах ядра. Как /proc, но про железо.
/dev — файлы устройств. /dev/sda — первый жёсткий диск. /dev/null — «чёрная дыра» куда можно перенаправить любой вывод который не нужен. /dev/random и /dev/urandom — генераторы случайных чисел, которые используются в криптографии. Без /dev/urandom не работает ни один SSL-сертификат.
/boot — файлы загрузки системы. Ядро Linux, initrd, конфиг загрузчика GRUB. Трогать без необходимости не стоит — ошибка здесь и система не загрузится вовсе.
/lib и /usr/lib — библиотеки. Общий код который используют множество программ — аналог DLL в Windows. Подмена библиотеки это один из методов атаки — называется library hijacking.
/opt — дополнительное программное обеспечение. Программы которые не вписываются в стандартную структуру FHS. Часто сюда устанавливают коммерческое ПО и самостоятельно скомпилированные программы.
/srv — данные для сервисов. По стандарту FHS здесь должны лежать данные которые сервер предоставляет — файлы веб-сайтов, FTP-данные. На практике многие дистрибутивы используют /var/www для веб-данных.
/mnt и /media — точки монтирования. /mnt — для временного монтирования файловых систем администратором. /media — для съёмных устройств (USB, CD).
ПРАКТИКА
Посмотрите корневую структуру файловой системы:
ls -la /
Изучите содержимое /etc:
ls /etc | head -30
Посмотрите логи системы:
ls -la /var/log/
Найдите все конфигурационные файлы SSH:
ls -la /etc/ssh/
Посмотрите информацию о системе через /proc:
cat /proc/version
cat /proc/cpuinfo | head -20
cat /proc/meminfo | head -10
Проверьте параметры ядра которые влияют на безопасность:
cat /proc/sys/net/ipv4/ip_forward
cat /proc/sys/kernel/dmesg_restrict
Узнайте сколько места занято на дисках:
df -h
Найдите самые большие файлы в /var/log:
du -sh /var/log/* | sort -rh | head -10
ТИПИЧНЫЕ ОШИБКИ
Хранить данные приложений в /tmp. Это временная директория — всё в ней удаляется при перезагрузке. Данные приложений должны быть в /var или /opt.
Игнорировать переполнение /var. Логи растут, кэш пакетов накапливается — и однажды /var заполняется до 100%. Система начинает вести себя непредсказуемо. Настройте logrotate и мониторинг дискового пространства.
Давать приложениям права на запись в /etc. Конфигурационные файлы должны изменяться только администратором, не приложением. Если приложение само пишет в /etc — это красный флаг.
Хранить секреты в /tmp или /home. SSH-ключи, пароли, токены — только в директориях с ограниченными правами доступа и правильными permissions.
ВАЖНО ЗНАТЬ
/proc и /sys не занимают место на диске — это виртуальные файловые системы в памяти. Не пытайтесь их очистить чтобы освободить место.
Символические ссылки — /bin → /usr/bin, /lib → /usr/lib — это нормально для современных дистрибутивов. Не пугайтесь когда видите их в ls -la.
Точки монтирования — это просто директории. Когда вы монтируете диск в /mnt/backup, содержимое диска становится доступно через эту директорию. Отмонтируете — директория остаётся, но пустая.
Безопасность файловой системы начинается с правильных permissions. Файл конфига с правами 777 — это катастрофа. Правильные права для /etc — 755, для приватных ключей — 600, для директории .ssh — 700.
ПРОВЕРЬТЕ СЕБЯ
1. В какой директории хранятся конфигурационные файлы всех сервисов?
2. Где искать логи системы и сервисов при расследовании инцидента?
3. Чем /proc отличается от обычной директории на диске?
4. Почему /tmp опасна с точки зрения безопасности?
5. Какие права доступа должны быть у приватного SSH-ключа и почему?
ВЫВОДЫ
Файловая система Linux — это не хаос, а чётко организованная структура с логикой за каждой директорией. Знание этой структуры — базовый навык администратора безопасности. Когда произойдёт инцидент — а он произойдёт — вы будете знать куда смотреть: /var/log для логов, /etc для конфигов, /proc для состояния системы. Это знание экономит минуты в критической ситуации. А минуты при взломе — это всё.