№ 13: Используйте различные дисковые разделы
Размещение отдельно от пользовательских файлов может, как результат, улучшить работу системы и повысить ее безопасность. Удостоверьтесь в том, что следующие файловые системы смонтированы на отдельных разделах диска:
- /usr
- /home
- /var and /var/tmp
- /tmp
Создайте отдельные разделы для корневых директорий серверов Apache и FTP. Отредактируйте файл /etc/fstab и не забудьте добавить следующее конфигурационные параметры:
- noexec – не разрешается исполнять бинарные файлы (предотвращается исполнение бинарных файлов, но разрешается исполнять скрипты).
- nodev — не разрешается указывать посимвольные и специальные устройства (предотвращается использование файлов устройств, таких как zero, sda и т.д).
- nosuid – не разрешается иметь доступ для SUID/SGID (предотвращается изменение битов идентификатора пользователя и идентификатора группы).
Пример монтирования раздела /dev/sda5 (корневой директорий сервера ftp), для которого ограничен пользовательский доступ:
/dev/sda5 /ftpdata ext3 defaults,nosuid,nodev,noexec 1 2
№ 13.1: Квоты дискового пространства
Убедитесь в том, что задание дисковых квот допустимо для всех пользователей. Для того чтобы можно было задавать квоты дискового пространства, выполните следующие шаги:
- Разрешите определять квоты для каждой файловой системы – для этого измените файл /etc/fstab.
- Перемонтируйте файловую систему (системы).
- Создайте файлы базы данных квот и сгенерируйте таблицу использования диска.
- Назначьте политики квот.
- Подробности смотрите в руководстве «Задание квот дискового пространства» ().
SELinux
SELinux (англ. Security-Enhanced Linux — Linux с улучшенной безопасностью) — реализация системы принудительного контроля доступа, которая может работать параллельно с классической избирательной системой контроля доступа. Входит в стандартное ядро Linux. Также для функционирования SELinux требуются модифицированные версии некоторых утилит (ps, ls, и тд), которые обеспечивают поддержку новых функций ядра, и поддержка со стороны файловой системы.
Оставаясь в рамках избирательной системы контроля доступа, операционная система имеет фундаментальное ограничение в плане разделения доступа процессов к ресурсам — доступ к ресурсам основывается на правах доступа пользователя. Это классические права rwx на трех уровнях — владелец, группа-владелец и остальные.
В SELinux права доступа определяются самой системой при помощи специально определенных политик. Политики работают на уровне системных вызовов и применяются самим ядром (но можно реализовать и на уровне приложения). SELinux действует после классической модели безопасности Linux. Иными словами, через SELinux нельзя разрешить то, что запрещено через права доступа пользователей или групп. Политики описываются при помощи специального гибкого языка описания правил доступа. В большинстве случаев правила SELinux «прозрачны» для приложений, и не требуется никакой их модификации. В состав некоторых дистрибутивов входят готовые политики, в которых права могут определяться на основе совпадения типов процесса (субъекта) и файла (объекта) — это основной механизм SELinux. Две других формы контроля доступа — доступ на основе ролей и на основе многоуровневой системы безопасности. Например, «ДСП», «секретно», «совершенно секретно», «ОВ».
Самый простой для работы и поддержки с точки зрения поддержки тип политики — так называемая «целевая» политика, разработанная в рамках проекта Fedora. В рамках политики описано более 200 процессов, которые могут выполняться в операционной системе. Все, что не описано «целевой» политикой, выполняется в домене (с типом)
& unconfined_t.
Процессы, работающие в этом домене, не защищаются SELinux. Таким образом, все сторонние пользовательские приложения будут без всяких проблем работать в системе с «целевой» политикой в рамках классических разрешений избирательной системы контроля доступа.
Кроме «целевой» политики, в состав некоторых дистрибутивов входит политика с многоуровневой моделью безопасности (с поддержкой модели Белла — Лападулы).
Третий вариант политики — «строгий». Тут действует принцип «что не разрешено, то запрещено» (принцип наименьших прав). Политика основывается на Reference Policy от компании Tresys.
SELinux был разработан Агентством национальной безопасности США, и затем его исходные коды были представлены для скачивания.
SELinux включён в состав ядра (начиная с версии 2.6).
Субъекты и объекты
Когда говорят о SELinux всегда упоминаются субъекты и объекты. То есть
SELinux это разрешения и запреты которые применяются в действиях между
субъектами и объектами.
Субъекты — строго говоря это пользователи, которые выполняют какие-либо
операции на компьютере. Однако пользователи всегда действуют через те или
иные прикладные программы. То есть человек-пользователь не может сам залезть
внутрь компьютера и «своими руками» выполнить например запись в файл. Если
ему нужно выполнить запись в файл, он запускает какую-либо программу.
Поэтому, под субъектами чаще всего подразумеваются именно программы
(процессы). Иначе говоря субъекты это те кто выполняет некие действия.
Объекты это то, над чем действия выполняются. Чаще всего под объектами
подразумеваются файлы данных. Но это могут быть и устройства и даже
программы. Пример:cat /var/log/syslog | grep SELinux
в этой команде программа grep объект для программы cat. И
соответственно программа cat субъект по отношению к
программе grep.
Основы SELinux
SELinux представляет собой систему маркировки, каждый процесс имеет метку. Каждый файл, каталог или даже пользователь в системе имеет метку. Даже портам и устройствам и именам хостов в системе присвоены метки. SELinux определяет правила доступа процесса к объектам с определенными метками. Это и называется политикой. За соблюдением правил следит ядро. Иногда это еще называется обязательный контроль доступа (Mandatory Access Control, MAC)
Владелец файла не имеет полной свободы действий над атрибутами безопасности. Стандартные атрибуты контроля доступа, такие как группа и владелец ничего не значат для SELinux. Полностью все управляется метками. Значения атрибутов могут быть установлены и без прав root, но на это нужно иметь специальные полномочия SELinux.
Теперь поговорим немного о политиках. Мы определяем метку для процессов определенного типа, а также на объекты файловой системы тоже определенного типа. Вот представьте, себе систему, в которой объекты (процессы) это кошки и собаки. Это типы процессов. И у нас есть объекты, к которым они хотят иметь доступ — еда. Но еда у них разная еда_котов и еда_собак. Нужно чтобы объекты имели доступ только к своей еде.
У собаки есть разрешение есть свою пищу, а у кошки — свою. В политиках SELinux это будет выглядеть вот так:
разрешить собаке корм_собак есть
Теперь ядро будет следить, чтобы соблюдались эти правила. В системе SELinux все по умолчанию запрещено, таким образом, если собака попытается съесть кошачий корм, ядро не позволит это сделать.
Допустим, процесс Apache имеет метку httpd_t, а файлы, к которым у Apache должен быть доступ мы назвали httpd_sys_content. Также у нас есть данные кредитных карт, которые хранятся в базе данных mysql. Если хакер взломает процесс Apache и у него будет root доступ, то он все равно не сможет получить доступ к файлам от mysql.
В системе довольно часто встречаются процессы с одинаковыми типами. Чтобы это обойти, и настроить полномочия для разных процессов одного типа была придумана система категорий безопасности Multi Category Security (MCS). Мы можем добавить к объекту категорию, и настраивать полномочия уже в зависимости от этой категории.
SELinux может вызвать у системных администраторов большое количество проблем, многие ее просто отключают, таким образом, решив проблему и уменьшив безопасность. Как уже говорилось выше, по умолчанию SELinux блокирует все и вся. Это подходит под описание строгой политики. Но чтобы облегчить системным администраторам работу, были разработаны другие стандартные политики. Во многих дистрибутивах используется целевая политика (targeted), она охватывает около 200 сетевых служб и процессов, все же остальные программы запускаются и работают свободно, к ним никакие модели SELinux не применяются.
SELinux может работать в трех режимах — отключен, система полностью отключена и не работает, режим ограничений Enforcing — программа активирована и блокирует все не соответствующие политикам действия и третий режим Permissive — только фиксировать нарушения.
Теория в общих чертах рассмотрена. А теперь перейдем к практической части.
Отключаем SELinux в CentOS
Разработчики рекомендуют всегда сохранять SELinux в рабочем режиме «enforcing» — принудительное исполнение правил. Если же администратору потребуется изменить этот режим на «disabled», сделать это можно в рамках одной сессии или перманентно, внеся правки в конфигурационный файл. Для начала проверьте текущее состояние утилиты, чтобы определить, стоит ее отключать или нет. Для этого произведите всего одну команду:
- Запустите «Терминал» любым удобным методом, например, через меню «Приложения».
Активируйте постоянные права суперпользователя, прописав . После этого потребуется ввести пароль от рут-доступа. Написанные таким образом символы никогда не отображаются в целях безопасности.
Активируйте команду , вставив ее и нажав на клавишу Enter.
Найдите строку «SELinux status», отображающую текущее состояние. Если оно не «disabled», значит инструмент находится в активном рабочем состоянии.
Таким образом, с помощью встроенной команды можно быстро проверить статус встроенной системы безопасности. Далее советуем ознакомиться с двумя методами отключения SELinux, которые будут максимально полезны в разных ситуациях.
Способ 1: Отключение в текущей сессии
Обычно SELinux отключается в целях проверки каких-либо параметров ОС или исправления ошибок. Достаточно того, чтобы утилита была отключена на протяжении одной терминальной сессии. Для этого не нужно изменять конфигурационный файл, воспользуйтесь командой , где как раз и является значением выключения.
Можете убедиться в том, что защита была успешно отключена. После запуска нового системного терминала она продолжит свою работу в штатном режиме, то есть в том, который задан в файле настройки. Не забывайте, что после каждого перезапуска ОС указанную выше команду придется прописывать заново, чтобы повторно деактивировать SELinux.
Способ 2: Перманентное отключение
Перманентное отключение SELinux будет действовать даже после перезагрузки ОС, поскольку параметр задается через файл конфигурации. Как вы могли уже понять, изменять его придется вручную. Для этого советуем воспользоваться любым удобным текстовым редактором.
- Сегодня за пример мы возьмем редактор nano. Устанавливается пакеты этого приложения командой .
Для продолжения инсталляции понадобится ввести пароль от учетной записи суперпользователя.
После успешной установки запустите файл настроек через этот редактор, введя .
Среди всех строк отыщите «SELINUX=».
После знака «=» замените указанное там выражение на .
Сохраните настройки нажатием комбинации клавиш Ctrl + O.
Не изменяйте имя файла для записи, просто нажмите на Enter.
Для выхода из редактора используйте Ctrl + X.
Все настройки будут сохранены и активируются только после перезагрузки ОС, поэтому в консоль вставьте строку .
После выполнения подобных действий система безопасности будет активна только после изменения ее значения обратно на «enabled», «enforcing» или «permissive». В противном случае она так и будет оставаться выключенной всегда, при любых действиях со стороны пользователя или процессов. Разве что можно на текущую сессию активировать SELinux через команду .
Каждый пользователь сам выбирает наиболее оптимальный метод отключения рассмотренного сегодня инструмента, поскольку они различаются по принципу действия. В целом в обоих вариантах процедура осуществляется достаточно просто и не вызовет сложностей даже у неопытных юзеров.
Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.
Описание
Оставаясь в рамках избирательной системы контроля доступа, операционная система имеет фундаментальное ограничение в плане разделения доступа процессов к ресурсам — доступ к ресурсам основывается на правах доступа пользователя.
Это классические права rwx на трех уровнях — владелец, группа-владелец и остальные.
В SELinux права доступа определяются самой системой при помощи специально определенных политик.
Политики работают на уровне системных вызовов и применяются самим ядром (но можно реализовать и на уровне приложения).
SELinux действует после классической модели безопасности Linux. Иными словами, через SELinux нельзя разрешить то, что запрещено через права доступа пользователей или групп. Политики описываются при помощи специального гибкого языка описания правил доступа.
В большинстве случаев правила SELinux «прозрачны» для приложений, и не требуется никакой их модификации. В состав некоторых дистрибутивов входят готовые политики, в которых права могут определяться на основе совпадения типов процесса (субъекта) и файла (объекта) — это основной механизм SELinux.
Две других формы контроля доступа — доступ на основе ролей и на основе многоуровневой системы безопасности. Например, «ДСП», «секретно», «совершенно секретно», «ОВ».
Самый простой для работы и с точки зрения поддержки тип политики — так называемая «целевая» политика, разработанная в рамках проекта Fedora.
В рамках политики описано более 200 процессов, которые могут выполняться в операционной системе. Все, что не описано «целевой» политикой, выполняется в домене (с типом) unconfined_t. Процессы, работающие в этом домене, не защищаются SELinux.
Таким образом, все сторонние пользовательские приложения будут без всяких проблем работать в системе с «целевой» политикой в рамках классических разрешений избирательной системы контроля доступа.
Кроме «целевой» политики, в состав некоторых дистрибутивов входит политика с многоуровневой моделью безопасности (с поддержкой модели Белла — Лападулы).
Третий вариант политики — «строгий». Тут действует принцип «что не разрешено, то запрещено» (принцип наименьших прав). Политика основывается на Reference Policy от компании Tresys.
SELinux был разработан Агентством национальной безопасности США, и затем его исходные коды были представлены для скачивания.
Оригинальный текст
From NSA Security-enhanced Linux Team:
«NSA Security-enhanced Linux is a set of patches to the Linux kernel and some utilities to incorporate a strong, flexible mandatory access control (MAC) architecture into the major subsystems of the kernel.
It provides a mechanism to enforce the separation of information based on confidentiality and integrity requirements, which allows threats of tampering and bypassing of application security mechanisms to be addressed and enables the confinement of damage that can be caused by malicious or flawed applications.
It includes a set of sample security policy configuration files designed to meet common, general-purpose security goals.»
SELinux включён в состав ядра Linux (начиная с версии 2.6).
Также для функционирования SELinux требуются модифицированные версии некоторых утилит (ps, ls и других), которые обеспечивают поддержку новых функций ядра, и поддержка со стороны файловой системы.
Особенности [ править ]
Возможности SELinux включают:
- Четкое разделение политики и принуждения
- Четко определенные интерфейсы политик
- Поддержка приложений, запрашивающих политику и обеспечивающих контроль доступа (например, crond запускает задания в правильном контексте)
- Независимость от конкретных политик и языков политик
- Независимость от конкретных форматов и содержимого защитных этикеток
- Индивидуальные метки и элементы управления для объектов и служб ядра
- Поддержка изменений политики
- Раздельные меры защиты целостности системы (доменного типа) и конфиденциальности данных ( многоуровневая безопасность )
- Гибкая политика
- Контроль инициализации и наследования процессов, а также выполнения программы.
- Управление файловыми системами, каталогами, файлами и дескрипторами открытых файлов.
- Управление сокетами, сообщениями и сетевыми интерфейсами
- Контроль за использованием «возможностей»
- Кэшированная информация о решениях доступа через Access Vector Cache (AVC)
- Политика отказа по умолчанию (все, что явно не указано в политике, запрещено)
Реализации
SELinux реализован в Android с версии 4.3.
Среди бесплатных дистрибутивов Linux, поддерживаемых сообществом, Fedora была одним из первых пользователей, включая поддержку по умолчанию, начиная с Fedora Core 2. Другие дистрибутивы включают поддержку, например Debian в версии 9 Stretch и Ubuntu в версии 8.04 Hardy Heron. Начиная с версии 11.1 openSUSE содержит «базовые возможности» SELinux. SUSE Linux Enterprise 11 включает SELinux как «предварительную версию технологии».
SELinux популярен в системах, основанных на контейнерах Linux , таких как CoreOS Container Linux и rkt. Это полезно в качестве дополнительного элемента управления безопасностью, помогающего дополнительно усилить изоляцию между развернутыми контейнерами и их хостом.
SELinux доступен с 2005 года как часть Red Hat Enterprise Linux (RHEL) версии 4 и всех будущих выпусков. Это присутствие также отражено в соответствующих версиях CentOS и Scientific Linux . Поддерживаемая политика в RHEL4 — это целевая политика, которая нацелена на максимальное удобство использования и, следовательно, не является столь жесткой, как могло бы быть. Планируется, что в будущих версиях RHEL будет больше целей в целевой политике, что будет означать более строгие политики.
Контрольная группа (cgroups)
— группа процессов в Linux, для которой механизмами ядра наложена изоляция и установлены ограничения на некоторые вычислительные ресурсы (процессорные, сетевые, ресурсы памяти, ресурсы ввода-вывода). Механизм позволяет образовывать иерархические группы процессов с заданными ресурсными свойствами и обеспечивает программное управление ими.
Разработка была начата инженерами Google Полом Менэджем (Paul Menage) и Рохитом Сетом (Rohit Seth) в 2006 году и первоначально называлась «контейнеры процессов» (англ. process containers). В 2007 году проект был переименован в сgroups (от англ. control groups) по причине неоднозначности значения термина «контейнер» в ядре Linux.
Начиная с версии 2.6.24 ядра Linux технология включена в официальные версии ядра. С этого момента разработка значительно активизировалась, в механизм добавлено много дополнительных возможностей, механизм существенным образом используется в технологии инициализации systemd, а также является ключевым элементом в реализации системы виртуализации на уровне операционной системы LXC.
Одна из целей механизма — предоставить единый программный интерфейс к целому спектру средств управления процессами, начиная с контроля единичного процесса (таких как, например, утилита nice) вплоть до полной виртуализации на уровне системы (как у OpenVZ, Linux-VServer, LXC). Механизм предоставляет следующие возможности:
- ограничение ресурсов (англ. resource limiting): использование памяти, в том числе виртуальной;
- приоритизацию: разным группам можно выделить разное количество процессорного ресурса и пропускной способности подсистемы ввода-вывода;
- учёт: подсчёт затрат тех либо иных ресурсов группой;
- изоляцию: разделение пространств имён для групп таким образом, что одной группе недоступны процессы, сетевые соединения и файлы другой;
- управление: приостановку (freezing) групп, создание контрольных точек (checkpointing) и их перезагрузку.
Install Supporting SELinux Packages
In this section, you will install various SELinux packages that will help you when creating, managing, and analyzing SELinux policies.
-
Verify which SELinux packages are installed on your system:
A newly deployed CentOS 7 Linode should have the following packages installed:
-
Install the following packages and their associated dependencies:
- and contain several management tools to administer your SELinux environment and policies.
- provides command line tools for working with SELinux policies. Some of these tools include, which you can use to view differences between policies, a tool to view information about the components that make up SELinux policies, and used to search through your SELinux policies. consists of , , and . You can issue the option after any of the listed tools in order to view more information about each one.
- suite of tools help you determine why a script or file may be blocked by SELinux.
Change SELinux Mode
There are also many ways that we can change the mode of SELinux, with both runtime only options or permanent settings that persist on reboot.
SELinux Runtime Configuration
One of the fastest ways to switch between enforcing and permissive modes is with the ‘setenforce’ command. We can use ‘setenforce 0’ to swap to permissive mode, or ‘setenforce 1’ to swap to enforcing mode.
~]# getenforce Enforcing ~]# setenforce 0 ~]# getenforce Permissive ~]# setenforce 1 ~]# getenforce Enforcing
Note that this only changes the runtime setting, if you perform a system reboot the option stored in the /etc/selinux/config file will be used at next boot. We cannot disable selinux at runtime, as swapping to or from the disabled mode requires a system reboot.
SELinux Persistent Configuration
We can edit the /etc/selinux/config text file with our persistent setting, either enforcing, permissive, or disabled. By default this file appears as shown below.
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
We can simply edit the SELINUX variable between enforcing, permissive, or disabled, as outlined in the comments of the file. After editing the file the changes will not be in place immediately and will only change after system reboot.
Steps for Disabling SELinux on CentOS
Step 1: Check SELinux Status
The SELinux service is enabled by default on CentOS and most other RHEL-based systems. However, this might not be the case for your system.
Start by checking the status of SELinux on your system with the command:
The example output below indicates that SELinux is enabled. The status shows the service is in the enforcing mode.
SELinux may prevent the normal functioning of applications. The service denies access if:
- A file is mislabeled.
- An incompatible application attempts to access a forbidden file.
- A service is running under the incorrect security policy.
- An intrusion is detected.
If you notice that services are not running correctly, check SELinux log files. The logs are in /var/log/audit/audit.log. Most common log messages are labeled with “AVC.” If you can’t find any logs, try looking in /var/log/messages. The system writes logs in that file if the auditd daemon is not running.
Option 1: Disable SELinux Temporarily
To disable SELinux temporarily, type in the following command in the terminal:
In sudo setenforce 0, you can use permissive instead of 0.
This command changes SELinux mode from targeted to permissive.
In permissive mode, the service is active and audits all actions. However, it does not enforce any security policies. The system logs AVC messages.
The change is only active until the next reboot. To turn off SELinux permanently, refer to the next section of the article.
Option 2: Disable SELinux Permanently
To disable the service permanently, use a text editor (e.g., vim or nano) and edit the /etc/sysconfig/selinux file as instructed below.
1. Open the /etc/sysconfig/selinux file. We will be using vim. If you are unfamiliar with text editors, refer to our instructional guide on how to save and exit a file vim.
Enter the following command to open the file:
2. Change the SELINUX=enforcing directive to SELINUX=disabled.
Reboot CentOS to Save Changes
For the change to take effect, you need to reboot the system with the command:
After you reboot, check the service status to confirm SELinux is disabled. Use the command:
The status should be disabled, as seen in the image above. The system will not load any SELinux policies or write any AVC logs.
Conclusion
By following this article, you should be able to check SELinux status and disable the service on CentOS 7. Be cautious when permanently disabling SELinux. In general, the advised option is to switch to permissive mode.
To read more about SELinux, please refer to the official CentOS Wiki.