February 17

Почему я использую разделы только для чтения на своих Linux-серверах (и вам следует делать так же)

Это перевод оригинальной статьи Why I Use Read-Only Partitions on My Linux Servers (And You Should Too).

Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.

Введение

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

Вот почему я его использую — и как вы можете начать применять его уже сегодня, не нарушая работу своей системы.

🔒 Что такое раздел только для чтения?

Раздел только для чтения — это именно то, что подразумевает его название: часть файловой системы, которую нельзя изменить — никакой записи, удаления или подмены данных.

Вы можете монтировать каталоги, например /boot, /usr или даже / с флагом ro (только для чтения). Цель? Уменьшить поверхность атаки, доступную для записи, и предотвратить вредоносные или случайные изменения.

💡 Зачем вообще делать систему read-only?

✅ 1. Блокирует закрепление(persistence)

Многим вредоносным программам и руткитам необходимо записывать данные на диск. Монтирование только для чтения блокирует эту функцию, мгновенно ломая большинство механизмов закрепления.

✅ 2. Предотвращает случайные изменения

Случалось ли вам когда-нибудь опечататься в команде от имени root и удалить что-то важное? Настройка режима только для чтения делает критически важные каталоги защищенными от несанкционированного доступа.

✅ 3. Обеспечивает целостность системы

Если /usr или /boot заблокированы для записи, даже при частичном доступе злоумышленник не сможет просто так подменить бинарники или модули ядра.

✅ 4. Выживает, несмотря на ошибки инсайдеров

Даже если легитимный пользователь (или скрипт) допустит ошибку — ущерб будет минимальным. Это особенно полезно в многопользовательских или производственных средах.

🧪 Как я это настраиваю (реальные примеры)

Допустим, я хочу сделать /usr доступным только для чтения:

Шаг 1: Создание резервной копии и тестирование

Всегда тестируйте изменения на тестовом сервере или виртуальной машине. Некоторые приложения могут попытаться записать данные в /usr (чего делать не следует).

Шаг 2: Редактирование /etc/fstab

UUID=xxx-xxx-xxx /usr ext4 ro,defaults 0 2

Или, если вы используете overlayfs для большей гибкости:

mount -o ro,remount /usr

Это можно сделать для:

  • /boot
  • /usr
  • /var(за исключением случаев, когда требуется запись в логи/кэш)
  • Даже / в контейнерах

Шаг 3: Перезагрузка и проверка

mount | grep ro

Убедитесь, что нужные директории действительно смонтированы в режиме только для чтения.

🧠 Бонус: защита сервисов через systemd

Не обязательно трогать разделы целиком. Для отдельных сервисов используйте следующий код в своем файле .service:

ProtectSystem=strict
ReadOnlyPaths=/etc /usr

Это позволяет сделать некоторые части системы доступными только для чтения исключительно для этого сервиса. Простое и эффективное решение.

⚠️ На что следует обратить внимание

  • Логи: Убедитесь, что /var/log или эквивалентный файл остается доступным для записи.
  • Обновление: Во время установки патчей вам потребуется временно перемонтировать разделы в режим rw (чтения-записи).
  • Docker: При использовании контейнеров, примените readOnlyRootFilesystem: true в Kubernetes или Docker Compose.

🚀 Заключительные мысли

Безопасность — это не только инструменты, но и настройки по умолчанию, которые работают в вашу пользу. Установив ключевые части вашей системы в режим только для чтения, вы затрудняете жизнь для атакующих, пользователей и даже root’а, когда речь идёт о непреднамеренных ошибках.

Представьте, что это ваш невидимый телохранитель — всегда молча наблюдающий из-за кулис.

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.