December 19

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

Это перевод оригинальной статьи Why I Always Disable Unused Services on Linux Servers.

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

Когда я беру на себя управление новым сервером Linux, первым делом я проверяю, какие службы запущены. Почему? Потому что каждая запущенная служба — это ещё одна потенциальная дверь для злоумышленников.

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

🚨 Риски работы лишних сервисов

  1. Расширенная поверхность атаки
    Открытый порт означает, что кто-то может постучаться. Даже если сегодня у сервиса нет уязвимостей, завтра они могут появиться.
  2. Пути повышения привилегий.
    Сервисы, работающие от имени root, могут стать прямым путём к полной компрометации системы.
  3. Утечка ресурсов.
    Неиспользуемые демоны потребляют ресурсы ЦП, память и трафик без причины.
  4. Несоответствия стандартам
    CIS Benchmarks, PCI-DSS и HIPAA советуют минимизировать количество ненужных сервисов.

🔍 Шаг 1: Определить, что запущено

Проверьте активные сервисы:

systemctl list-unit-files --type=service --state=enabled

Проверьте открытые порты:

ss -tulnp

➡️ Любой сервис, слушающий внешний интерфейс и не нужный вам, — кандидат на отключение.

🛠 Шаг 2: Отключить всё лишнее

Например, если я не использую cups(печать):

systemctl stop cups
systemctl disable cups

Для почтовых серверов (обычно на новых установках):

systemctl stop postfix
systemctl disable postfix

🧹 Шаг 3: Маскировать, чтобы предотвратить случайный запуск

systemctl mask telnet

➡️ Это предотвращает запуск службы даже случайно.

🧠 Шаг 4: Закрепите основы

Для сервисов, которые мне действительно нужны (вроде SSH или Nginx), я:

  • Запускайте их как непривилегированных пользователей.
  • Ограничьте их доступ конкретными IP (ListenAddress в SSH, директивы listen в Nginx)
  • Примените защиту systemd:
PrivateTmp=yes NoNewPrivileges=yes ProtectSystem=strict

📊 Шаг 5: Непрерывный мониторинг

Даже после очистки я еженедельно запускаю:

systemctl list-units --type=service --state=running

чтобы убедиться, что ничего неожиданного не появилось.

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

Защита не всегда подразумевает использование сложных инструментов — иногда достаточно просто спросить:
➡️ А действительно ли мне нужен этот сервис?

Если ответ «нет», я останавливаю его, отключаю и маскирую.
Меньше сервисов = меньше рисков.

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