12 советов по повышению безопасности Linux

Мы живём в опасное время: едва ли не каждый день обнаруживаются новые уязвимости, на их основе создают эксплойты, под ударом может оказаться и обычный домашний компьютер на Linux, и сервер, от которого зависит огромная организация.

Возможно, вы уделяете внимание безопасности и периодически обновляете систему, но обычно этого недостаточно. Поэтому сегодня мы поделимся двенадцатью советами по повышению безопасности Linux-систем на примере CentOS 7.

Защита терминала

Для того, чтобы повысить безопасность системы, можно защитить консольный доступ к ней, ограничив root-пользователя в использовании определённых терминалов. Сделать это можно, задав терминалы, которые может использовать суперпользователь, в файле <span class="hljs-meta-keyword">/etc/</span>securetty.

Рекомендуется, хотя это и не обязательно, позволить суперпользователю входить в систему только из одного терминала, оставив остальные для других пользователей.

Напоминания о смене пароля

В наши дни сложный пароль — вещь совершенно необходимая. Однако, ещё лучше, когда пароли регулярно меняют. Об этом легко забыть, поэтому хорошо бы задействовать какой-нибудь системный механизм напоминаний о возрасте пароля, и о том, когда его надо поменять.

Мы предлагаем вам два способа организации подобных напоминаний. Первый заключается в использовании команды <span class="hljs-keyword">change</span>, второй — в установке необходимых значений по умолчанию в <span class="hljs-meta-keyword">/etc/</span>login.defs.

Вызов команды <span class="hljs-keyword">change</span> выглядит так:

$ chage -M <span class="hljs-number">20</span> likegeeks

Тут мы используем ключ <span class="hljs-deletion">-M</span> для того, чтобы установить срок истечения актуальности пароля в днях.

Использовать эту команду можно и без ключей, тогда она сама предложит ввести необходимое значение:

$ chage likegeeks

Второй способ заключается в модификации файла <span class="hljs-meta-keyword">/etc/</span>login.defs. Вот пример того, как могут выглядеть интересующие нас значения. Вы можете изменить их на те, которые нужны вам:

<span class="hljs-attribute">PASS_MAX_DAYS</span> <span class="hljs-number">10</span>
PASS_MIN_DAYS <span class="hljs-number">0</span>
PASS_WARN_AGE <span class="hljs-number">3</span>

Помните о том, что вам, если вы играете роль администратора, следует способствовать тому, чтобы пользователи применяли сложные пароли. Сделать это можно с помощью pam_cracklib.

После установки этой программы, вы можете перейти в <span class="hljs-meta-keyword">/etc/</span>pam.d/system-auth и ввести примерно следующее:

<span class="hljs-attribute">password</span> required pam_cracklib.so minlen=<span class="hljs-number">12</span> lcredit=-<span class="hljs-number">1</span> ucredit=-<span class="hljs-number">1</span> dcredit=-<span class="hljs-number">2</span> ocredit=-<span class="hljs-number">1</span>

Уведомления sudo

Команда sudo, с одной стороны, упрощает жизнь, а с другой, может стать причиной проблем с безопасностью Linux, которые могут привести к непоправимым последствиям. Настройки sudo хранятся в файле <span class="hljs-meta-keyword">/etc/</span>sudoers. С помощью этого файла можно запретить обычным пользователям выполнять некоторые команды от имени суперпользователя. Кроме того, можно сделать так, чтобы команда sudo отправляла электронное письмо при её использовании, добавив в вышеупомянутый файл следующее:

<span class="hljs-attribute">mailto</span> yourname<span class="hljs-variable">@yourdomain</span>.com

Также надо установить свойство mail_always в значение <span class="hljs-literal">on</span>:

<span class="hljs-attribute">mail_always</span> <span class="hljs-literal">on</span>

Защита SSH

Если мы говорим о безопасности Linux, то нам стоит вспомнить и о службе SSH. SSH — это важная системная служба, она позволяет удалённо подключаться к системе, и иногда это — единственный способ спасти ситуацию, когда что-то идёт не так, поэтому об отключении SSH мы тут не говорим.

Тут мы используем CentOS 7, поэтому конфигурационный файл SSH можно найти по адресу etc<span class="hljs-meta-keyword">/ssh/</span>sshd_config. Сканеры или боты, которых используют атакующие, пытаются подключиться к SSH по используемому по умолчанию порту 22.

Распространена практика изменения стандартного порта SSH на другой, неиспользуемый порт, например, на 5555. Порт SSH можно изменить, задав нужный номер порта в конфигурационном файле. Например, так:

<span class="hljs-attribute">Port</span> <span class="hljs-number">5555</span>

Кроме того, можно ограничить вход по SSH для root-пользователя, изменив значение параметра PermitRootLogin на <span class="hljs-literal">no</span>:

<span class="hljs-attribute">PermitRootLogin</span> <span class="hljs-literal">no</span>

И, конечно, стоит отключить аутентификацию с применением пароля и использовать вместо этого публичные и приватные ключи:

<span class="hljs-attribute">PasswordAuthentication</span> <span class="hljs-literal">no</span> 
PermitEmptyPasswords <span class="hljs-literal">no</span>

Теперь поговорим о тайм-аутах SSH. Проблему тайм-аутов можно решить, настроив некоторые параметры. Например, следующие установки подразумевают, что пакеты, поддерживающие соединение, будут автоматически отправляться через заданное число секунд:

<span class="hljs-attribute">ServerAliveInterval</span> <span class="hljs-number">15</span>
ServerAliveCountMax <span class="hljs-number">3</span>
TCPKeepAlive <span class="hljs-literal">yes</span>

Настроив эти параметры, вы можете увеличить время соединения:

<span class="hljs-attribute">ClientAliveInterval</span> <span class="hljs-number">30</span>
ClientAliveCountMax <span class="hljs-number">5</span>

Можно указать то, каким пользователям разрешено использовать SSH:

<span class="hljs-attribute">AllowUsers</span> user1 user2

Разрешения можно назначать и на уровне групп:

<span class="hljs-attribute">AllowGroup</span> group1 group2

Защита SSH с использованием Google Authenticator

Для ещё более надёжной защиты SSH можно использовать двухфакторную аутентификацию, например, задействовав Google Authenticator. Для этого сначала надо установить соответствующую программу:

$ yum <span class="hljs-keyword">install</span> google-authenticator

Затем запустить её для проверки установки:

$ google-authenticator

Так же нужно, чтобы приложение Google Authenticator было установлено на вашем телефоне.

Отредактируйте файл <span class="hljs-meta-keyword">/etc/</span>pam.d/sshd, добавив в него следующее:

<span class="hljs-selector-tag">auth</span> <span class="hljs-selector-tag">required</span> <span class="hljs-selector-tag">pam_google_authenticator</span><span class="hljs-selector-class">.so</span>

Теперь осталось лишь сообщить обо всём этом SSH, добавив следующую строку в файл <span class="hljs-meta-keyword">/etc/</span>ssh/sshd_config:

<span class="hljs-attribute">ChallengeResponseAuthentication</span> <span class="hljs-literal">yes</span>

Теперь перезапустите SSH:

$ systemctl restart sshd

Когда вы попытаетесь войти в систему с использованием SSH, вам предложат ввести код верификации. Как результат, теперь SSH-доступ к вашей системе защищён гораздо лучше, чем прежде.

Мониторинг файловой системы с помощью Tripwire

Tripwire — это замечательный инструмент для повышения безопасности Linux. Это — система обнаружения вторжений (HIDS).

Задача Tripwire заключается в том, чтобы отслеживать действия с файловой системой, следить за тем, кто меняет файлы, и когда происходят эти изменения.

Для того, чтобы установить Tripwire, нужен доступ к репозиторию EPEL. Это задача несложная, решить её можно следующими командами:

wget <span class="hljs-symbol">http:</span>/<span class="hljs-regexp">/dl.fedoraproject.org/pub</span><span class="hljs-regexp">/epel/</span><span class="hljs-number">7</span>/x86_64/e/epel-release-<span class="hljs-number">7</span>-<span class="hljs-number">9</span>.noarch.rpm
$ rpm -ivh epel-release-<span class="hljs-number">7</span>-<span class="hljs-number">9</span>.noarch.rpm

После установки репозитория EPEL, вы сможете установить и Tripwire:

$ sudo yum <span class="hljs-keyword">install</span> tripwire

Теперь создайте файл ключей:

$ tripwire-setup-keyfiles

Вам предложат ввести сложный пароль для файла ключей. После этого можно настроить Tripwire, внеся изменения в файл <span class="hljs-meta-keyword">/etc/</span>tripwire/twpol.txt. Работать с этим файлом несложно, так как каждая строка оснащена содержательным комментарием.

Когда настройка программы завершена, следует её инициализировать:

$ tripwire <span class="hljs-comment">--init</span>

Инициализация, в ходе которой выполняется сканирование системы, займёт некоторое время, зависящее от размеров ваших файлов.

Любые модификации защищённых файлов расцениваются как вторжение, администратор будет об этом оповещён и ему нужно будет восстановить систему, пользуясь файлами, в происхождении которых он не сомневается.

По этой причине необходимые изменения системы должны быть подтверждены с помощью Tripwire. Для того, чтобы это сделать, используйте следующую команду:

$ tripwire <span class="hljs-comment">--check</span>

И вот ещё одна рекомендация, касающаяся Tripwire. Защитите файлы <span class="hljs-selector-tag">twpol</span><span class="hljs-selector-class">.txt</span> и <span class="hljs-selector-tag">twcfg</span><span class="hljs-selector-class">.txt</span>. Это повысит безопасность системы.

У Tripwire есть множество параметров и установок. Посмотреть справку по ней можно так:

<span class="hljs-attribute">man</span> tripwire

Использование Firewalld

Firewalld — это замена для iptables, данная программа улучшает сетевую безопасность Linux. Firewalld позволяет вносить изменения в настройки, не останавливая текущие соединения. Файрвол работает как сервис, который позволяет добавлять и менять правила без перезапуска и использует сетевые зоны.

Для того, чтобы выяснить, работает ли в настоящий момент firewalld, введите следующую команду:

$ firewall-cmd --<span class="hljs-keyword">state</span>
Двенадцать советов по повышению безопасности Linux - 2

Просмотреть предопределённые сетевые зоны можно так:

$ firewall-cmd <span class="hljs-comment">--get-zones</span>
Двенадцать советов по повышению безопасности Linux - 3

Каждая из этих зон имеет определённый уровень доверия.

Это значение можно обновить следующим образом:

$ firewall-cmd --<span class="hljs-built_in">set</span>-<span class="hljs-keyword">default</span>-zone=<<span class="hljs-keyword">new</span>-name>

Получить подробные сведения о конкретной зоне можно так:

$ firewall-cmd --zone=<span class="xml"><span class="hljs-tag"><<span class="hljs-name">zone-name</span>></span> --list-all</span>

Просмотреть список всех поддерживаемых служб можно следующей командой:

$ firewall-cmd <span class="hljs-comment">--get-services</span>
Двенадцать советов по повышению безопасности Linux - 4

Затем можно добавлять в зону новые службы или убирать существующие:

$ firewall-cmd --zone= --add-service=
$ firewall-cmd --zone= --remove-service=

Можно вывести сведения обо всех открытых портах в любой зоне:

$ firewall-cmd --zone=<span class="xml"><span class="hljs-tag"><<span class="hljs-name">zone-name</span>></span> --list-ports</span>

Добавлять порты в зону и удалять их из неё можно так:

$ firewall-cmd --zone= --add-port=<span class="hljs-params"></span>
$ firewall-cmd --zone= --remove-port=<span class="hljs-params"></span>

Можно настраивать и перенаправление портов:

$ firewall-cmd --zone= --add-forward-port=
$ firewall-cmd --zone= --remove-forward-port=

Firewalld — это весьма продвинутый инструмент. Самое примечательное в нём то, что он может нормально работать, например, при внесении изменений в настройки, без перезапусков или остановок службы. Это отличает его от средства iptables, при работе с которым службу в похожих ситуациях нужно перезапускать.

Переход с firewalld на iptables

Некоторые предпочитают файрвол iptables файрволу firewalld. Если вы пользуетесь firewalld, но хотите вернуться к iptables, сделать это довольно просто.

Сначала отключите firewalld:

$ systemctl disable firewalld
$ systemctl stop firewalld

Затем установите iptables:

$ yum install iptables-services
$ touch /etc/sysconfig/iptables
$ touch /etc/sysconfig/ip6tables

Теперь можно запустить службу iptables:

$ systemctl <span class="hljs-keyword">start</span> iptables
$ systemctl <span class="hljs-keyword">start</span> ip6tables
$ systemctl <span class="hljs-keyword">enable</span> iptables
$ systemctl <span class="hljs-keyword">enable</span> ip6tables

После всего этого перезагрузите компьютер.

Ограничение компиляторов

Атакующий может скомпилировать эксплойт на своём компьютере и выгрузить его на интересующий его сервер. Естественно, при таком подходе наличие компиляторов на сервере роли не играет. Однако, лучше ограничить компиляторы, если вы не используете их для работы, как происходит в большинстве современных систем управления серверами.

Для начала выведите список всех бинарных файлов компиляторов из пакетов, а затем установите для них разрешения:

$ rpm -<span class="hljs-keyword">q</span> --filesbypkg gcc | <span class="hljs-keyword">grep</span> <span class="hljs-string">'bin'</span>
Двенадцать советов по повышению безопасности Linux - 5

Создайте новую группу:

$ groupadd compilerGroup

Затем измените группу бинарных файлов компилятора:

$ chown root:compilerGroup <span class="hljs-meta-keyword">/usr/</span>bin/gcc

И ещё одна важная вещь. Нужно изменить разрешения этих бинарных файлов:

$ chmod <span class="hljs-number">0750</span> <span class="hljs-meta-keyword">/usr/</span>bin/gcc

Теперь любой пользователь, который попытается использовать gcc, получит сообщение об ошибке.

Предотвращение модификации файлов

Иммутабельные файлы не может перезаписать ни один пользователь, даже обладающий root-правами. Пользователь не может модифицировать или удалить такой файл до тех пор, пока установлен флаг иммутабельности, снять который может лишь root-пользователь.

Несложно заметить, что эта возможность защищает вас, как суперпользователя, от ошибок, которые могут нарушить работу системы. Используя данный подход, можно защитить конфигурационные файлы или любые другие файлы по вашему желанию.

Для того, чтобы сделать любой файл иммутабельным, воспользуйтесь командой chattr:

$ chattr +i /myscript
Двенадцать советов по повышению безопасности Linux - 6

Атрибут иммутабельности можно удалить такой командой:

$ chattr -i /myscript
Двенадцать советов по повышению безопасности Linux - 7

Так можно защищать любые файлы, но помните о том, что если вы обработали таким образом бинарные системные файлы, вы не сможете их обновить до тех пор, пока не снимите флаг иммутабельности.

Управление SELinux с помощью aureport

Нередко система принудительного контроля доступа SELinux оказывается, по умолчанию, отключённой. Это не влияет на работоспособность системы, да и работать с SELinux довольно сложно. Однако, ради повышения безопасности, SELinux можно включить, а упростить управление этим механизмом можно, используя aureport.

Утилита aureport позволяет создавать отчёты на основе лог-файлов аудита.

$ aureport <span class="hljs-comment">--avc</span>
Двенадцать советов по повышению безопасности Linux - 8

Список исполняемых файлов можно вывести следующей командой:

$ aureport -x
Двенадцать советов по повышению безопасности Linux - 9

Можно использовать aureport для создания полного отчёта об аутентификации:

$ aureport -au -i
Двенадцать советов по повышению безопасности Linux - 10

Также можно вывести сведения о неудачных попытках аутентификации:

$ aureport -au <span class="hljs-comment">--summary -i --failed</span>
Двенадцать советов по повышению безопасности Linux - 11

Или, возможно, сводку по удачным попыткам аутентификации:

$ aureport -au <span class="hljs-comment">--summary -i --success</span>
Двенадцать советов по повышению безопасности Linux - 12

Утилита aureport значительно упрощает работу с SELinux.

Использование sealert

В дополнение к aureport вы можете использовать хороший инструмент безопасности Linux, который называется sealert. Установить его можно так:

$ yum <span class="hljs-keyword">install</span> setools

Теперь у нас есть средство, которое будет выдавать оповещения из файла <span class="hljs-meta-keyword">/var/</span>log<span class="hljs-meta-keyword">/audit/</span>audit.log и даст нам дополнительные сведения о проблемах, выявленных SELinux.

Использовать его можно так:

$ sealert <span class="hljs-_">-a</span> /var/<span class="hljs-built_in">log</span>/audit/audit.log
Двенадцать советов по повышению безопасности Linux - 13

Самое интересное тут то, что в оповещениях можно найти советы о том, как решать соответствующие проблемы.

Итоги

Надеемся, приведённые здесь советы помогут вам сделать вашу установку Linux безопаснее. Однако, если речь идёт о защите информации, нельзя, применив те или иные меры, считать, что теперь вам ничто не угрожает. К любым программным средствам защиты всегда стоит добавлять бдительность и осторожность.

Поделитесь с друзьями

Добавить комментарий

0 комментариев
Новіші
Старіші Найпопулярніші
Вбудовані Відгуки
Переглянути всі коментарі
0
Ми любимо ваші думки, будь ласка, прокоментуйте.x