- Системы защиты Linux
- Предыстория Linux Security Modules и SELinux
- Глоссарий SELinux
- LSM и архитектура SELinux
- Управление настройками SELinux
- Изменение конфигурации доступов
- Файлы, порты и булевы значения
- Практикум, получить доступ к интерфейсу Pgadmin-web
- Настройка безопасности Linux
- Зачем устанавливать vpn на Linux
- Как сменить DNS в Linux
- Как пустить vpn через TOR в Linux
- Настройка firewall в Linux Ubuntu
- Заключение
Системы защиты Linux
Одна из причин грандиозного успеха Linux ОС на встроенных, мобильных устройствах и серверах состоит в достаточно высокой степени безопасности ядра, сопутствующих служб и приложений. Но если присмотреться внимательно к архитектуре ядра Linux, то нельзя в нем найти квадратик отвечающий за безопасность, как таковую. Где же прячется подсистема безопасности Linux и из чего она состоит?
Предыстория Linux Security Modules и SELinux
Security Enhanced Linux представляет собой набор правил и механизмов доступа, основанный на моделях мандатного и ролевого доступа, для защиты систем Linux от потенциальных угроз и исправления недостатков Discretionary Access Control (DAC) — традиционной системы безопасности Unix. Проект зародился в недрах Агентства Национальной Безопасности США, непосредственно разработкой занимались, в основном, подрядчики Secure Computing Corporation и MITRE, а также ряд исследовательских лабораторий.
Linux Security Modules
Линус Торвальдс внес ряд замечаний о новых разработках АНБ, с тем, чтобы их можно было включить в основную ветку ядра Linux. Он описал общую среду, с набором перехватчиков для управления операциями с объектами и набором неких защитных полей в структурах данных ядра для хранения соответствующих атрибутов. Затем эта среда может использоваться загружаемыми модулями ядра для реализации любой желаемой модели безопасности. LSM полноценно вошел в ядро Linux v2.6 в 2003 году.
Фреймворк LSM включает защитные поля в структурах данных и вызовы функций перехвата в критических точках кода ядра для управления ими и выполнения контроля доступа. Он также добавляет функции для регистрации модулей безопасности. Интерфейс /sys/kernel/security/lsm содержит список активных модулей в системе. Хуки LSM хранятся в списках, которые вызываются в порядке, указанном в CONFIG_LSM. Подробная документация по хукам включена в заголовочный файл include/linux/lsm_hooks.h.
Подсистема LSM позволила завершить полноценную интеграцию SELinux той же версии стабильного ядра Linux v2.6. Буквально сразу же SELinux стал стандартом де-факто защищенной среды Linux и вошел в состав наиболее популярных дистрибутивов: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.
Глоссарий SELinux
LSM и архитектура SELinux
Несмотря на название LSM в общем-то не являются загружаемыми модулями Linux. Однако также, как и SELinux, он непосредственно интегрирован в ядро. Любое изменение исходного кода LSM требует новой компиляции ядра. Соответствующая опция должна быть включена в настройках ядра, иначе код LSM не будет активирован после загрузки. Но даже в этом случае его можно включить опцией загрузчика ОС.
Стек проверок LSM
LSM оснащен хуками в основных функций ядра, которые могут быть релевантными для проверок. Одна из основных особенностей LSM состоит в том, что они устроены по принципу стека. Таким образом, стандартные проверки по-прежнему выполняются, и каждый слой LSM лишь добавляет дополнительные элементы управления и контроля. Это означает, что запрет невозможно откатить назад. Это показано на рисунке, если результатом рутинных DAC проверок станет отказ, то дело даже не дойдет до хуков LSM.
SELinux перенял архитектуру безопасности Flask исследовательской операционной системы Fluke, в частности принцип наименьших привилегий. Суть этой концепции, как следует из их названия, в предоставлении пользователю или процессу лишь тех прав, которые необходимы для осуществления предполагаемых действий. Данный принцип реализован с помощью принудительной типизации доступа, таким образом контроль допусков в SELinux базируется на модели домен => тип.
Благодаря принудительной типизации доступа SELinux имеет гораздо более значительные возможности по разграничению доступа, нежели традиционная модель DAC, используемая в ОС Unix/Linux. К примеру, можно ограничить номер сетевого порта, который будет случать ftp сервер, разрешить запись и изменения файлов в определенной папке, но не их удаление.
Основные компоненты SELinux таковы:
- Policy Enforcement Server — Основной механизм организации контроля доступа.
- БД политик безопасности системы.
- Взаимодействие с перехватчиком событий LSM.
- Selinuxfs — Псевдо-ФС, такая же, как /proc и примонтированная в /sys/fs/selinux. Динамически заполняется ядром Linux во время выполнения и содержит файлы, содержащие сведения о статусе SELinux.
- Access Vector Cache — Вспомогательный механизм повышения производительности.
Схема работы SELinux
Все это работает следующим образом.
- Некий субъект, в терминах SELinux, выполняет над объектом разрешенное действие после DAC проверки, как показано не верхней картинке. Этот запрос на выполнение операции попадает к перехватчику событий LSM.
- Оттуда запрос вместе с контекстом безопасности субъекта и объекта передается на модуль SELinux Abstraction and Hook Logic, ответственный за взаимодействие с LSM.
- Инстанцией принятия решения о доступе субъекта к объекту является Policy Enforcement Server и к нему поступают данные от SELinux AnHL.
- Для принятия решения о доступе, или запрете Policy Enforcement Server обращается к подсистеме кэширования наиболее используемых правил Access Vector Cache (AVC).
- Если решение для соответствующего правила не найден в кэше, то запрос передается дальше в БД политик безопасности.
- Результат поиска из БД и AVC возвращается в Policy Enforcement Server.
- Если найденная политика согласуется с запрашиваемым действием, то операция разрешается. В противном случае операция запрещается.
Управление настройками SELinux
SELinux работает в одном из трех режимов:
- Enforcing — Строгое соблюдение политик безопасности.
- Permissive — Допускается нарушение ограничений, в журнале делается соответствующая пометка.
- Disabled — Политики безопасности не действуют.
Посмотреть в каком режиме находится SELinux можно следующей командой.
Изменение режима до перезагрузки, например выставить на enforcing, или 1. Параметру permissive соответствует числовой код 0.
Также изменить режим можно правкой файла:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing — SELinux security policy is enforced.
# permissive — SELinux prints warnings instead of enforcing.
# disabled — No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted — Targeted processes are protected,
# minimum — Modification of targeted policy. Only selected processes are protected.
# mls — Multi Level Security protection.
Разница с setenfoce в том, что при загрузке операционный системы режим SELinux будет выставлен в соответствии со значением параметра SELINUX конфигурационного файла. Помимо того, изменения enforcing disabled вступают в силу только через правку файла /etc/selinux/config и после перезагрузки.
Просмотреть краткий статусный отчет:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
Для просмотра атрибутов SELinux некоторые штатные утилиты используют параметр -Z.
По сравнению с обычным выводом ls -l тут есть несколько дополнительных полей следующего формата:
Последнее поле обозначает нечто вроде грифа секретности и состоит из комбинации двух элементов:
- s0 — значимость, также записывают интервалом lowlevel-highlevel
- c0, c1… c1023 — категория.
Изменение конфигурации доступов
Используйте semodule, чтобы загружать модули SELinux, добавлять и удалять их.
Первая команда semanage login связывает пользователя SELinux с пользователем операционной системы, вторая выводит список. Наконец последняя команда с ключом -r удаляет связку отображение пользователей SELinux на учетные записи ОС. Объяснение синтаксиса значений MLS/MCS Range находится в предыдущем разделе.
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server
]$ semanage login -d karol
Команда semanage user используется для управления отображений между пользователями и ролями SELinux.
- -a добавить пользовательскую запись соответствия ролей;
- -l список соответствия пользователей и ролей;
- -d удалить пользовательскую запись соответствия ролей;
- -R список ролей, прикрепленных к пользователю;
Файлы, порты и булевы значения
Каждый модуль SELinux предоставляет набор правил маркировки файлов, но также можно добавить собственные правила для в случае необходимости. Например мы желаем дать веб серверу права доступа к папке /srv/www.
Первая команда регистрирует новые правила маркировки, а вторая сбрасывает, вернее выставляет, типы файлов в соответствии с текущими правилами.
Аналогично, TCP/UDP порты отмечены таким образом, что лишь соответствующие сервисы могут их прослушивать. Например, для того, чтобы веб-сервер мог прослушивать порт 8080, нужно выполнить команду.
Значительное число модулей SELinux имеют параметры, которые могут принимать булевы значения. Весь список таких параметров можно увидеть с помощью getsebool -a. Изменять булевы значения можно с помощью setsebool.
Практикум, получить доступ к интерфейсу Pgadmin-web
Рассмотрим пример из практики, мы установили на RHEL 7.6 pgadmin4-web для администрирования БД PostgreSQL. Мы прошли небольшой квест с настройкой pg_hba.conf, postgresql.conf и config_local.py, выставили права на папки, установили из pip недостающие модули Python. Все готово, запускаем и получаем 500 Internal Server error.
Начинаем с типичных подозреваемых, проверяем /var/log/httpd/error_log. Там есть некоторые интересные записи.
[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
.
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: ‘/var/lib/pgadmin’
[timestamp] [wsgi:error] [pid 23690]
[timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.
На этом месте у большинства администраторов Linux возникнет стойкое искушение запустить setenforce 0, да и дело с концом. Признаться, в первый раз я так и сделал. Это конечно тоже выход, но далеко не самый лучший.
Несмотря на громоздкость конструкций SELinux может быть дружественным к пользователю. Достаточно установить пакет setroubleshoot и просмотреть системный журнал.
]$ yum install setroubleshoot
[admin@server
]$ journalctl -b -0
[admin@server
]$ service restart auditd
Обратите внимание на то, что сервис auditd необходимо перезапускать именно так, а не с помощью systemctl, несмотря на наличие systemd в ОС. В системном журнале будет указан не только факт блокировки, но также причина и способ преодоления запрета.
Выполняем эти команды:
]$ setsebool -P httpd_can_network_connect 1
[admin@server
]$ setsebool -P httpd_can_network_connect_db 1
Проверяем доступ на веб страницу pgadmin4-web, всё работает.
Источник
Настройка безопасности Linux
Не так важно, поставили вы себе Linux, чтобы стать со временем хакером-грозой Пентагона или, напротив, чтобы надежнее защитить свой компьютер от несанкционированного вторжения, вам предстоит изучить несколько несложных настроек и познакомиться с программами, которые помогают шифровать данные и сохранять конфиденциальность при работе в сети. Безопасность операционной системы Linux не вызывает сомнений, однако и при работе с ней вам придется приложить некоторые усилия, чтобы уберечься от злоумышленников. В этой статье мы коснемся некоторых аспектов сетевой безопасности: использования vpn, Tor Browser в Linux, смены DNS-адресов, и расскажем про настройку в Linux firewall.
Зачем устанавливать vpn на Linux
Для пользователей Linux, желающих скрыть IP-адрес, у нас есть отдельная статья, где мы пошагово рассказываем, как установить впн на Linux. Скажем сразу – мы считаем установку vpn обязательным условием безопасности вашего компьютера. Каждый день вы посещаете десятки сайтов, оставляя на них ваши данные, которые становятся доступными администраторам. Имея на руках ваш IP, вам могут как запретить доступ к ресурсам, так и использовать его для проникновения уже на ваш компьютер, если вы чем-то заинтересуете злоумышленников. Большую опасность несет в себе и работа с устройства Linux в незащищенных wi-fi сетях. Никогда не решайте важные финансовые и рабочие вопросы, подключившись к публичному wi-fi без защиты впн-программы!
Интернет-провайдеру тоже ни к чему знать, где вы бываете и что там делаете. Vpn для Linux поможет зашифровать данные и скроет от глаз провайдера посещаемые вами сайты. Таким образом, соединяясь через впн-серверы, вы сможете без проблем заходить даже заблокированные вашим провайдером (к примеру, по запросу Роскомнадзора) интернет-ресурсы. То же и с блокировкой по географическому положению – youtube, Netflix, другие подобные ресурсы очень любят прятать самые интересный контент от неугодных им стран. Но с впн на Linux эти запреты не для вас.
Про установку vpn на Linux читайте здесь, а мы лишь напомним, как включить openvpn на Linux, если он уже установлен, и как отключить, если вы готовы вернуться к своему реальному IP.
Подключаемся к выбранному конфигу openvpn, указав в –config путь до файла конфигурации необходимого сервера:
sudo openvpn —config ./Whoer_Netherlands_nl.ovp n
Чтобы проверить, что IP-адрес сменился, введите:
Вы также можете зайти на сайт whoer.net и проверить ваш IP-адрес и другие параметры безопасности в сети.
Чтобы отключить vpn в Linux:
sudo service openvpn stop
Обратите внимание на то, что vpn-подключение может идти по TCP или UDP-протоколу. О разнице между ними и том, какой выбрать в каком случае, вы можете подробно прочесть здесь, скажем лишь, что UDP немного более быстрый, хоть и не такой надежный. А как отредактировать ваши openvpn-конфиги для Linux и сменить протокол, мы показываем в видео-ролике на ютьюб Меняем TCP на UDP в OpenVPN. Также вы можете при редактировании конфигов отключить некоторые из IP-адресов страны, оставив только необходимые вам. Как это сделать, упоминается в видео Как использовать Whoer VPN в клиенте OpenVPN.
Возможно, вам удобнее будет подключать vpn на Linux через графическое приложение GNOME. Как установить его смотрите в видео Как установить графическое приложение VPN на Linux.
Как сменить DNS в Linux
После того, как вы сменили в Linux IP-адрес, вам нужно произвести замену DNS. О том, что такое DNS, и зачем его менять, можно прочесть в нашей статье или посмотреть видео на нашем youtube-канале Зачем менять DNS. Если кратко – DNS-сервер, к которому подключается ваш компьютер, раскрывает ваше географическое положение, что может привести к блокировкам по геоданным, либо из-за несоответствия IP-данных и DNS-адресов.
Сменить DNS-адрес в Linux системе можно двумя способами. К примеру, вы можете сделать это через интерфейс сетевых подключений: кликайте мышкой на значок сети, выбирайте подключенную сеть и открывайте параметры соединения.
В Настройках сети переходите во вкладку “IPv4”. Далее выбирайте автоматический метод и в поле DNS прописывайте адрес сервера. Адреса быстрых DNS-серверов вы можете найти в нашем блоге в статье Рекомендуемые публичные DNS сервера. Несколько адресов прописываются через запятую.
Если этот способ не сработал, попробуйте сменить DNS через терминал Linux. Как это сделать, мы пошагово рассказываем в видеоролике на нашем канале Как настроить DNS в Linux.
Как пустить vpn через TOR в Linux
TOR Browser совершенно необходим, если вы решили прогуляться по загадочному миру .onion сайтов, но и в качестве безопасного браузера, дающего дополнительный уровень анонимности, TOR для Linux неизменно популярен среди пользователей. Особенно, если настроить одновременное использование TOR с vpn на Linux. Настройка подобной цепочки позволяет на порядок повысить анонимность и конфиденциальность, поскольку скрывает от посещаемых сайтов сам факт использования TOR Browser.
Для браузера TOR Linux – это идеальная операционная система, ведь разработчики браузера рассчитывают прежде всего на продвинутых пользователей, заинтересованных в анонимности и конфиденциальности. Скачать Tor для Linux можно с официального сайта 32-bit (sig) / 64-bit (sig), а как настроить цепочку подключения TOR+VPN мы пошагово показываем в нашем видео Как пустить VPN через TOR на Linux. Здесь вы можете скачать скрипт для подключения впн через TOR. Зарегистрировать для получения бесплатных конфигов Openvpn для Linux можно на этой странице.
Настройка firewall в Linux Ubuntu
Firewall, по-русски называемый межсетевым экраном или брандмауэром, занимает важное место в защите системы Linux. Файрвол Linux это пропускной пункт между внутренней и внешней сетью, в котором происходит контроль и управление входящим и исходящим сетевым трафиком. Правила контроля задаются пользователем в интерфейсе межсетевого экрана: здесь он решает, какие порты открыть и какие соединения разрешить.
Разработчики программ для Linux всерьез озабочены защитой операционной системы от несанкционированных вторжений: для скачивания и установки в дистрибутивы Linux доступны десятки брандмауэров с открытым исходным кодом. Но далеко ходить не нужно: встроенная изначально во всех дистрибутивах Linux файрвол-утилита Iptables отлично минимизирует риск хакерских атак и заражения вирусами. При попытке установления соединений с ПК, утилита обращается к своим правилам для проверки того, является ли соединение разрешенным или его следует запретить. Если по соединению нет информации – оно выполняется по умолчанию. Кроме этого, Iptables поможет выполнить резервное копирование и восстановление с файлами.
Если вдруг файрвола Iptables не обнаружилось в вашем дистрибутиве, или вы хотите обновить утилиту, введите следующую команду:
sudo apt-get install iptables
Iptables – первая линия системы безопасности Linux и любимец сетевых администраторов. Настраивается данный Linux файрвол через командную строку при помощи установленных команд. Проблема в том, что начинающему юзеру процесс контроля за поступлением и отправлением трафика бесчисленными командами iptables может показаться слишком сложным. К счастью, существует интерфейс, специально разработанный для упрощения процесса настройки утилиты Iptables: UFW (Uncomplicated Firewall или по-русски «простой брандмауэр»). Кстати, в Linux Ubuntu UFW встроен также по умолчанию. А если вы его удалили, то можете заново загрузить, введя в консоли:
sudo apt install ufw
Мы пошагово показываем настройку Uncomplicated Firewall Linux в нашем видео Как настроить фаервол в Ubuntu.
Заключение
Это лишь некоторые аспекты безопасного использования устройств с операционной системой Linux, но на первое время вам будет их достаточно, чтобы спокойно пользоваться компьютером и выходить в сеть. Не забывайте также своевременно обновлять программное обеспечение и устанавливайте только сильные пароли – из не менее 8 букв разного регистра, цифр и специальных знаков. Ну и, так как человеческий фактор – обычно самое слабое звено в цепи безопасности, посмотрите наше видео про то, Как хакеры используют Социальную Инженерию.
Читайте наши статьи, подписывайтесь на социальные сети и youtube-канал, и помните, что мы всегда стоит на страже вашей безопасности и конфиденциальности в сети!
Источник