Программы для защиты linux
Unix, родившийся практически вместе с первыми компьютерами, использовал очень
простой механизм безопасности (ugo), который гуру семидесятых посчитали более
чем достаточным. Но в современной системе, где крутятся десятки демонов и
программ, запущенных из-под разных учеток, грамотно разрулить все права старыми
инструментами уже не получается. А делать что-то нужно.
Дискреционный и мандатный контроль доступа
Для начала отвлечемся и поразмышляем о том, что есть и зачем нужно еще что-то
прикручивать. Одна из задач любой ОС — обеспечить разделение информации,
основываясь, в первую очередь, на требованиях конфиденциальности и целостности.
Традиционная модель Unix оперирует тремя параметрами — пользователь,
группа-пользователь и остальные. Называется она дискреционной (Discretionary
Access Control — DAC), то есть добровольной моделью доступа. Пользователь
сам определяет права доступа к своим файлам, а выполняющиеся программы имеют те
же права, что и запустивший их пользователь. Механизм DAC опирается в своей
работе только на тождество пользователя, игнорируя другую информацию, например,
о роли пользователя в системе, функции и уровне доверия конкретной программы и
необходимости в целостности данных. Каждая учетная запись имеет полную свободу
действий в пределах своих полномочий.
Как ты понимаешь, развернуться с DAC особенно негде: все или ничего; винда —
и та дает больше возможностей по настройке доступа к объектам. Поэтому сегодня
для Linux доступны решения, базирующиеся на совершенно другой модели защиты —
MAC (Mandatory Access Control, принудительный контроль доступа).
Они позволяют определить политики безопасности над всеми процессами и объектами,
решение о доступе принимается на основе большего количества информации об
объекте, а не только основываясь на тождестве пользователя. Причем MAC не
отменяет, а дополняет DAC, так как сначала проверяются права Unix, и, если они
запрещают доступ, то дальнейшая проверка просто не производится. Проверка прав
выполняется только в том случае, если стандартные права Unix разрешают доступ к
объекту. Любой объект помещается в некую виртуальную песочницу, которая
позволяет приложению выполнять только строго регламентированные задачи. Причем
при описании доступа к объекту конкретные реализации могут придерживаться разных
принципов: очень строгие правила по типу "что не разрешено явно — запрещено" и
"минимально необходимые привилегии".
Например, можно настроить систему так, что веб-сервер будет слушать
соединения на строго определенном порту, сможет читать файлы только в указанном
каталоге и так далее. То есть описать поведение системы в ее нормальном
состоянии, создав жесткий каркас, за который нельзя будет выскочить. Это
позволяет выполнять программы с правами обычного пользователя, а доступ к
необходимым ресурсам указывать при помощи политик.
В дистрибутивах Linux используются два решения: SELinux в RedHat и клонах, а
также AppArmor в Ubuntu. В ядре версии 2.6.30 появился код еще одного проекта —
TOMOYO Linux, которому
пророчат светлое будущее, но пока по умолчанию он нигде не используется. Давай
рассмотрим их особенности, а также плюсы и минусы.
Сверхзащищенный SELinux
Реализация MAC требует четкого описания правил, что может привести к
образованию большого их количества. Поэтому в SELinux использована
концепция роль-основанного контроля доступа Role-Based Access Control (RBAC), в
которой определяются роли и доступ пользователей. Механизм защиты в SELinux
носит название Type Enforcement (TE) и позволяет закрепить за каждым процессом и
файлом, которые необходимо контролировать, некую метку. Если процесс, запущенный
от имени администратора, скомпрометирован, то ущерб, который может быть причинен
системе, ограничен только тем, к чему он может обращаться, согласуясь с
установленными для него правилами (а они описывают поведение очень тонко).
Также в SELinux реализована многоуровневая система обеспечения
безопасности (MLS, Multi-Level Security model), но ее задействуют только в
особых случаях, например, в правительственных многопользовательских системах,
требующих чрезвычайно высокого уровня защиты.
Когда в процессе работы системы субъект пытается оказать некое действие на
объект, SELinux принимает решение о допустимости указанного действия,
основываясь на контекстах безопасности объекта и субъекта. Субъект — это
процессы, выполняемые от имени запустившего их пользователя. Объект — элементы
файловой системы (файлы, каталоги, ссылки, сокеты и пр.) или другие процессы,
над которыми выполняются действия. И теперь самое важное, что отличает
SELinux от других решений, описанных далее — все важные защитные атрибуты
сохраняются в контекстах безопасности. Поэтому файловая система должна уметь
хранить дополнительные атрибуты, и сами атрибуты нужно как-то задать.
Современные ядра все обеспечивают, но при самостоятельной пересборке ядра не
забудь активировать параметр "Extended attributes" в выбранной файловой системе.
Атрибуты устанавливаются при инициализации системы. Отсюда делаем вывод, что
объект уже должен существовать на момент установки атрибутов. Сам атрибут
включает идентификатор владельца, роль и тип объекта. Причем идентификатор
SELinux (создается командой semanage), хотя и может совпадать в номере с UID
пользователя Linux (uid), но это две разные вещи. Не забываем еще об одном
важном отличии — SELinux оперирует ролями, поэтому несколько учетных
записей Linux могут иметь одну и ту же учетную запись SELinux. И главное
— выполнение команды
Проверить это легко:
$ id –Z
user_u:user_t:unconfined_t
Получаем привилегии суперпользователя и проверяем снова:
Если зайти сразу под рутом, то роль другая:
Изменить роль можно при помощи команды newrole. При использовании SELinux
штатные команды выводят и контекст. Чтобы просмотреть контекст файлов и
процессов, набираем:
Кроме того, контекст можно считать прямо из /proc:
Предусмотрена работа SELinux в трех режимах — disable (отключен),
enforcing (политики выполняются, все, что не соответствует — блокируется),
permissive (политики анализируются, все нарушения заносятся в журнал "avc:
denied", но блокировки не производятся). Узнать текущий режим просто, как,
впрочем, и некоторые другие настройки, достаточно прочитать данные из
псевдофайловой системы /selinux:
Если получим 1, значит, SELinux активирован. Чтобы изменить режим работы на
лету, просто записываем в этот файл 0 или 1:
Также можно воспользоваться утилитой "setenforce [ Enforcing | Permissive | 1
| 0 ]".
Собственно настройки производятся в конфигурационных файлах, размещенных в
каталоге /etc. В дистрибутивах, базирующихся на RedHat, доступен графический
SELinux Administration Tool (system-configselinux, пакет policycoreutils-gui).
Так, режим работы устанавливается в файле /etc/sysconfig/selinux (на самом деле
это ссылка на /etc/selinux/config). В частности, режим работы определяет
параметр SELINUX:
В каталоге /etc/selinux/targeted/contexts находим описание контекстов.
Например, для root контекст описывается так:
Ты увидишь, что для разных ситуаций контекст будет отличаться. Теперь получим
список всех параметров SELinux: "getsebool -a". Для установки используй
команду setsebool (с ключом '-P' для сохранения значения после перезагрузки) или
графическую утилиту system-configsecuritylevel. Вывод "sestatus -v" покажет все
текущие установки. Не забываем и о журналах:
Все вспомогательные утилиты SELinux собраны в нескольких пакетах:
setools или policycoreutils, policycoreutils-newrole. Первый, как правило, уже
установлен в системе, остальных нет. Например, newrole, дающая возможность
пользователю сменить роль, доступна именно в policycoreutils. После установки в
системе присутствуют только наборы политик для targened, остальные наборы
политик скачиваются в пакетах selinux-policy*. Сорцы политик для их
самостоятельной сборки вынесены в selinux-policy-devel.
Разобраться в более чем 200 файлах, имеющих несколько тысяч строк,
врукопашную очень трудно. Автоматизировать эту задачу призван питоновый скрипт
audit2allow (в policycoreutils), он генерирует новые политики на основе анализа
журналов и блокировок SELinux.
Проекты LIDS, GRSecurity и RSBAC
AppArmor
Технология Application Armor изначально разработана Immunix Inc. После
того, как софтверный гигант Novell приобрел эту компанию, код открыли под
лицензией GNU GPL, а затем включили в состав openSUSE. Позднее AppArmor
стал доступен и в других дистрибутивах. Но когда команда Immunix покинула Novell,
дальнейшее развитие проекта остановилось. И хотя в том же openSUSE поддержка
AppArmor была сохранена, в дистрибутив интегрировали SELinux. В итоге начали
разноситься слухи а-ля "AppArmor is dead", что у одних вызвало радость, так как
теперь все усилия можно бросить на развитие одной системы защиты, у других
критику — отсутствие конкуренции еще ни к чему хорошему не приводило. Сегодня
апологетом этой технологии является Canonical, разработчики которого не смотря
ни на что продолжают развитие AppArmor. Так, в последних версиях добавлен
механизм кэширования правил, что позволило ускорить их загрузку. Для этих же
целей, и чтобы защитить сетевые сервисы на раннем этапе загрузки, часть профилей
вынесли в initramfs. И главное — в Ubuntu AppArmor прикрутили к LSM (Linux
Security Modules), задействовав security_path вместо vfs.
Основная идея AppArmor состоит в том, что система защиты не должна
быть сложной и не должна мешать. В отличие от SELinux, AppArmor не
использует расширенные атрибуты и не зависит от файловой системы. Доступ к
ресурсам определяется на основе профилей (profiles), которые привязаны к пути
файла или каталога, причем самого файла может и не быть на момент активации
профиля. Профиль разрабатывается индивидуально под каждое приложение. Хотя в
этом есть и недостаток: при переносе файла в SELinux за ним полностью
сохраняется контекст безопасности, в AppArmor — нет, но этого от него и
не требовали. Хотя, если файл имеет два имени, и профиль блокирует доступ к
одному из них, есть возможность работать с другим. Это следует учитывать. Также,
если средствами SELinux можно предусмотреть несколько уровней доступа к объекту
для разных субъектов, то AppArmor этого не умеет. В настоящее время
созданы профили для большинства популярных серверов и приложений, поэтому
наличие активного AppArmor обычно незаметно, он не создает проблем. Кроме
того, в комплекте поставки идут два скрипта aa-genprof и aa-logprof, которые
помогут быстро создать профиль для новой программы. Управление AppArmor
производится при помощи init-скрипта, который запускает модуль ядра,
инициализирует профили и монтирует псевдофайловую систему securityfs.
$ sudo /etc/init.d/apparmor start
Чтобы просмотреть список загруженных профилей, достаточно считать файл /sys/kernel/security/apparmor/profiles
(или запустить /etc/init.d/apparmor status); в зависимости от варианта
дистрибутива Server/Desktop количество активных профилей будет различно. Сами
профили хранятся в файлах (отдельно для каждого приложения) в каталоге /etc/apparmor.d
и внутри содержат описание каталогов и отдельных файлов, с указанием прав
доступа. Также указывается работа в сети и совместимость с другими профилями.
Для упрощения задачи используются регулярные выражения. По умолчанию профили
AppArmor работают в принудительном enforce-режиме. Когда сервис не может
выйти за рамки установок, все попытки блокируются и фиксируются в журнале. При
необходимости его можно перевести в щадящий режим complain, когда нарушения лишь
фиксируются. Причем, в отличие от SELinux, где режим обучения активируется
глобально, в AppArmor его можно включить для отдельного профиля. Перевести
профиль в щадящий режим можно тремя способами:
- указать в файле профиля flags=(complain);
- использовать команду complain название_программы (вернуть командой
enforce); - или глобально командой "echo 1 > /sys/kernel/security/apparmor/control/complain".
А еще профили отключаются на лету, перегружаются, в общем, полная свобода
действий. Собственно, простота и привлекает в AppArmor админов,
разработчиков и простых пользователей.
К слову, для ядер 2.4/2.6 существовала разработка
Trustees, реализующая ACL
a-ля Novell Netware, которая в удобной форме расписывала доступ к каталогам
вплоть до указания отдельных групп и пользователей и не зависела от файловой
системы. К сожалению, проект заглох, а это была бы золотая середина между
SELinux и AppArmor.
Сбиваем спесь со Skype
TOMOYO Linux
В настоящее время существует две версии TOMOYO Linux. Первая версия
использует оригинальные хуки, она доступна только в виде патчей и может
использоваться в ядрах 2.4 и 2.6. Вторая (которая уже в ядре) адаптирована под
LSM, но по функциональным возможностям уступает версии 1.х: нет поддержки
сетевых функций, обработки атрибутов, POSIX-возможностей (на сайте представлена
сравнительная таблица). В настоящее время соответствующие пакеты имеются в
репозиториях многих дистрибутивов, но фактически поддержка заявлена пока только
в Mandriva. К слову, в этом дистрибутиве предлагается и графический интерфейс
Tomoyo GUI, позволяющий запустить и настроить политики приложений. Доступность в
репозиториях пакетов для большинства дистрибутивов позволяет буквально в
считанные минуты перевести ОС на новую систему безопасности. Например, Ubuntu
10.04:
Если ядро собирается самостоятельно, активируй параметр "Enable different
security models" и "TOMOYO Linux Support" в секции Security options.
При беглом взгляде TOMOYO очень похож на AppArmor. Обе системы
контролируют путь (pathname based), а правила имеют сходный синтаксис. Но есть и
отличия. Так, в TOMOYO можно указать поведение программы в зависимости от
того, как она запущена. Например, оболочка, запущенная через SSH, может иметь
больше ограничений, чем запущенная с локальной системы. Предусмотрена проверка
дополнительных параметров, с которыми включена программа, а также привилегий (UID/GUD).
Приложения в терминологии TOMOYO называются доменами (domains).
Конфигурационные файлы TOMOYO находятся в каталоге /etc/tomoyo, после
запуска системы настройки имеют свое отражение в /proc/tomoyo, где их можно
редактировать на лету. Параметры работы TOMOYO хранятся в /etc/tomoyo/profile.conf
и доступны в /proc/tomoyo/profile. Именно здесь определяются режимы работы
TOMOYO — disable, permissive, enforsing и learning (обучаясь, система сама
строит правила). Есть и другие файлы:
- manager.conf (/proc/tomoyo/manager) — программы, которые могут изменить
политику в /proc/tomoyo; - exception_policy.conf (/proc/tomoyo/exception_policy) — исключения для
политик домена; - domain_policy.conf (/proc/tomoyo/domain_policy) — политики домена;
- meminfo.conf (/proc/tomoyo/meminfo) — настройка использования памяти и
квот.
После установки пакета ccs-tools необходимо провести инициализацию TOMOYO,
выполнив скрипт /usr/lib/ccs/tomoyo_init_police.sh, который и создаст нужные
конфиги. Далее потребуется перезагрузка системы. Затем можно запускать редактор
политик:
Еще одна немаловажная черта — TOMOYO может работать параллельно с
SELinux и AppArmor.
Операционные системы — это очень сложные конструкции, в которых находится место для ошибок, проблем и других нежелательных явлений. Особые опасения вызывают искусственно созданные «явления», которые мы называем вирусами, троянскими конями, сетевыми червями и шпионскими программами. Операционные системы семейства Linux считаются неплохо защищёнными от подобного рода проблем, но вероятность их возникновения далеко не нулевая. Для защиты от вредоносного ПО специалисты по безопасности разрабатывают программы, которые обычно называют антивирусами.
Сегодня мы рассмотрим десять лучших антивирусов для Linux. В Сети можно найти немало рассуждений о «самых лучших антивирусах», но мы полагаем, что доверять стоит не рассуждениям, а фактам. Программы, представленные здесь, отлично показали себя в независимых исследованиях, и именно поэтому они попали в этот обзор.
1. Sophos
По результатам исследований, Sophos можно признать одним из лучших бесплатных антивирусов для Linux. Он не только поддерживает сканирование по запросу, но и обеспечивает защиту системы в реальном времени. Существуют разные варианты этого антивируса, помимо Linux, он может использоваться и на других платформах, например, на Windows и Android. Он способен обнаруживать и удалять червей и троянцев. Если вы любите покопаться в командной строке, он предоставляет соответствующий интерфейс.
▍Особенности Sophos
- Бесплатность.
- Поддержка графического интерфейса и командной строки.
- Обнаружение и удаление вредоносного ПО.
- Подходит для защиты от червей, троянских программ, вирусов и от другого вредоносного ПО.
- Занимает мало места, лёгок в установке и использовании.
- Кроссплатформенность.
- Позволяет блокировать и устранять угрозы не только в Linux.
2. Comodo
Антивирус Comodo также можно считать одним из лучших. Он хорошо известен благодаря отличной поддержке разных архитектур и кроссплатформенности. Кроме того, он умеет сканировать электронную почту, такая возможность в других программах встречается нечасто. Comodo для Windows, кроме того, содержит модуль файрвола, работающий на 32 и 64-битных архитектурах. Антивирус Comodo для Linux поддерживает практически все дистрибутивы, поэтому он весьма широко распространён среди пользователей Linux. Ещё одна замечательная возможность Comodo заключается в том, что этот антивирус может работать и на сервере, например, на Red Hat Enterprise Linux Server, OpenSUSE, и SUSE Linux Enterprise Server.
▍Особенности Comodo
- Бесплатность.
- Простота установки и использования.
- Сканирование по требованию, отсутствие ложных срабатываний.
- Защита в реальном времени.
- Защита от спама.
- Кроссплатформенность.
- Поддержка серверных дистрибутивов Linux.
3. ClamAV
Пожалуй это — самый известный в сообществе Linux антивирус. ClamAV — это проект с открытым исходным кодом, пользоваться им можно бесплатно. Он считается многопрофильным антивирусом, который умеет бороться с троянцами, вирусами, другими вредоносными программами. Кроме того, он поддерживает сканирование стандартных почтовых шлюзов. Пользоваться им легко, работает он быстро, так как не имеет графического интерфейса и им управляют из терминала.
▍Особенности ClamAV
- Открытый исходный код.
- Бесплатность.
- Кроссплатформенность (Linux, Windows, MacOS).
- Работает из терминала.
- Поддерживает почтовые службы.
- Совместим с POSIX.
- Не требует установки.
4. F-PROT
F-PROT — это хорошо известный антивирус для Linux. Его можно использовать как для домашних нужд, так и в организациях. Он поддерживает 32-битные и 64-битные программные архитектуры. Он умеет обнаруживать более 2119958 известных вирусов, а также — их разновидности. С его помощью можно бороться и с троянскими программами и даже с загрузочными вирусами. Этот антивирус не требует установки, он умеет выполнять сканирование по расписанию с использованием заданий cron.
▍Особенности F-PROT
- Бесплатность.
- Не требует установки.
- Умеет детектировать более 21 миллиона угроз.
- Поддерживает различных программные архитектуры.
- Умеет проверять внешние носители информации.
- При сканировании может выявлять загрузочные вирусы, макровирусы и троянские программы.
5. Chkrootkit
Из названия этого антивируса, Chkrootkit, можно предположить, что он работает с правами root-пользователя. И на самом деле — так оно и есть. Это, честно говоря, наиболее удачное решение для поиска руткитов на Linux.
Программа занимает мало места и не требует установки. Её можно записать на CD или на USB-диск. Пакет Chkrootkit содержит множество модулей, способных удовлетворить нуждам самого взыскательного пользователя.
▍Особенности Chkrootkit
- Обнаружение руткитов.
- Малый размер.
- Не требует установки.
- Лёгок в использовании и быстро работает.
- Запускается из терминала.
- Имеет богатые возможности.
6. Rootkit Hunter
Rootkit Hunter — это ещё одно отличное средство для поиска руткитов. Программа работает из терминала, умеет распознавать руткиты, бэкдоры и другие локальные эксплойты, умеет искать вредоносный код в обычных текстах, а также выполнять проверки системы на предмет наличия характерных признаков вредоносного ПО. Для работы Rootkit Hunter требуется BASH, он поддерживает обширный набор дистрибутивов Linux.
▍Особенности Rootkit Hunter
- Обнаружение руткитов.
- Поддержка интерфейса командной строки.
- Лёгок в использовании и быстро работает.
- Поддерживает сканирование текстовых файлов.
- Не требует установки.
7. ClamTK
ClamTK — это усовершенствованная версия ClamAV, обладающая простым графическим интерфейсом и предназначенная для широкого круга пользователей. Благодаря наличию графического интерфейса, пользоваться этим антивирусом очень легко, у него есть подсистема для сканирования по требованию. Проект написан на Perl с использованием библиотеки GTK.
▍Особенности ClamTK
- Открытый исходный код.
- Бесплатность.
- Графический интерфейс.
- Поддержка сканирования по требованию.
- Не требует установки
8. BitDefender
Вполне возможно, что BitDefender может стать вашим следующим антивирусом. Он отлично справляется со своими обязанностями. Есть, правда, одно «но» — программа это не бесплатная, для загрузки доступна пробная версия. Однако, это не умаляет достоинств данного антивируса.
▍Особенности BitDefender
- Сканирование архивов.
- Интеграция с окружением рабочего стола.
- Интуитивно понятный графический интерфейс и возможность работать из командной строки.
- Отправка заражённых файлов на карантин в защищённую директорию.
9. ESET NOD32 Antivirus 4
В испытаниях ESET занимает верхнюю строчку рейтингов и признан лучшим антивирусом для Linux. Однако, продукт это платный, бесплатно его можно лишь попробовать. Правда, возможности этого антивируса позволяют говорить о том, что он стоит тех денег, что за него просят. Можно сказать, что это — лучший антивирус для Linux, существуют его версии и для других ОС.
▍Особенности ESET NOD32 Antivirus 4
- Лучшая программа для обнаружения вирусов и других вредоносных программ по результатам испытаний.
- Лучшее средство для защиты от вирусов и шпионского ПО.
- Подходит для домашних пользователей и для организаций.
- Поддержка функций сетевой безопасности.
- Автоматическое обновление.
10. Avast Core Security
Avast Core Security — это последняя программа, которую мы рассмотрим, однако, это не значит, что она хуже других. Avast Core Security входит в список лучших антивирусов по результатам испытаний. Антивирус поддерживает множество Linux-дистрибутивов, 32-битные и 64-битные программные архитектуры. Помимо традиционной защиты от вирусов, он содержит средства для обеспечения сетевой безопасности и защиты файловых серверов. Продукт это платный, но его пробная версия выглядит весьма достойно даже в сравнении с бесплатными антивирусами, в чём-то даже у них выигрывая.
▍Особенности Avast Core Security
- Антивирусная защита в реальном времени с возможностью обнаружения шпионского ПО.
- Сканирование по запросу и запланированное сканирование.
- Защита сети.
- Подходит для домашних пользователей и для организаций.
- Регулярные обновления.
Итоги
Мы постарались рассказать здесь о лучших антивирусах для Linux, основываясь на различных характеристиках этих программ, таких, как цена, доступность, надёжность и результаты независимых испытаний. Вы могли заметить, что список начинали бесплатные продукты, среди которых любой сможет подобрать подходящий 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
- Идентичность — Пользователь SELinux не то же самое, что и привычный Unix/Linux user id, они могут сосуществовать на одной и той же системе, но совершенно различны по сути. Каждая стандартная учетная запись Linux может соответствовать одному или нескольким в SELinux. Идентичность SELinux является составной частью общего контекста безопасности, который определяет в какие домены можно входить, а в какие — нельзя.
- Домены — В SELinux домен является контекстом выполнения субъекта, т. е. процесса. Домен напрямую определяет доступ, который имеет процесс. Домен — это в основном список того, что могут делать процессы или какие действия процесс может выполнять с разными типами. Некоторые примеры доменов: sysadm_t для системного администрирования, и user_t, который является обычным непривилегированным доменом пользователя. Система инициализации init запускается в домене init_t, а процесс named запускается в домене named_t.
- Роли — То, что служит посредником между доменами и пользователями SELinux. Роли определяют, в каких доменах может состоять пользователь и к каким типам объектов он сможет получить доступ. Подобный механизм разграничения доступов предотвращает угрозу осуществить атаку повышения привилегий. Роли вписаны в модель безопасности Role Based Access Control (RBAC), используемой в SELinux.
- Типы — Атрибут списка Type Enforcement, который назначается объекту и определяет, кто получит к нему доступ. Похоже на определение домена, за исключением того, что домен применяется к процессу, а тип применяется к таким объектам, как каталоги, файлы, сокеты и т. д.
- Субъекты и объекты — Процессы являются субъектами и запускаются в определенном контексте, или домене безопасности. Ресурсы операционной системы: файлы, директории, сокеты и пр., являются объектами, которым ставится в соответствие определенный тип, иначе говоря — уровень секретности.
- Политики SELinux — Для защиты системы SELinux использует разнообразные политики. Политика 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, выполняет над объектом разрешенное действие после 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 — Политики безопасности не действуют.
Изменение режима до перезагрузки, например выставить на enforcing, или 1. Параметру permissive соответствует числовой код 0.
Также изменить режим можно правкой файла:
Разница с 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 список ролей, прикрепленных к пользователю;
Файлы, порты и булевы значения
Первая команда регистрирует новые правила маркировки, а вторая сбрасывает, вернее выставляет, типы файлов в соответствии с текущими правилами.
Аналогично, 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.
На этом месте у большинства администраторов Linux возникнет стойкое искушение запустить setenforce 0, да и дело с концом. Признаться, в первый раз я так и сделал. Это конечно тоже выход, но далеко не самый лучший.
Несмотря на громоздкость конструкций SELinux может быть дружественным к пользователю. Достаточно установить пакет setroubleshoot и просмотреть системный журнал.
[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd
Обратите внимание на то, что сервис auditd необходимо перезапускать именно так, а не с помощью systemctl, несмотря на наличие systemd в ОС. В системном журнале будет указан не только факт блокировки, но также причина и способ преодоления запрета.
Выполняем эти команды:
На ежегодной конференции LinuxCon в 2015 году создатель ядра GNU/Linux Линус Торвальдс поделился своим мнением по поводу безопасности системы. Он подчеркнул необходимость смягчения эффекта от наличия тех или иных багов грамотной защитой, чтобы при нарушении работы одного компонента следующий слой перекрывал проблему.
В этом материале мы постараемся раскрыть эту тему с практической точки зрения:
- начнём с предварительной настройки и рекомендаций по выбору и установке дистрибутивов Linux;
- затем расскажем о простом и действенном пункте защиты — обновлении системы безопасности;
- далее рассмотрим, как настроить ограничения для программ и пользователей;
- как обезопасить соединение с сервером через SSH;
- приведём примеры настройки firewall и ограничения нежелательного трафика;
- в заключительной части объясним, как отключить ненужные программы и сервисы, как дополнительно оградить серверы от злоумышленников.
1. Настроить среду предзагрузки до установки Linux
Позаботиться о безопасности системы нужно ещё перед установкой Linux. Вот набор рекомендаций для настройки компьютера, которые стоит учесть и выполнить до установки операционной системы:
- Загрузка в режиме UEFI (не legacy BIOS – о нем подраздел ниже)
- Установить пароль на настройку UEFI
- Активировать режим SecureBoot
- Установить пароль на уровне UEFI для загрузки системы
2. Выбрать подходящий дистрибутив Linux
Скорее всего, вы выберете популярные дистрибутивы — Fedora, Ubuntu, Arch, Debian, или другие близкие ответвления. В любом случае, вам нужно учитывать обязательное наличие этих функций:
- Поддержка принудительного (MAC) и ролевого контроля доступа (RBAC): SELinux/AppArmor/GrSecurity
- Публикация бюллетеней безопасности
- Регулярный выпуск обновлений безопасности
- Криптографическая верификация пакетов
- Поддержка UEFI и SecureBoot
- Поддержка полного нативного шифрования диска
Все дистрибутивы отличаются, но существуют моменты, на которые обязательно стоит обратить внимание и выполнить:
- Использовать полное шифрование диска (LUKS) с надёжной ключевой фразой
- Процесс подкачки страниц должен быть зашифрован
- Установить пароль для редактирования boot-загрузчика
- Надёжный пароль на root-доступ
- Использовать аккаунт без привилегий, относящийся к группе администраторов
- Установить для пользователя надёжный пароль, отличный от пароля на root
3. Настроить автоматические обновления безопасности
Один из основных способов обеспечить безопасность операционной системы — обновлять программное обеспечение. Обновления часто исправляют найденные баги и критические уязвимости.
В случае с серверными системами есть риск возникновения сбоев во время обновления, но, по нашему мнению, проблемы можно свести к минимуму, если автоматически устанавливать только обновление безопасности.
Автообновление работает исключительно для установленных из репозиториев, а не скомпилированных самостоятельно пакетов:
- В Debian/Ubuntu для обновлений используется пакет unattended upgrades
- В CentOS для автообновления используется yum-cron
- В Fedora для этих целей есть dnf-automatic
Linux можно настроить на отправку оповещений о новых обновлениях по электронной почте.
Также для поддержания безопасности в ядре Linux есть защитные расширения, например, SELinux. Такое расширение поможет сберечь систему от неправильно настроенных или опасных программ.
SELinux — это гибкая система принудительного контроля доступа, которая может работать одновременно с избирательной системой контроля доступа. Запущенные программы получают права на доступ к файлам, сокетам и прочим процессам, и SELinux устанавливает ограничения так, чтобы вредные приложения не смогли сломать систему.
4. Ограничить доступ к внешним системам
Следующий после обновления способ защиты — ограничить доступ к внешним сервисам. Для этого нужно отредактировать файлы /etc/hosts.allow и /etc/hosts.deny.
Вот пример того, как ограничить доступ к telnet и ftp:
В файле /etc/hosts.allow:
Пример сверху позволит выполнять telnet и ftp соединения любому хосту в IP-классах 123.12.41.* и 126.27.18.*, а также хосту с доменами mydomain.name и another.name.
Далее в файле /etc/hosts.deny':
Добавление пользователя с ограниченными правами
Мы не рекомендуем подключаться к серверу от имени пользователя root — он имеет права на выполнение любых команд, даже критических для системы. Поэтому лучше создать пользователя с ограниченными правами и работать через него. Администрирование можно выполнять через sudo (substitute user and do) — это временное повышение прав до уровня администратора.
Как создать нового пользователя:
В Debian и Ubuntu:
Создайте пользователя, заменив administrator на желаемое имя и укажите пароль в ответ на соответствующий запрос. Вводимые символы пароля не отображаются в командной строке:
Добавьте пользователя в группу sudo:
Теперь вы можете использовать префикс sudo при выполнении команд, требующих прав администратора, например:
В CentOS и Fedora:
Создайте пользователя, заменив administrator на желаемое имя, и создайте пароль для его аккаунта:
Добавьте пользователя в группу wheel для передачи ему прав sudo:
Используйте только сильные пароли — минимум из 8 букв разного регистра, цифр и других специальных знаков. Для поиска слабых паролей среди пользователей вашего сервера используйте утилиты как «John the ripper», измените настройки в файле pam_cracklib.so, чтобы пароли устанавливались принудительно.
Установите период устаревания паролей командой chage:
Отключить устаревание паролей можно командой:
Узнать, когда пароль пользователя устареет:
Также вы можете отредактировать поля в файле /etc/shadow:
Чтобы узнать количество неудачных попыток входа:
Разблокировать аккаунт после неудачного входа:
Для блокирования и разблокирования аккаунтов можно использовать команду passwd:
Убедиться, что у всех пользователей установлены пароли, можно командой:
Заблокировать пользователей без паролей:
Проследите, чтобы параметр UID был установлен на 0 только для root-аккаунта. Введите эту команду, чтобы посмотреть всех пользователей с равному 0 UID.
Вы должны увидеть только:
Если появятся и другие строки, то проверьте, устанавливали ли вы для них UID на 0, ненужные строки удалите.
5. Настроить права доступа для пользователей
После установки паролей стоит убедиться, что все пользователи имеют доступ, соответствующий их рангу и ответственности. В Linux можно устанавливать права доступа на файлы и директории. Так появляется возможность создавать и контролировать различные уровни доступа для разных пользователей.
Категории доступа
Linux основана на работе с несколькими пользователями, поэтому каждый файл принадлежит одному конкретному пользователю. Даже если сервер администрирует один человек, для различных программ создаются несколько аккаунтов.
Просмотреть пользователей в системе можно командой:
Файл /etc/passwd содержит строку для каждого пользователя операционной системы. Под сервисы и приложения могут создаваться отдельные пользователи, которые также будут присутствовать в этом файле.
Помимо отдельных аккаунтов существует категория доступа для групп. Каждый файл принадлежит одной группе. Один пользователь может принадлежать к нескольким группам.
Посмотреть группы, к которым принадлежит ваш аккаунт, можно командой:
Вывести список всех групп в системе, где первое поле означает название группы:
Существует категория доступа «прочие», если пользователь не имеет доступа к файлу и не принадлежит к группа.
Типы доступа
Для категорий пользователей есть возможность устанавливать типы доступа. Обычно это права на запуск, чтение и изменение файла. В Linux типы доступа помечаются с помощью двух видов нотаций: алфавитной и восьмеричной.
В алфавитной нотации разрешения отмечены буквами:
В восьмеричной нотации уровень доступа к файлам определяется числами от 0 до 7, где 0 означает отсутствие доступа, а 7 означает полный доступ на изменение, чтение и выполнение:
6. Использовать ключи для соединения по SSH
Для подключения к хосту по SSH обычно используется аутентификация по паролю. Мы рекомендуем более безопасный способ — вход по паре криптографических ключей. В таком случае закрытый ключ используется вместо пароля, что серьёзно усложнит подбор грубой силой (brute-force).
Для примера создадим пару ключей. Действия нужно выполнять на локальном компьютере, а не на удалённом сервере. В процессе создания ключей вы можете указать пароль для доступа к ним. Если оставите это поле пустым, то не сможете использовать созданные ключи до сохранения их в keychain-менеджер компьютера.
Если вы уже создавали RSA ключи ранее, то пропустите команду генерации. Для проверки cуществующих ключей запустите:
Для генерации новых ключей:
Загрузка публичного ключа на сервер
Замените administrator на имя владельца ключа, а 1.1.1.1 на ip-адрес вашего сервера. С локального компьютера введите:
Чтобы проверить соединение, отключитесь и заново подключитесь к серверу — вход должен происходить по созданным ключам.
Настройка SSH
Вы можете запретить подключаться через SSH от имени root-пользователя, а для получения прав администратора использовать sudo в начале команды. На сервере в файле /etc/ssh/sshd_config нужно найти параметр PermitRootLogin и установить его значение на no.
Вы также можете запретить SSH-подключение по вводу пароля, чтобы все пользователи использовали ключи. В файле /etc/ssh/sshd_config укажите для параметра PasswordAuthentification значение no. Если этой строки нет или она закомментирована, то соответственно добавьте или разкомментируйте её.
В Debian или Ubuntu можно ввести:
Подключение можно также дополнительно обезопасить с помощью двухфакторной аутентификации.
7. Установить сетевые экраны
Недавно была обнаружена новая уязвимость, позволяющая проводить DDoS-атаки на сервера под управлением Linux. Баг в ядре системы появился с версии 3.6 в конце 2012 года. Уязвимость даёт возможность хакерам внедрять вирусы в файлы загрузки, веб-страницы и раскрывать Tor-соединения, причём для взлома не нужно прилагать много усилий — сработает метод IP-спуфинга.
Блокировать доступ с помощью Firewall
Firewall — это один из самых важных инструментов блокирования нежелательного входящего трафика. Мы рекомендуем пропускать только действительно нужный трафик и полностью запретить весь остальной.
Для фильтрации пакетов в большинстве дистрибутивов Linux есть контроллер iptables. Обычно им пользуются опытные пользователи, а для упрощённой настройки можно использовать утилиты UFW в Debian/Ubuntu или FirewallD в Fedora.
8. Отключить ненужные сервисы
Специалисты из Университета Виргинии рекомендуют отключить все сервисы, которые вы не используете. Некоторые фоновые процессы установлены на автозагрузку и работают до отключения системы. Для настройки этих программ нужно проверить скрипты инициализации. Запуск сервисов может осуществляться через inetd или xinetd.
Если система использует xinetd, то её конфигурация будет в директории /etc/xinetd.d. Каждый файл директории определяет сервис, который можно отключить, указав пункт disable = yes, как в этом примере:
Также стоит проверить постоянные процессы, которые не управляются inetd или xinetd. Настроить скрипты запуска можно в директориях /etc/init.d или /etc/inittab. После проделанных изменений запустите команду под root-аккаунтом.
9. Защитить сервер физически
Невозможно полностью защититься от атак злоумышленника с физическим доступом к серверу. Поэтому необходимо обезопасить помещение, где расположена ваша система. Дата-центры серьёзно следят за безопасностью, ограничивают доступ к серверам, устанавливают камеры слежения и назначают постоянную охрану.
Для входа в дата-центр все посетители должны проходить определенные этапы аутентификации. Также настоятельно рекомендуется использовать датчики движения во всех помещениях центра.
10. Защитить сервер от неавторизованного доступа
Система неавторизованного доступа или IDS собирает данные о конфигурации системы и файлах и в дальнейшем сравнивает эти данные с новыми изменениями, чтобы определить, вредны ли они для системы.
Например, инструменты Tripwire и Aide собирают базу данных о системных файлах и защищают их с помощью набора ключей. Psad используется для отслеживания подозрительной активности с помощью отчётов firewall.
Bro создан для мониторинга сети, отслеживания подозрительных схем действия, сбора статистики, выполнения системных команд и генерация оповещений. RKHunter можно использовать для защиты от вирусов, чаще всего руткитов. Эта утилита проверяет вашу систему по базе известных уязвимостей и может определять небезопасные настройки в приложениях.
Заключение
Перечисленные выше инструменты и настройки помогут вам частично защитить систему, но безопасность зависит от вашего поведения и понимания ситуации. Без внимательности, осторожности и постоянного самообучения все защитные меры могут не сработать.
Никто из нас не хочет, чтобы личная информация попала в чужие руки. Но как защитить систему от атак и хищений данных? Неужели придется читать километровые мануалы по настройке и алгоритмам шифрования? Совсем не обязательно. В этой статье я расскажу, как сделать Linux-систему безопасной буквально за 30 минут.
Введение
Мы живем в век мобильных устройств и постоянного онлайна. Мы ходим в кафе с ноутбуком и запускаем на домашних машинах веб-серверы, выставленные в интернет. Мы регистрируемся на сотнях сайтов и используем одинаковые пароли для веб-сервисов. В наших карманах всегда лежит смартфон, в который забиты десятки паролей, и хранятся ключи от нескольких SSH-серверов. Мы настолько привыкли к тому, что сторонние сервисы заботятся о нашей конфиденциальности, что уже перестали уделять ей внимание.
Когда я потерял смартфон, мне сильно повезло, что установленный на него антивор оказался работоспособным и позволил удаленно стереть все данные из памяти девайса. Когда я по невнимательности открыл SSH-порт на домашней машине с юзером без пароля (!) во внешний мир (!!), мне сильно повезло, что на машину пробрались скрипт-кидди, которые кроме смешной истории шелла не оставили никаких серьезных следов своего пребывания в системе. Когда я случайно опубликовал в интернете листинг со своим паролем от Gmail, мне сильно повезло, что нашелся добрый человек, который предупредил меня об этом.
Может быть, я и раздолбай, но я твердо уверен, что подобные казусы случались со многими, кто читает эти строки. И хорошо, если эти люди, в отличие от меня, серьезно позаботились о защите своей машины. Ведь антивор мог бы и не сработать, и вместо скрипт-кидди в машину могли пробраться серьезные люди, и потерять я мог не смартфон, а ноутбук, на котором кроме пароля пользователя не было никакой другой защиты. Нет, полагаться на одну двухфакторную аутентификацию Google и дурацкие пароли в наш век определенно не стоит, нужно что-то более серьезное.
Эта статья — гайд параноидального юниксоида, посвященный тотальной защите Linux-машины от всего и вся. Я не решусь сказать, что все описанное здесь обязательно к применению. Совсем наоборот, это сборник рецептов, информацию из которого можно использовать для защиты себя и данных на тех рубежах, где это нужно именно в твоей конкретной ситуации.
Пароль!
Все начинается с паролей. Они везде: в окне логина в Linux-дистрибутиве, в формах регистрации на интернет-сайтах, на FTP- и SSH-серверах и на экране блокировки смартфона. Стандарт для паролей сегодня — это 8–12 символов в разном регистре с включением цифр. Генерировать такие пароли своим собственным умом довольно утомительно, но есть простой способ сделать это автоматически:
Никаких внешних приложений, никаких расширений для веб-браузеров, OpenSSL есть на любой машине. Хотя, если кому-то будет удобней, он может установить и использовать для этих целей pwgen (поговаривают, пароль получится более стойким):
Где хранить пароли? Сегодня у каждого юзера их так много, что хранить все в голове просто невозможно. Довериться системе автосохранения браузера? Можно, но кто знает, как Google или Mozilla будет к ним относиться. Сноуден рассказывал, что не очень хорошо. Поэтому пароли надо хранить на самой машине в зашифрованном контейнере. Отцы-основатели рекомендуют использовать для этого KeePassX. Штука графическая, что не сильно нравится самим отцам-основателям, но зато работает везде, включая известный гугль-зонд Android (KeePassDroid). Останется лишь перекинуть базу с паролями куда надо.
В KeePassX есть свой генератор паролей
Другие статьи в выпуске:
Шифруемся
В Linux можно найти тонны средств шифрования всего и вся, от разделов на жестком диске до одиночных файлов. Три наиболее известных и проверенных временем инструмента — это dm-crypt/LUKS, ecryptfs и encfs. Первый шифрует целые диски и разделы, второй и третий — каталоги с важной информацией, каждый файл в отдельности, что очень удобно, если потребуется делать инкрементальные бэкапы или использовать в связке с Dropbox. Также есть несколько менее известных инструментов, включая TrueCrypt например.
Сразу оговорюсь, что шифровать весь диск целиком — задача сложная и, что самое важное, бесполезная. Ничего особо конфиденциального в корневом каталоге нет и быть не может, а вот домашний каталог и своп просто кладезь инфы. Причем второй даже больше, чем первый, так как туда могут попасть данные и пароли уже в расшифрованном виде (нормальные программеры запрещают системе скидывать такие данные в своп, но таких меньшинство). Настроить шифрование и того и другого очень просто, достаточно установить инструменты ecrypts:
И, собственно, включить шифрование:
Далее достаточно ввести свой пароль, используемый для логина, и перезайти в систему. Да, все действительно так просто. Первая команда зашифрует и перемонтирует своп, изменив нужные строки в /etc/fstab. Вторая — создаст каталоги ~/.Private и ~/Private, в которых будут храниться зашифрованные и расшифрованные файлы соответственно. При входе в систему будет срабатывать PAM-модуль pam_ecryptfs.so, который смонтирует первый каталог на второй с прозрачным шифрованием данных. После размонтирования ~/Private окажется пуст, а ~/.Private будет содержать все файлы в зашифрованном виде.
Не возбраняется шифровать и весь домашний каталог целиком. Производительность при этом упадет не сильно, зато под защитой окажутся вообще все файлы, включая тот же сетевой каталог ~/Dropbox. Делается это так:
Кстати, места на диске должно быть в 2,5 раза больше, чем данных у vasya, так что рекомендую заранее почиститься. После завершения операции следует сразу войти под юзером vasya и проверить работоспособность:
Если все ок, незашифрованную копию данных можно затереть:
Ecryptfs предупреждает нас
Заметаем следы
ОK, пароли в надежном месте, личные файлы тоже, что теперь? А теперь мы должны позаботиться о том, чтобы какие-то куски наших личных данных не попали в чужие руки. Ни для кого не секрет, что при удалении файла его актуальное содержимое остается на носителе даже в том случае, если после этого произвести форматирование. Наши зашифрованные данные будут в сохранности даже после стирания, но как быть с флешками и прочими картами памяти? Здесь нам пригодится утилита srm, которая не просто удаляет файл, но и заполняет оставшиеся после него блоки данных мусором:
Как всегда, все просто до безобразия. Далее, если речь идет о всем носителе, то можно воспользоваться старым добрым dd:
Эта команда сотрет все данные на флешке sdb. Далее останется создать таблицу разделов (с одним разделом) и отформатировать в нужную ФС. Использовать для этого рекомендуется fdisk и mkfs.vfat, но можно обойтись и графическим gparted.
Предотвращение BruteForce-атак
В Ubuntu/Debian для установки набираем:
Конфиги находятся в каталоге /etc/fail2ban. После изменения конфигурации следует перезапускать fail2ban командой:
Угроза извне
Теперь позаботимся об угрозах, исходящих из недр всемирной паутины. Здесь я должен был бы начать рассказ об iptables и pf, запущенном на выделенной машине под управлением OpenBSD, но все это излишне, когда есть ipkungfu. Что это такое? Это скрипт, который произведет за нас всю грязную работу по конфигурированию брандмауэра, без необходимости составлять километровые списки правил. Устанавливаем:
Для включения ipkungfu открываем файл /etc/default/ipkungfu и меняем строку IPKFSTART = 0 на IPKFSTART = 1. Запускаем:
Дополнительно внесем правки в /etc/sysctl.conf:
Выявляем вторжения
Snort — один из любимейших инструментов админов и главный фигурант всех руководств по безопасности. Штука с долгой историей и колоссальными возможностями, которой посвящены целые книги. Что он делает в нашем гайде по быстрой настройке безопасной системы? А здесь ему самое место, Snort можно и не конфигурировать:
Все! Я не шучу, стандартных настроек Snort более чем достаточно для защиты типовых сетевых сервисов, если, конечно, они у тебя есть. Нужно только время от времени просматривать лог. А в нем можно обнаружить строки типа этих:
Упс. Кто-то пытался вызвать переполнение буфера в MySQL. Тут сразу есть и ссылочка на страницу с детальным описанием проблемы. Красота.
Кто-то наследил…
Кто-то особенно умный смог обойти наш брандмауэр, пройти мимо Snort, получить права root в системе и теперь ходит в систему регулярно, используя установленный бэкдор. Нехорошо, бэкдор надо найти, удалить, а систему обновить. Для поиска руткитов и бэкдоров используем rkhunter:
Софтина проверит всю систему на наличие руткитов и выведет на экран результаты. Если зловред все-таки найдется, rkhunter укажет на место и его можно будет затереть. Более детальный лог располагается здесь: /var/log/rkhunter.log. Запускать rkhunter лучше в качестве cron-задания ежедневно:
Заменяем email-адрес Васи на свой и делаем скрипт исполняемым:
Базу rkhunter рекомендуется время от времени обновлять с помощью такой команды:
Ее, кстати, можно добавить перед командой проверки в cron-сценарий. Еще два инструмента поиска руткитов:
По сути, те же яйца Фаберже с высоты птичьего полета, но базы у них различные. Возможно, с их помощью удастся выявить то, что пропустил rkhunter. Ну и на закуску debsums — инструмент для сверки контрольных сумм файлов, установленных пакетов с эталоном. Ставим:
Как всегда? запуск можно добавить в задания cron.
rkhunter за работой
В моей системе руткитов нет
За пределами
Теперь поговорим о том, как сохранить свою анонимность в Сети и получить доступ к сайтам и страницам, заблокированным по требованию различных организаций-правообладателей и прочих Мизулиных. Самый простой способ сделать это — воспользоваться одним из тысяч прокси-серверов по всему миру. Многие из них бесплатны, но зачастую обрезают канал до скорости древнего аналогового модема.
Чтобы спокойно ходить по сайтам и только в случае необходимости включать прокси, можно воспользоваться одним из множества расширений для Chrome и Firefox, которые легко находятся в каталоге по запросу proxy switcher. Устанавливаем, вбиваем список нужных прокси и переключаемся на нужный, увидев вместо страницы табличку «Доступ к странице ограничен по требованию господина Скумбриевича».
В тех ситуациях, когда под фильтр попал весь сайт и его адрес внесли в черный список на стороне DNS-серверов провайдеров, можно воспользоваться свободными DNS-серверами, адреса которых опубликованы здесь. Просто берем два любых понравившихся адреса и добавляем в /etc/resolv.conf:
Чтобы разного рода DHCP-клиенты и NetworkManager’ы не перезаписали файл адресами, полученными от провайдера или роутера, делаем файл неперезаписываемым с помощью расширенных атрибутов:
После этого файл станет защищен от записи для всех, включая root.
Чтобы еще более анонимизировать свое пребывание в Сети, можно воспользоваться также демоном dnscrypt, который будет шифровать все запросы к DNS-серверу в дополнение к прокси-серверу, используемому для соединения с самим сайтом. Устанавливаем:
Указываем в /etc/resolv.conf loopback-адрес:
Кстати, версии dnscrypt есть для Windows, iOS и Android.
Луковая маршрутизация
Что такое луковая маршрутизация? Это Tor. А Tor, в свою очередь, — это система, которая позволяет создать полностью анонимную сеть с выходом в интернет. Термин «луковый» здесь применен относительно модели работы, при которой любой сетевой пакет будет «обернут» в три слоя шифрования и пройдет на пути к адресату через три ноды, каждая из которых будет снимать свой слой и передавать результат дальше. Все, конечно, сложнее, но для нас важно только то, что это один из немногих типов организации сети, который позволяет сохранить полную анонимность.
Тем не менее, где есть анонимность, там есть и проблемы соединения. И у Tor их как минимум три: он чудовищно медленный (спасибо шифрованию и передаче через цепочку нод), он будет создавать нагрузку на твою сеть (потому что ты сам будешь одной из нод), и он уязвим для перехвата трафика. Последнее — естественное следствие возможности выхода в интернет из Tor-сети: последняя нода (выходная) будет снимать последний слой шифрования и может получить доступ к данным.
Тем не менее Tor очень легко установить и использовать:
Чтобы введенный в командной строке пароль не был сохранен в истории, можно использовать хитрый трюк под названием «добавь в начале команды пробел».
Именно ecryptfs используется для шифрования домашнего каталога в Ubuntu.
Борьба с флудом
Приведу несколько команд, которые могут помочь при флуде твоего хоста.
Подсчет количества коннектов на определенный порт:
Подсчет числа «полуоткрытых» TCP-соединений:
Просмотр списка IP-адресов, с которых идут запросы на подключение:
Анализ подозрительных пакетов с помощью tcpdump:
Дропаем подключения атакующего:
Ограничиваем максимальное число «полуоткрытых» соединений с одного IP к конкретному порту:
Отключаем ответы на запросы ICMP ECHO:
Выводы
Вот и все. Не вдаваясь в детали и без необходимости изучения мануалов мы создали Linux-box, который защищен от вторжения извне, от руткитов и прочей заразы, от непосредственно вмешательства человека, от перехвата трафика и слежки. Остается лишь регулярно обновлять систему, запретить парольный вход по SSH, убрать лишние сервисы и не допускать ошибок конфигурирования.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Читайте также: