Основы безопасности Linux: от простого к сложному
Приветствуем, друзья-администраторы и любознательные пользователи! Если вы работаете со средой Linux – будь то сервер, рабочая станция или виртуальная машина – вопрос безопасности становится крайне важным. Хорошая новость: безопасность Linux построена на понятных принципах и может быть эффективно усвоена "от простого к сложному".
Эта статья – ваш путеводитель, как закрепить первый рубеж защиты для ваших систем.
1. Базовый уровень: Фундаментальные правила
Многие проблемы возникают из-за нарушения базовых принципов. Держимся этих пяти пунктов:
Слабые пароли – прямой вход врагу: Это самое частое слабое звено! Избегайте простых паролей (петербург, 123456, ваша собака Бобик наоборот). Используйте длинные комбинации из латинских и кириллических букв, цифр и специальных символов. Попробуйте утилиты типа
pwgenили соответствующий плагин в менеджере паролей для генерации надежных вариантов.- Практика: Команда
passwd <имя_пользователя>позволяет сменить пароль. Убедитесь, что все пользователи, особенно обычные и сервисные аккаунты (например,mysql,httpd), имеют прочный пароль.
- Практика: Команда
Управление правами доступа: Linux – многопользовательская система. Контролируйте, кто есть кто на вашем компьютере.
- Практика: Команда
sudo -lпокажет, какие команды может выполнять пользователь (или группа) с правами root. Используйтеusermodдля добавления пользователя в группу sudoers иadduser <имя_пользователя>для создания новых аккаунтов. - Практика: Всегда используйте команду
su - username(или соответствующее GUI) вместо простогоsudo, если нужно работать в оболочке другого пользователя. Это уменьшает накопление кеша паролей.
- Практика: Команда
Отключение Root-доступа по SSH без sudo: Давайте будем честны – root – это опасный аккаунт. Вместо прямого входа с root'ом, настройте систему так, чтобы можно было подключаться только через обычного пользователя, который имеет право выполнять команды
sudo.- Практика: Отредактируйте файл
/etc/ssh/sshd_config(обязательно сделайте резервную копию!), найдите строкуPermitRootLogin yesи измените наPermitRootLogin without-passwordИЛИ лучше –PermitRootLogin prohibit-password. Второй вариант предпочтительнее, так как полностью запрещает прямой root-доступ по паролю. Затем убедитесь, что пользователь с правами sudo может выполнять нужные команды черезsudo.
- Практика: Отредактируйте файл
Обязательное использование ключей (SSH): Ключи SSH – это идеальная замена паролям для безопасного удаленного доступа.
- Практика: Создайте пару ключей на своей машине (
ssh-keygen) и скопируйте публичный ключ (id_rsa.pub, или используйтеssh-copy-id) на целевую Linux-машину в файл/root/.ssh/authorized_keys(для root) или соответствующий каталог пользователя. Или используйте сертификаты (X.509), которые более безопасны для больших систем.
- Практика: Создайте пару ключей на своей машине (
Сильные файловые системы: Не ходите по чужим сюжетам!
- Практика: При монтировании USB-накопителей, сетевых дисков или даже некоторых локальных директорий используйте флаги
nofollow,nosuid,nodev,ro.
# Пример для временного устройства /dev/sdb1 mount -o ro,nofollow,noexec,nosuid /dev/sdb1 /mnt/readonly- Пояснение:
ro– только для чтения,nofollowзапрещает проследование символьных ссылок (защита от ".."),noexecзапрещает выполнение файлов на диске,nosuidотключает исполняемые биты в заголовке файла. Эти флаги сильно ограничивают использование "посторонних" файловых систем.
- Практика: При монтировании USB-накопителей, сетевых дисков или даже некоторых локальных директорий используйте флаги
2. Работа с пользователями и группами
Контроль доступа начинается с управления учетными записями:
Удаление ненужных пользователей: Не нужны root-доступ, но не выполняют важные задачи? Их лучше удалить.
- Практика: Команда
userdel -r usernameудаляет пользователя и его домашнюю директорию.
- Практика: Команда
Строгий контроль домашних директорий: Обеспечьте, чтобы только владелец мог читать/изменять содержимое своих папок.
- Практика:
# Установить права на домашнюю директорию пользователя chmod 700 /home/usernameИли для безопасности сразу после создания: ``` # Создать пользователя и автоматически убрать права записи для других adduser username --disabled-password --gecos "" && \ echo "username:password" | chpasswd -e && \ mkdir /home/username && chmod 700 /home/username && chown username:username /home/username ```Обязательный шифрование домашних директорий (для root и важных пользователей):
- Практика: Используйте
ecryptfsили LUKS для шифрования домашней папки пользователя. Особенно это критично для root.
- Практика: Используйте
Имена пользователей – скрывайте детали: Избегайте имен вроде "admin", "root" (если прямой доступ отключен), "testuser". Используйте неочевидные или описательные, но не связанные с правами.
- Практика:
# Создать пользователя с нелогичным именем для важного сервиса useradd -s /bin/false -d /opt/myapp/data -m -N my_weird_service_user
3. Входящие соединения и сетевая безопасность
Что заходит на вашу машину – это важно:
Не открытые порты: Не оставляйте порты открытыми, если явно не нужно.
- Практика:
- Проверьте, какие сервисы запущены и слушают сетевые соединения с помощью
netstat -tulnpилиss -tulnp. - Если сервис по умолчанию прослушивает публичный интерфейс (например, SSH на eth0), то либо измените его конфигурацию, чтобы он слушал только локальный (lo) интерфейс или специально отведенный для этого интерфейс (eth1).
- Используйте
systemctl stop <service>иsystemctl disable <service>для приложений по умолчанию не запускаемых на сервере.
- Проверьте, какие сервисы запущены и слушают сетевые соединения с помощью
- Практика:
Имя хоста: Установите уникальное имя хоста (
hostnamectl set-hostname new.name), чтобы системы могли узнавать вас правильно, а вы – себя.Базовая фаерволльская политика (iptables/nftables): Откажитесь от всех подключения и разрешайте строго необходимые.
Практика:
# Блокировать все входящие соединения по умолчанию, разрешить ответы на исходящие iptables -P INPUT DROP iptables -P OUTPUT ACCEPT # Разрешить доступ к своим сервисам (SSH на порт 22) iptables -A INPUT -p tcp --dport 22 -j ACCEPT # Разрешить выход в Интернет (если это сервер, возможно потребуется и обратно) iptables -A OUTPUT -j ACCEPT # Сохранить правила service iptables save # или команду для nftables
Разграничение сети: Если есть возможность (на уровне провайдера VPS/облака), используйте разные интерфейсы. Отдайте для внешних подключений один, а другой – "внутренний" и скрывайте его от широкой общественности.
4. Доверенные пути (PATH):
Злоумник может замаскировать опасный файл в директории, которую вы добавляете в свой $PATH.
* Практика:
1. Всегда проверяйте команды с помощью полного пути (/bin/ls вместо ls) – это надежнее.
2. Не добавляйте неизвестные директории в $PATH. Убедитесь, что $PATH содержит только доверенные места, особенно для root и системных администраторов.
5. Отладка ядра (Kdump):
Диагностика проблем – дело важное, но это создает файл сжатого дампа памяти (vmcore) при сбое ядра. Этот файл может содержать очень много информации о системе и безопасности его доступа критически важна.
* Практика: Настройте Kdump только для доверенных пользователей или отключите запись дампа в читаемую системой папку по умолчанию. Сместите права на /var/crash. Или используйте crash с правами root, но это уже продвинутый уровень.
6. Продвинутый: SELinux / AppArmor
Теперь самое интересное – трансляционную уровню (или Mandatory Access Control - MAC)!
- Принцип "меньше привилегий": Представьте, что даже при запуске как root программа может делать только строго определенные действия. Это повышает безопасность.
Практика: SELinux (расширенный механизм в Linux) или AppArmor (более простой для начинающих, особенно в Canonical/Ubuntu).
Включите и настройте политику минимальных привилегий.
# Проверить статус SELinux sestatus # Настроить режим enforcing (требовать строгих правил) или permissive (записывать нарушения без блокировки) setenforce 0 # Переместить в режим пермиссивного контроля (для тестирования!) setenforce 1 # Включить строгий контроль # Проверить политику для конкретной программы или сервиса seinfo permissive -s /path/to/file-or-service-name- Поиск уязвимостей: если программа не может выполнить свою работу (например, запущенный скрипт), значит, либо настроена неправильно, либо есть недостаток в политике. Это повод для анализа и возможного смягчения политики.
7. Дополнительные меры
- Шифрование дисков (LUKS): Даже если кто-то получит доступ к физическому носителю, данные будут защищены.
- Обновления безопасности: Самое важное! Всегда проверяйте наличие обновлений (
yum check-update,apt-get update && apt-get upgrade) и ставьте их вовремя. - Аудит безопасности (auditd): Используйте утилиту
auditdдля записи событий, связанных с безопасностью – изменения правил sudoers, доступ к файлам конфигурации и т.д.
Вывод
Безопасность Linux – это путь постоянного обучения и внимательного настройки. Начните с базовых паролей и прав пользователя, затем настройте сети и доверенные пути, включите аудит событий и изучите принцип "меньше привилегий". По мере опыта переходите к использованию ключевых механизмов контроля доступа (SELinux/AppArmor) и тщательному монтированию файловых систем.
Следование этим основам – первый шаг к тому, чтобы ваш Linux-сервер или рабочая станция стали устойчивыми к большинству типичных атак. Начните внедрять эти практики сегодня!
Ваши дальнейшие действия:
- Установите надежные пароли для всех пользователей.
- Отключите прямой root-доступ по SSH (если он еще есть).
- Проверьте порты на сервере и отключите ненужные.
- Изучите базовую синтаксис iptables или nftables для своих нужд.
Успехов в управлении безопасностью ваших Linux-систем!