Приветствуем, друзья-администраторы и любознательные пользователи! Если вы работаете со средой 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 отключает исполняемые биты в заголовке файла. Эти флаги сильно ограничивают использование "посторонних" файловых систем.
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)!
7. Дополнительные меры
- Шифрование дисков (LUKS): Даже если кто-то получит доступ к физическому носителю, данные будут защищены.
- Обновления безопасности: Самое важное! Всегда проверяйте наличие обновлений (
yum check-update, apt-get update && apt-get upgrade) и ставьте их вовремя.
- Аудит безопасности (auditd): Используйте утилиту
auditd для записи событий, связанных с безопасностью – изменения правил sudoers, доступ к файлам конфигурации и т.д.
Вывод
Безопасность Linux – это путь постоянного обучения и внимательного настройки. Начните с базовых паролей и прав пользователя, затем настройте сети и доверенные пути, включите аудит событий и изучите принцип "меньше привилегий". По мере опыта переходите к использованию ключевых механизмов контроля доступа (SELinux/AppArmor) и тщательному монтированию файловых систем.
Следование этим основам – первый шаг к тому, чтобы ваш Linux-сервер или рабочая станция стали устойчивыми к большинству типичных атак. Начните внедрять эти практики сегодня!
Ваши дальнейшие действия:
- Установите надежные пароли для всех пользователей.
- Отключите прямой root-доступ по SSH (если он еще есть).
- Проверьте порты на сервере и отключите ненужные.
- Изучите базовую синтаксис iptables или nftables для своих нужд.
Успехов в управлении безопасностью ваших Linux-систем!