Перейти к содержанию

Резюме

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

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

Затем были рассмотрены меры по защите самой операционной системы. Одна из распространённых проблем — пользователи нередко оставляют рабочие станции без присмотра, не завершив сеанс. Чтобы предотвратить несанкционированный доступ, следует использовать пароли хранителя экрана. Также необходимо обучить пользователей блокировать рабочие станции или полностью завершать сеанс перед тем, как покинуть рабочее место. Команда nohup позволяет запускать процессы, которые будут продолжать работу даже после выхода пользователя из командной строки.

Далее были рассмотрены средства контроля доступа пользователей. Пользователи, группы и права доступа — основные инструменты контроля доступа к системе. Учётную запись root следует использовать обдуманно: только для задач, требующих привилегий root. Все остальные задачи следует выполнять от имени обычной учётной записи. Систему нельзя оставлять без присмотра, пока выполнен вход от имени root. Для переключения на учётную запись root используется команда su, а для возврата к обычной учётной записи — команда exit.

Если некоторым пользователям периодически требуется выполнять команды с правами root, но нежелательно сообщать им пароль root, можно воспользоваться командой sudo. В файле /etc/sudoers задаётся, какие пользователи могут выполнять какие команды с правами root. Для редактирования этого файла используется утилита visudo, которая открывает файл в редакторе vi и при выходе проверяет синтаксис.

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

  • шесть и более символов;
  • цифры наряду с буквами;
  • буквы верхнего и нижнего регистра;
  • слова, отсутствующие в словаре.

Также рекомендуется настроить устаревание паролей с помощью команды chage. Можно задать минимальное и максимальное число дней между сменами паролей, а также количество дней предупреждения до истечения срока.

Следует убедиться, что в Linux-системах используются теневые пароли. Хранение паролей в /etc/passwd крайне небезопасно. Для переноса паролей из /etc/passwd в /etc/shadow используется команда pwconv.

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

Далее была рассмотрена настройка лимитов пользователей. Можно ограничить количество одновременных входов, объём используемого процессорного времени и памяти с помощью модуля pam_limits системы PAM. Лимиты настраиваются в файле /etc/security/limits.conf со следующим синтаксисом:

domain type item value

Например, чтобы ограничить пользователя rtracy двумя одновременными входами:

rtracy hard maxlogins 2

Также можно использовать команду ulimit для настройки лимитов на системные ресурсы. Синтаксис: ulimit options limit. Доступные параметры:

  • -c — максимальный размер core-файлов (в блоках);
  • -f — максимальный размер файлов, создаваемых оболочкой (в блоках);
  • -n — максимальное количество открытых файловых дескрипторов;
  • -t — максимальное процессорное время (в секундах) для процесса;
  • -u — максимальное количество процессов для одного пользователя;
  • -d — максимальный размер (в КБ) сегмента данных процесса в ОЗУ;
  • -m — максимальный резидентный размер (в КБ) процесса в ОЗУ;
  • -s — максимальный размер стека (в КБ);
  • -H — жёсткий лимит на ресурс;
  • -S — мягкий лимит на ресурс.

Затем было рассмотрено полное отключение входа пользователей. Команда w позволяет просмотреть список всех пользователей. После этого команда pkill –KILL –u user_name принудительно завершает каждый сеанс. Далее все дальнейшие входы запрещаются созданием файла nologin в каталоге /etc. Пока этот файл существует, никто, кроме root, войти не может.

Ещё одна важная задача — аудит файлов с установленными правами SUID или SGID суперпользователя root. Для поиска файлов с правом SUID:

find / -type f -perm -u=s –ls

Для поиска файлов с правом SGID:

find / -type f -perm -g=s -ls

Далее внимание было сосредоточено на угрозах сетевых атак. Подключение сети к интернету подвергает Linux-системы многочисленным угрозам. Для отслеживания актуальных угроз рекомендуется регулярно посещать сайты www.cert.org и www.us-cert.gov.

Для проверки наличия ненужных работающих демонов используются утилиты chkconfig и nmap. Ненужные службы выгружаются с помощью соответствующего сценария инициализации. Следует также использовать chkconfig или systemctl, чтобы предотвратить загрузку ненужных служб при запуске.

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

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

Для реализации межсетевого экрана на Linux используется инфраструктура netfilter, оперирующая таблицами, цепочками и правилами. Таблица filter используется для создания правил фильтрации и включает цепочки FORWARD, INPUT и OUTPUT. Каждая цепочка настраивается с политиками ACCEPT, DROP, QUEUE и REJECT командой iptables. Обычная практика — использовать параметр -P для установки правил по умолчанию, а затем настраивать исключения.

Помимо этого, для диагностики используются системные журналы из каталога /var/log. К наиболее важным относятся:

  • boot.log
  • boot.msg
  • faillog
  • firewall
  • lastlog
  • mail
  • messages
  • warn
  • wtmp
  • xinetd.log
  • cron
  • dmesg
  • maillog
  • secure
  • rpmpkgs

Не все дистрибутивы используют одинаковые файлы журналов. Если дистрибутив использует демон init, журналирование обычно обеспечивает syslogd, настраиваемый с помощью /etc/syslog.conf. Большинство дистрибутивов автоматически выполняют ротацию журналов; демон cron периодически запускает logrotate. Настройка ротации выполняется с помощью /etc/logrotate.conf и файлов в /etc/logrotate.d/. Можно настроить syslogd для отправки всех событий журнала на централизованный узел-журнал. Удалённое журналирование настраивается добавлением строки в начало /etc/syslog.conf:

*.*      @IP_address_of_loghost

Также необходимо установить директиву SYSLOGD_PARAMS в файле /etc/sysconfig/syslog на узле-журнале в значение -r.

Если дистрибутив использует systemd, для журналирования применяется демон journald, ведущий журнал в /var/log/journal/. Для просмотра используется journalctl. Поведение journald настраивается в /etc/systemd/journald.conf. При желании использовать syslogd вместо journald можно применить syslog-ng.

Для просмотра журналов наиболее эффективны утилиты tail и head. Параметр -f при использовании с tail или journalctl позволяет отслеживать появление новых записей. Для поиска содержимого используется grep.

Для обнаружения попыток вторжения следует периодически просматривать следующие журналы:

  • /var/log/wtmp
  • /var/log/faillog
  • /var/log/lastlog
  • /var/log/messages

Для просмотра текущих пользователей системы используются утилиты who и finger.

В конце главы была рассмотрена настройка xinetd и inetd. Оба являются супердемонами, управляющими другими демонами сетевых служб. Когда поступает запрос к сетевой службе, xinetd (или inetd) запускает её и перенаправляет ей запрос; когда служба больше не нужна — выгружает из памяти.

Демон xinetd настраивается с помощью /etc/xinetd.conf. Отдельные службы включаются или отключаются соответствующим файлом в каталоге /etc/xinetd.d. Для дополнительной защиты применяются TCP Wrappers: xinetd запускает tcpd вместо самой службы, а tcpd проверяет файлы /etc/hosts.deny и /etc/hosts.allow.

Демон inetd настраивается с помощью /etc/inetd.conf. Все службы настраиваются в этом едином файле со следующим синтаксисом:

service_name socket_type protocol flags user executable arguments

Как и с xinetd, с inetd можно использовать TCP Wrappers для контроля доступа с помощью файлов /etc/hosts.allow и /etc/hosts.deny.

Ускоренное повторение (Accelerated Review)

  • Многие организации пренебрегают физической безопасностью и размещают системы в незащищённых местах.
  • Серверы нуждаются в наивысшей степени физической защиты и должны находиться в запертой серверной комнате с контролируемым доступом.
  • Рабочие станции требуют более широкого доступа, чем серверы.
  • Доступ в рабочее пространство следует контролировать для предотвращения несанкционированного доступа к рабочим станциям.
  • Следует применять пароли хранителя экрана, поскольку пользователи нередко оставляют рабочие станции без присмотра.
  • Необходимо обучать пользователей блокировать рабочие станции или завершать сеанс перед уходом.
  • Команда nohup позволяет запускать процессы, продолжающие работу после выхода из командной строки.
  • Пользователи, группы и права доступа — основные инструменты контроля доступа.
  • Учётная запись root должна использоваться только для задач с привилегиями root; остальные задачи — от обычной учётной записи.
  • Систему нельзя оставлять без присмотра с выполненным входом root.
  • Команда su переключает на учётную запись root для задач, требующих привилегий root.
  • Команда exit возвращает к обычной учётной записи.
  • Команда sudo позволяет отдельным пользователям выполнять команды с правами root без знания пароля root.
  • В файле /etc/sudoers задаётся, какие пользователи могут выполнять какие команды с правами root.
  • Файл /etc/sudoers редактируется утилитой visudo, проверяющей синтаксис.
  • Пользователей необходимо обучать избегать лёгких для угадывания паролей.
  • Надёжные пароли содержат шесть и более символов, цифры и буквы, буквы разного регистра, слова, отсутствующие в словаре.
  • Устаревание паролей настраивается командой chage.
  • chage позволяет задать минимальное и максимальное число дней между сменами, а также количество дней предупреждения.
  • Следует убедиться, что используются теневые пароли.
  • Хранение паролей в /etc/passwd крайне небезопасно.
  • Команда pwconv переносит пароли из /etc/passwd в /etc/shadow.
  • Не следует разрешать пользователям записывать пароли.
  • Необходимо обучать пользователей противодействию атакам социальной инженерии.
  • Важные документы следует уничтожать шредером.
  • Модуль pam_limits ограничивает количество входов, использование процессора и памяти.
  • Лимиты настраиваются в /etc/security/limits.conf.
  • Команда ulimit настраивает лимиты на системные ресурсы для программ из командной строки.
  • Синтаксис ulimit: ulimit options limit.
  • Можно полностью отключить вход пользователей.
  • Сначала w просматривает список авторизованных пользователей, затем pkill –KILL –u user_name завершает их сеанс.
  • Создание файла nologin в /etc запрещает все дальнейшие входы.
  • Пока файл nologin существует, никто кроме root войти не может.
  • Для поиска файлов с правом SUID используется find / –type f –perm –u=s –ls от имени root.
  • Для поиска файлов с правом SGID используется find / –type f –perm –g=s –ls.
  • Подключение к интернету подвергает Linux-системы сетевым атакам, необходимо отслеживать угрозы.
  • Следует регулярно посещать www.cert.org и www.us-cert.gov.
  • Для проверки наличия ненужных демонов используются chkconfig и nmap.
  • Ненужные службы выгружаются соответствующим сценарием инициализации.
  • Следует использовать chkconfig или systemctl для предотвращения загрузки ненужных служб.
  • Необходимо регулярно устанавливать обновления ОС для закрытия уязвимостей.
  • Большинство дистрибутивов предоставляют функциональность онлайн-обновления.
  • Межсетевые экраны — критически важный компонент безопасности сети.
  • Межсетевой экран расположен между сетями и сравнивает трафик с правилами.
  • Трафик, соответствующий правилам, пропускается; не соответствующий — блокируется.
  • Правила основаны на адресах источника/назначения, портах, протоколе или типе пакета.
  • Сначала следует разработать схему работы межсетевого экрана.
  • Межсетевой экран реализуется с помощью netfilter, обычно компилируемой в ядро по умолчанию.
  • netfilter оперирует таблицами, цепочками и правилами.
  • Таблица filter включает цепочки FORWARD, INPUT и OUTPUT.
  • Каждая цепочка настраивается с политиками ACCEPT, DROP, QUEUE и REJECT командой iptables.
  • Обычная практика — использовать -P для правил по умолчанию, затем настраивать исключения.
  • Для диагностики используются системные журналы из /var/log.
  • К важным файлам журналов относятся: boot.log, boot.msg, faillog, firewall, lastlog, mail, messages, warn, wtmp, xinetd.log, cron, dmesg, maillog, secure, rpmpkgs.
  • Не все дистрибутивы используют одинаковые файлы журналов.
  • В более старых дистрибутивах журналирование обеспечивает syslogd через /etc/syslog.conf.
  • Большинство дистрибутивов автоматически выполняют ротацию журналов.
  • Демон cron периодически запускает logrotate для ротации.
  • Ротация настраивается через /etc/logrotate.conf и файлы в /etc/logrotate.d/.
  • Можно настроить syslogd для централизованного сбора журналов на узле-журнале.
  • В более новых дистрибутивах используется journald; просмотр через journalctl.
  • Для просмотра журналов эффективны tail и head; для поиска — grep.
  • Параметр -f с tail или journalctl позволяет отслеживать новые записи.
  • Журналы помогают обнаруживать попытки вторжения; следует проверять /var/log/wtmp, /var/log/faillog, /var/log/lastlog, /var/log/messages.
  • Для просмотра текущих пользователей используются who и finger.
  • xinetd и inetd — супердемоны, управляющие сетевыми службами.
  • При запросе службы xinetd (или inetd) запускает её и перенаправляет запрос; после завершения выгружает из памяти.
  • xinetd настраивается через /etc/xinetd.conf; отдельные службы — через файлы в /etc/xinetd.d.
  • Для контроля доступа используются TCP Wrappers: xinetd запускает tcpd, который проверяет /etc/hosts.deny и /etc/hosts.allow.
  • inetd настраивается через /etc/inetd.conf; все службы — в едином файле.
  • Каждая строка файла настраивает одну службу.
  • С inetd тоже можно использовать TCP Wrappers через /etc/hosts.allow и /etc/hosts.deny.