- Механизмы безопасности в Linux
- POSIX ACL
- chroot
- SELinux
- AppArmor
- PolicyKit
- Заключение
- Двенадцать советов по повышению безопасности Linux
- Защита терминала
- Напоминания о смене пароля
- Уведомления sudo
- Защита SSH
- Защита SSH с использованием Google Authenticator
- Мониторинг файловой системы с помощью Tripwire
- Использование Firewalld
- Переход с firewalld на iptables
- Ограничение компиляторов
- Предотвращение модификации файлов
- Управление SELinux с помощью aureport
- Использование sealert
- Итоги
Механизмы безопасности в Linux
В данной статье я проведу краткий экскурс в наиболее распространенные средства, связанные с безопасностью Linux. Информация предоставлена в сжатом виде, и если какое-то средство вас заинтересует, можно пройтись по ссылкам и прочитать более подробно. По заявкам пользователей некоторые механизмы можно будет рассмотреть более подробно в последующих статьях.
Будут рассмотрены следующие средства: POSIX ACL, sudo, chroot, PAM, SELinux, AppArmor, PolicyKit. Виртуализация, хотя и относится в какой-то мере к средствам безопасности, рассматриваться не будет, тем более что это отдельная обширная тема.
POSIX ACL
Описание: Разграничение прав доступа к файлам на основе их атрибутов (Discretionary Access Control, DAC).
Механизм работы: Система (в частности, менеджер файловой системы) считывает атрибуты файла, к которому обращается пользователь (или программа, работающая от имени какого-либо пользователя), и решает предоставлять ли доступ на основе этих атрибутов. При ошибке доступа приложению возвращается соответствующий код ошибки.
Пример использования: Чтобы запретить/разрешить доступ остальных пользователей к своему файлу, можно поменять его атрибуты через chmod, и поменять владельца/группу через chown и chgrp (либо использовать более общую команду setfacl). Текущие права доступа можно посмотреть через ls и getfacl.
Дополнительные ссылки: POSIX Access Control Lists on Linux, Расширенные ACL в Linux.
Описание: Выполнение программ от своего и/или чужого имени.
Механизм работы: При вызове команды sudo/sudoedit система считывает файл /etc/sudoers, и на его основе определяет какие команды может вызывать пользователь.
Пример использования: Вся конфигурация определяется в файле /etc/sudoers. Например, можно разрешать выполнять только определенные команды и только от определенного пользователя:
WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
Данная строчка говорит о том, что пользователи, определенные в алиасе WEBMASTERS могут выполнять все команды от имени пользователя www, или делать su только в www.
chroot
Описание: Операция, ограничивающая доступ процесса к файловой системе, изменяя ее корень в контексте процесса.
Механизм работы: Запускает программу (по умолчанию /bin/sh) с контекстом, в котором переопределен корневой каталог файловой системы. Теперь все обращения вызванной программы не могут выйти за пределы корневого каталога (т.е. программа работает в весьма условной «песочнице»). Обойти данный механизм не составляет труда, особенно из под рута, так что это средство не рекомендуется для обеспечения безопасности. Настоящую песочницу сможет обеспечить только виртуализация.
Пример использования: Создается специальный каталог, в него копируется необходимое для работы окружение (также можно использовать команду mount —bind). Далее делается chroot на этот каталог, и запущенная программа работает только с предварительно подготовленным окружением. Для упрощения можно использовать различные jail-инструменты, доступные в дистрибутивах.
Описание: Подключаемые модули аутентификации.
Механизм работы: Программы, написанные с использованием PAM, обращаются к его библиотеке, которая уже собственно проводит процедуру аутентификации пользователя. При ошибке авторизации приложению возвращается соответствующий код ошибки.
Пример использования: PostgreSQL, Apache, Squid и другие программы (включая написанные вами) могут работать с учетными записями пользователей не через собственные конфигурационные файлы, а обращаться к PAM, тем самым обеспечивая различные варианты аутентификации — Kerberos, eTokens, биометрия и др. Естественно, это касается и самого Linux-а — можно входить не только вбивая пару логин/пароль.
SELinux
Контроль называется принудительным, когда применение контроля производится администраторами и системой, и не зависит от решения пользователей, как это происходит при обычном контроле доступа. [*]
Механизм работы: Для проверки прав доступа используется LSM-модуль ядра, которые проверяет политику безопасности приложения и сверяет его тип с контекстом безопасности используемых файлов (объектов). При ошибке доступа соответствующая запись добавляется в /var/log/audit/audit.log. Пользователь может получить нотификацию об этом через утилиту setroubleshoot.
Пример использования: В targeted-режиме SELinux позволяет апачу читать только определенные каталоги. Стандартный (для кого-то) путь сделать веб-сайт в домашнем каталоге и открыть его через симлинк в /var/www не пройдет процедуру проверки, т.к. SELinux проверяет контекст безопасности файлов, делая полное сканирование. Чтобы поменять контекст безопасности файла, необходимо использовать команду chcon (в данном случае, chcon -R -h -t httpd_sys_content_t /path/to/directory). Текущие контексты безопасности можно посмотреть через ls -Z.
Дополнительные ссылки: Анатомия SELinux.
AppArmor
Описание: Система упреждающей защиты, основанная на политиках безопасности (профилях).
Механизм работы: Для проверки прав доступа используется LSM-модуль ядра, который при запуске приложения проверяет наличие его профиля (/etc/apparmor.d), и если профиль существует, то ограничивает выполнение системных вызовов в соответствии с профилем. При ошибке доступа соответствующая запись добавляется в /var/log/audit/audit.log. Пользователь может получить нотификацию об этом через утилиту apparmor-notify.
Пример использования: С помощью команды aa-genprof можно создать профиль интересующего приложения, отработав в нем все необходимые use-case-ы. Далее полученный файл профиля можно модифицировать интересующим вас образом, сохранить в /etc/apparmor.d и активировать через aa-enforce.
PolicyKit
Описание: Средство контроля системных привилегий.
Механизм работы: При обращении приложения к сервису (любое обращение проходит как action), он проверяет через PolicyKit права доступа пользователя для данного action-а. В зависимости от политик доступ может быть запрещен, разрешен или требовать аутентификации. Отображение ошибок (или запрос пароля) должно на себя брать клиентское приложение.
Пример использования: Ubuntu при настройке сети позволяет просматривать всю информацию без запроса пароля (т.к. конфигурация PolicyKit разрешает чтение без авторизации), но когда необходимо настройки сохранить, то запрашивается пароль. Причем пользователю не даются рутовские права на всю систему, т.к. он работает только в пределах используемого сервиса.
Заключение
Естественно, есть и другие средства, связанные с безопасностью, не рассмотренные в данной статье. Однако все вышеперечисленное является стандартом де-факто для наиболее распространенных дистрибутивов, и если вы заботитесь о безопасности, желательно их знать.
Если у кого-то есть более релевантные ссылки на описание средств безопасности (на русском), пишите в комментарии. Также буду рад всем замечаниям и найденным неточностям.
Источник
Двенадцать советов по повышению безопасности Linux
Мы живём в опасное время: едва ли не каждый день обнаруживаются новые уязвимости, на их основе создают эксплойты, под ударом может оказаться и обычный домашний компьютер на Linux, и сервер, от которого зависит огромная организация.
Возможно, вы уделяете внимание безопасности и периодически обновляете систему, но обычно этого недостаточно. Поэтому сегодня мы поделимся двенадцатью советами по повышению безопасности Linux-систем на примере CentOS 7.
Защита терминала
Для того, чтобы повысить безопасность системы, можно защитить консольный доступ к ней, ограничив root-пользователя в использовании определённых терминалов. Сделать это можно, задав терминалы, которые может использовать суперпользователь, в файле /etc/securetty .
Рекомендуется, хотя это и не обязательно, позволить суперпользователю входить в систему только из одного терминала, оставив остальные для других пользователей.
Напоминания о смене пароля
В наши дни сложный пароль — вещь совершенно необходимая. Однако, ещё лучше, когда пароли регулярно меняют. Об этом легко забыть, поэтому хорошо бы задействовать какой-нибудь системный механизм напоминаний о возрасте пароля, и о том, когда его надо поменять.
Мы предлагаем вам два способа организации подобных напоминаний. Первый заключается в использовании команды chage , второй — в установке необходимых значений по умолчанию в /etc/login.defs .
Вызов команды chage выглядит так:
Тут мы используем ключ -M для того, чтобы установить срок истечения актуальности пароля в днях.
Использовать эту команду можно и без ключей, тогда она сама предложит ввести необходимое значение:
Второй способ заключается в модификации файла /etc/login.defs . Вот пример того, как могут выглядеть интересующие нас значения. Вы можете изменить их на те, которые нужны вам:
Помните о том, что вам, если вы играете роль администратора, следует способствовать тому, чтобы пользователи применяли сложные пароли. Сделать это можно с помощью pam_cracklib.
После установки этой программы, вы можете перейти в /etc/pam.d/system-auth и ввести примерно следующее:
Уведомления sudo
Команда sudo , с одной стороны, упрощает жизнь, а с другой, может стать причиной проблем с безопасностью Linux, которые могут привести к непоправимым последствиям. Настройки sudo хранятся в файле /etc/sudoers . С помощью этого файла можно запретить обычным пользователям выполнять некоторые команды от имени суперпользователя. Кроме того, можно сделать так, чтобы команда sudo отправляла электронное письмо при её использовании, добавив в вышеупомянутый файл следующее:
Также надо установить свойство mail_always в значение on :
Защита SSH
Если мы говорим о безопасности Linux, то нам стоит вспомнить и о службе SSH. SSH — это важная системная служба, она позволяет удалённо подключаться к системе, и иногда это — единственный способ спасти ситуацию, когда что-то идёт не так, поэтому об отключении SSH мы тут не говорим.
Тут мы используем CentOS 7, поэтому конфигурационный файл SSH можно найти по адресу etc/ssh/sshd_config . Сканеры или боты, которых используют атакующие, пытаются подключиться к SSH по используемому по умолчанию порту 22.
Распространена практика изменения стандартного порта SSH на другой, неиспользуемый порт, например, на 5555 . Порт SSH можно изменить, задав нужный номер порта в конфигурационном файле. Например, так:
Кроме того, можно ограничить вход по SSH для root-пользователя, изменив значение параметра PermitRootLogin на no :
И, конечно, стоит отключить аутентификацию с применением пароля и использовать вместо этого публичные и приватные ключи:
Теперь поговорим о тайм-аутах SSH. Проблему тайм-аутов можно решить, настроив некоторые параметры. Например, следующие установки подразумевают, что пакеты, поддерживающие соединение, будут автоматически отправляться через заданное число секунд:
Настроив эти параметры, вы можете увеличить время соединения:
Можно указать то, каким пользователям разрешено использовать SSH:
Разрешения можно назначать и на уровне групп:
Защита SSH с использованием Google Authenticator
Для ещё более надёжной защиты SSH можно использовать двухфакторную аутентификацию, например, задействовав Google Authenticator. Для этого сначала надо установить соответствующую программу:
Затем запустить её для проверки установки:
Так же нужно, чтобы приложение Google Authenticator было установлено на вашем телефоне.
Отредактируйте файл /etc/pam.d/sshd , добавив в него следующее:
Теперь осталось лишь сообщить обо всём этом SSH, добавив следующую строку в файл /etc/ssh/sshd_config :
Теперь перезапустите SSH:
Когда вы попытаетесь войти в систему с использованием SSH, вам предложат ввести код верификации. Как результат, теперь SSH-доступ к вашей системе защищён гораздо лучше, чем прежде.
Мониторинг файловой системы с помощью Tripwire
Tripwire — это замечательный инструмент для повышения безопасности Linux. Это — система обнаружения вторжений (HIDS).
Задача Tripwire заключается в том, чтобы отслеживать действия с файловой системой, следить за тем, кто меняет файлы, и когда происходят эти изменения.
Для того, чтобы установить Tripwire, нужен доступ к репозиторию EPEL. Это задача несложная, решить её можно следующими командами:
После установки репозитория EPEL, вы сможете установить и Tripwire:
Теперь создайте файл ключей:
Вам предложат ввести сложный пароль для файла ключей. После этого можно настроить Tripwire, внеся изменения в файл /etc/tripwire/twpol.txt . Работать с этим файлом несложно, так как каждая строка оснащена содержательным комментарием.
Когда настройка программы завершена, следует её инициализировать:
Инициализация, в ходе которой выполняется сканирование системы, займёт некоторое время, зависящее от размеров ваших файлов.
Любые модификации защищённых файлов расцениваются как вторжение, администратор будет об этом оповещён и ему нужно будет восстановить систему, пользуясь файлами, в происхождении которых он не сомневается.
По этой причине необходимые изменения системы должны быть подтверждены с помощью Tripwire. Для того, чтобы это сделать, используйте следующую команду:
И вот ещё одна рекомендация, касающаяся Tripwire. Защитите файлы twpol.txt и twcfg.txt . Это повысит безопасность системы.
У Tripwire есть множество параметров и установок. Посмотреть справку по ней можно так:
Использование Firewalld
Firewalld — это замена для iptables , данная программа улучшает сетевую безопасность Linux. Firewalld позволяет вносить изменения в настройки, не останавливая текущие соединения. Файрвол работает как сервис, который позволяет добавлять и менять правила без перезапуска и использует сетевые зоны.
Для того, чтобы выяснить, работает ли в настоящий момент firewalld , введите следующую команду:
Просмотреть предопределённые сетевые зоны можно так:
Каждая из этих зон имеет определённый уровень доверия.
Это значение можно обновить следующим образом:
Получить подробные сведения о конкретной зоне можно так:
Просмотреть список всех поддерживаемых служб можно следующей командой:
Затем можно добавлять в зону новые службы или убирать существующие:
Можно вывести сведения обо всех открытых портах в любой зоне:
Добавлять порты в зону и удалять их из неё можно так:
Можно настраивать и перенаправление портов:
Firewalld — это весьма продвинутый инструмент. Самое примечательное в нём то, что он может нормально работать, например, при внесении изменений в настройки, без перезапусков или остановок службы. Это отличает его от средства iptables , при работе с которым службу в похожих ситуациях нужно перезапускать.
Переход с firewalld на iptables
Некоторые предпочитают файрвол iptables файрволу firewalld . Если вы пользуетесь firewalld , но хотите вернуться к iptables , сделать это довольно просто.
Сначала отключите firewalld :
Затем установите iptables :
Теперь можно запустить службу iptables :
После всего этого перезагрузите компьютер.
Ограничение компиляторов
Атакующий может скомпилировать эксплойт на своём компьютере и выгрузить его на интересующий его сервер. Естественно, при таком подходе наличие компиляторов на сервере роли не играет. Однако, лучше ограничить компиляторы, если вы не используете их для работы, как происходит в большинстве современных систем управления серверами.
Для начала выведите список всех бинарных файлов компиляторов из пакетов, а затем установите для них разрешения:
Создайте новую группу:
Затем измените группу бинарных файлов компилятора:
И ещё одна важная вещь. Нужно изменить разрешения этих бинарных файлов:
Теперь любой пользователь, который попытается использовать gcc , получит сообщение об ошибке.
Предотвращение модификации файлов
Иммутабельные файлы не может перезаписать ни один пользователь, даже обладающий root-правами. Пользователь не может модифицировать или удалить такой файл до тех пор, пока установлен флаг иммутабельности, снять который может лишь root-пользователь.
Несложно заметить, что эта возможность защищает вас, как суперпользователя, от ошибок, которые могут нарушить работу системы. Используя данный подход, можно защитить конфигурационные файлы или любые другие файлы по вашему желанию.
Для того, чтобы сделать любой файл иммутабельным, воспользуйтесь командой chattr :
Атрибут иммутабельности можно удалить такой командой:
Так можно защищать любые файлы, но помните о том, что если вы обработали таким образом бинарные системные файлы, вы не сможете их обновить до тех пор, пока не снимите флаг иммутабельности.
Управление SELinux с помощью aureport
Нередко система принудительного контроля доступа SELinux оказывается, по умолчанию, отключённой. Это не влияет на работоспособность системы, да и работать с SELinux довольно сложно. Однако, ради повышения безопасности, SELinux можно включить, а упростить управление этим механизмом можно, используя aureport .
Утилита aureport позволяет создавать отчёты на основе лог-файлов аудита.
Список исполняемых файлов можно вывести следующей командой:
Можно использовать aureport для создания полного отчёта об аутентификации:
Также можно вывести сведения о неудачных попытках аутентификации:
Или, возможно, сводку по удачным попыткам аутентификации:
Утилита aureport значительно упрощает работу с SELinux.
Использование sealert
В дополнение к aureport вы можете использовать хороший инструмент безопасности Linux, который называется sealert . Установить его можно так:
Теперь у нас есть средство, которое будет выдавать оповещения из файла /var/log/audit/audit.log и даст нам дополнительные сведения о проблемах, выявленных SELinux.
Использовать его можно так:
Самое интересное тут то, что в оповещениях можно найти советы о том, как решать соответствующие проблемы.
Итоги
Надеемся, приведённые здесь советы помогут вам сделать вашу установку Linux безопаснее. Однако, если речь идёт о защите информации, нельзя, применив те или иные меры, считать, что теперь вам ничто не угрожает. К любым программным средствам защиты всегда стоит добавлять бдительность и осторожность.
Уважаемые читатели! Знаете ли вы какие-нибудь простые, но неочевидные способы повышения безопасности Linux?
Источник