Security policies in linux

Security policies in linux

Пользователь — авторизованное лицо, обладающее учетной записью. Пользователи могут использовать систему одним из следующих способов:

  • Взаимодействуя непосредственно с системой через сеанс в консоли (в этом случае пользователь может использовать дисплей, предоставленный в качестве физической консоли).
  • Взаимодействуя непосредственно с системой через сеанс в терминале с последовательным доступом.
  • Посредством отложенного выполнения заданий, используя механизм cron.
  • При помощи служб различных приложений, получая доступ к этим службам локально или удаленно.
  • Используя среды виртуальных машин, получая доступ к этим средам локально или удаленно.

Пользователь должен выполнить вход в локальной системе, чтобы получить доступ к защищенным ресурсам системы. После аутентификации пользователь может получить доступ к файлам или выполнить программы на локальном компьютере, либо выполнить сетевые запросы к другим компьютерам в системе. Единственные субъекты в системе — процессы. Процесс состоит из адресного пространства и контекста исполнения. Процесс ограничен компьютером; не существует никакого механизма, позволяющего диспетчеризировать процесс, чтобы запустить его удаленно (по TCP/IP) на другом узле. У каждого процесса есть идентификатор процесса (PID), который уникален на локальном компьютере, где выполняется процесс, однако идентификатора процессов не уникальны в пределах всех систем. Например, у каждого узла в системе есть процесс init , идентификатор которого PID=1. Далее в этой статье объясняется, как родительский процесс создает дочерний процесс, создавая его клон с помощью системного вызова clone , fork или vfork ; дочерний элемент тогда может использовать системный вызов execve, чтобы загрузить новую программу.

Объекты — пассивные хранилища данных. В исследуемой системе определены три типа объектов: именованные объекты, которые являются ресурсами, например файлы и объекты IPC, которыми могут управлять многочисленные пользователи, использующие соглашение о присвоении имен, определенное в интерфейсе TSF;

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

Согласно этим определениям, все именованные объекты также могут быть классифицированы как объекты-хранилища, но не все объекты-хранилища являются именованными объектами.

Система Linux реализует политику дискретного контроля доступа (DAC) для всех именованных объектов и политику повторного использования объектов для всех объектов-хранилищ. Реализация политики DAC означает ее различное применение к различным классам объектов, во всех случаях в основе этой политики лежат идентификационная информация пользователя (пользовательский идентификатор) и членство пользователя в группах, связанное с иднтифиатором пользователя.

В дополнение к политике DAC, Linux также осуществляет политику MAC для всех именованных объектов. Политика DAC осуществляется первой, а политика MAC применяется, только если DAC не запрещает разрешенные ею операции. Политика MAC не авторитетная, т.е. отказ в доступе, определенный политикой DAC, не может быть переопределен политикой MAC. Реализация политики MAC, означает ее различное применение к различным классам объектов; во всех случаях в основе этой политики лежат данные о домене пользователя и типе объекта.

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

Исследуемая система использует как аппаратный, так и программный механизмы защиты данных.

К аппаратным механизмам, используемым Linux, чтобы обеспечить защищенный домен для работы самой операционной системы, относятся процессор со многими состояниями, защиту сегментов памяти и защиту страниц виртуальной памяти. Программное обеспечение TOE полагается на эти аппаратные механизмы для реализации изоляции TSF, обеспечения надежной защиты, которую невозможно обойти, и разделение адресных пространств процессов.

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

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

Архитектура системы обеспечивает самозащиту TSF и механизмы изоляции процессов.

Источник

Создание политики паролей в Linux

И снова здравствуйте! Уже завтра начинаются занятия в новой группе курса «Администратор Linux», в связи с этим публикуем полезную статью по теме.

В прошлом туториале мы рассказывали, как использовать pam_cracklib , чтобы усложнить пароли в системах Red Hat 6 или CentOS. В Red Hat 7 pam_pwquality заменила cracklib в качестве pam модуля по умолчанию для проверки паролей. Модуль pam_pwquality также поддерживается в Ubuntu и CentOS, а также во многих других ОС. Этот модуль упрощает создание политик паролей, чтобы удостовериться, что пользователи принимают ваши стандарты сложности паролей.

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

Читайте также:  С windows system32 consent exe что это

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

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

Параметры политики паролей

Ниже вы увидите параметры политики паролей и краткое описание каждого из них. Многие из них схожи с параметрами в модуле cracklib . Такой подход упрощает портирование ваших политик из старой системы.

  • difok – Количество символов в вашем новом пароле, кототрые НЕ должны присутствовать в вашем старом пароле. (По умолчанию 5)
  • minlen – Минимальная длина пароля. (По умолчанию 9)
  • ucredit – Максимальное количество кредитов за использование символов верхнего регистра (если параметр > 0), или минимальное требуемое число символов верхнего регистра (если параметр 0), или минимальное требуемое число символов нижнего регистра (если параметр 0), или минимальное требуемое число цифр (если параметр 0), или минимальное требуемое количество иных символов (если параметр /etc/security/pwquality.conf , чтобы усилить требования к сложности пароля. Ниже приведен пример файла с комментариями для лучшего понимания.

Как вы могли заметить, некоторые параметры в нашем файле избыточны. Например, параметр minclass избыточен, поскольку мы уже задействуем как минимум два символа из класса, используя поля [u,l,d,o]credit . Наш список слов, которые нельзя использовать также избыточен, поскольку мы запретили повторение какого-либо класса 4 раза (все слова в нашем списке написаны символами нижнего регистра). Я включил эти параметры только, чтобы продемонстрировать, как использовать их для настройки политики паролей.
Как только вы создали свою политику, вы можете принудить пользователей сменить свои пароли при следующем их входе в систему.

Еще одна странная вещь, которую вы, возможно, заметили, заключается в том, что поля [u,l,d,o]credit содержат отрицательное число. Это потому что числа больше или равные 0 дадут кредит на использование символа в вашем пароле. Если поле содержит отрицательное число, это значит, что требуется определенное количество.

Что такое кредиты (credit)?

Я называю их кредитами, поскольку это максимально точно передает их назначение. Если значение параметра больше 0, вы прибавляете количество «кредитов на символы» равное «х» к длине пароля. Например, если все параметры (u,l,d,o)credit установить в 1, а требуемая длина пароля была 6, то вам понадобится 6 символов для удовлетворения требования длины, потому что каждый символ верхнего регистра, нижнего регистра, цифра или иной символ дадут вам один кредит.

Если вы установите dcredit в 2, вы теоретически сможете использовать пароль длиной в 9 символов и получить 2 кредита на символы для цифр и тогда длина пароля уже может быть 10.

Посмотрите на этот пример. Я установил длину пароля 13, установил dcredit в 2, а все остальное в 0.

Моя первая проверка провалилась, поскольку длина пароля была меньше 13 символов. В следующий раз я изменил букву “I” на цифру “1” и получил два кредита за цифры, что приравняло пароль к 13.

Пакет libpwquality обеспечивает функционал, описанный в статье. Также с ним поставляется программа pwscore , которая предназначена для проверки пароля на сложность. Мы использовали ее выше, для проверки кредитов.

Утилита pwscore читает из stdin. Просто запустите утилиту и напишите свой пароль, она выдаст ошибку или значение от 0 до 100.

Показатель качества пароля соотносится с параметром minlen в файле конфигурации. В целом показатель меньше 50 рассматривается как «нормальный пароль», а выше – как «сильный пароль». Любой пароль, который проходит проверки на качество (особенно принудительную проверку cracklib ) должен выдержать атаки словаря, а пароль с показателем выше 50 с настройкой minlen по умолчанию даже brute force атаки.

Настройка pwquality – это легко и просто по сравнению с неудобствами при использовании cracklib с прямым редактированием файлов pam . В этом руководстве мы рассмотрели все, что вам понадобится при настройке политик паролей в Red Hat 7, CentOS 7 и даже систем Ubuntu. Также мы поговорили о концепции кредитов, о которых редко пишут подробно, поэтому эта тема часто оставалась непонятной тем, кто с ней ранее не сталкивался.

Источник

Как обезопасить Linux-систему: 10 советов

На ежегодной конференции LinuxCon в 2015 году создатель ядра GNU/Linux Линус Торвальдс поделился своим мнением по поводу безопасности системы. Он подчеркнул необходимость смягчения эффекта от наличия тех или иных багов грамотной защитой, чтобы при нарушении работы одного компонента следующий слой перекрывал проблему.

В этом материале мы постараемся раскрыть эту тему с практической точки зрения:

/ фото Dave AllenCC

  • начнём с предварительной настройки и рекомендаций по выбору и установке дистрибутивов 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

Для обновления используйте любой из доступных RPM-менеджеров пакетов командами:

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:

  • Minimum_days: Минимальное количество дней до истечения действия пароля.
  • Maximum_days: Максимальное количество дней до истечения пароля.
  • Warn: Количество дней перед истечением, когда пользователь будет предупреждён о приближающемся дне смены.
  • Expire: Точная дата истечения действия логина.

Также стоит ограничить переиспользование старых паролей в модуле pam_unix.so и установить предельное количество неудачных попыток входа пользователя.

Чтобы узнать количество неудачных попыток входа:

Разблокировать аккаунт после неудачного входа:

Для блокирования и разблокирования аккаунтов можно использовать команду 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 от имени 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-спуфинга.

Максимум вреда для зашифрованных соединений HTTPS или SSH — прерывание соединения, а вот в незащищённый трафик злоумышленник может поместить новое содержимое, в том числе вредоносные программы. Для защиты от подобных атак подойдёт firewall.

Блокировать доступ с помощью Firewall

Firewall — это один из самых важных инструментов блокирования нежелательного входящего трафика. Мы рекомендуем пропускать только действительно нужный трафик и полностью запретить весь остальной.

Для фильтрации пакетов в большинстве дистрибутивов Linux есть контроллер iptables. Обычно им пользуются опытные пользователи, а для упрощённой настройки можно использовать утилиты UFW в Debian/Ubuntu или FirewallD в Fedora.

8. Отключить ненужные сервисы

Специалисты из Университета Виргинии рекомендуют отключить все сервисы, которые вы не используете. Некоторые фоновые процессы установлены на автозагрузку и работают до отключения системы. Для настройки этих программ нужно проверить скрипты инициализации. Запуск сервисов может осуществляться через inetd или xinetd.

Если ваша система настроена через inetd, то в файле /etc/inetd.conf вы сможете отредактировать список фоновых программ «демонов», для отключения загрузки сервиса достаточно поставить в начале строки знак «#», превратив её из исполняемой в комментарий.

Если система использует xinetd, то её конфигурация будет в директории /etc/xinetd.d. Каждый файл директории определяет сервис, который можно отключить, указав пункт disable = yes, как в этом примере:

Также стоит проверить постоянные процессы, которые не управляются inetd или xinetd. Настроить скрипты запуска можно в директориях /etc/init.d или /etc/inittab. После проделанных изменений запустите команду под root-аккаунтом.

9. Защитить сервер физически

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

Для входа в дата-центр все посетители должны проходить определенные этапы аутентификации. Также настоятельно рекомендуется использовать датчики движения во всех помещениях центра.

10. Защитить сервер от неавторизованного доступа

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

Например, инструменты Tripwire и Aide собирают базу данных о системных файлах и защищают их с помощью набора ключей. Psad используется для отслеживания подозрительной активности с помощью отчётов firewall.

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

Заключение

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

Источник

Читайте также:  Установка fedora для linux
Оцените статью