Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Авторизация

Статьи об операционной системе Linux

Сайдбар

Настройка selinux для Linux

10 апр. 2014

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

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

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

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

Меры предосторожности. Идеальных программ, совсем не содержащих ошибок, нет и в ближайшем будущем не будет (здесь я не говорю о простейших и самых миниатюрных программах). По этой причине с течением времени были разработаны всевозможные методы, позволяющие свести к минимуму риски, связанные с программными ошибками. К наиболее проверенным мерам предосторожности относится отказ от использования демонов с правами администратора. Следует также устанавливать как можно меньше программ или сценариев с битом setuid, не позволяющих выполнять код в стеке (для этих целей в Red Hat было разработано расширение ядра Exec Shield), и т. д.

Основы SELinux



Программой следующего поколения является расширение ядра SELinux, которое первоначально было разработано Агентством национальной безопасности США как свободная программа. Работа этого расширения заключается в том, что SELinux, основываясь на заданных правилах, наблюдает за выполнением программ. Этот метод называется обязательным контролем доступа — Mandatory Access Control (кратко — MAC).

Если правило нарушается, то SELinux запрещает выполнять операцию или регистрирует предупреждение. При этом расширение SELinux не завершает работу программы, нарушающей правила. От программы зависит, как она отреагирует на ситуацию, в которой не сможет обратиться к определенному файлу или воспользоваться сетевым интерфейсом.

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

Агентство национальной безопасности США — это информационная служба, которая обеспечивает в том числе надзор за обменом электронной информацией и ее шифрование. Итак, хотя SELinux в определенной степени и происходит из сфер «тайной полиции», в дополнении Linux такими функциями нет ничего предосудительного — код SELinux открытый, контролируется многочисленными независимыми экспертами и официально входит в состав ядра версии 2.6 и выше.

Правила SELinux



Без необходимых правил расширение SELinux бесполезно. Таким образом, от качества правил напрямую зависит, насколько надежнее станет система, оборудованная SELinux. Из распространенных дистрибутивов пока только Red Hat вложил достаточно времени и усилий в разработку таких правил. Все испытания проводятся в системе Fedora, которая в данном случае играет роль экспериментального полигона. Те правила, которые будут признаны практичными в Fedora, входят в состав новых версий Red Hat Enterprise (RHEL).

В этом статье расширение SELinux описано на базе Fedora 11. Насколько широко SELinux закрепится за пределами Red Hat и Fedora, предположить сложно. В Novell и SUSE, а также в Ubuntu используется альтернативное решение AppArmor — о нем речь пойдет в следующем разделе. Правда, не так давно SUSE свернула программу разработки AppArmor и интегрировала SELinux в дистрибутив настолько глубоко, что работать с этим расширением в принципе возможно и без перекомпиляции ядра. Остается лишь гадать, является ли этот шаг началом конца AppArmor.

Критика SELinux



Расширение SELinux небезупречно. Два основных момента, из-за которых оно подвергается критике, таковы.

Файлы нужно помечать расширенными атрибутами, чтобы обеспечить их правильное взаимодействие с SELinux. Для этого требуются файловые системы, поддерживающие расширенные атрибуты (NFS к их числу не относится!). Кроме того, возникают проблемы с обновлениями и резервным копированием.

Основная проблема SELinux — исключительная сложность. Для одного только обеспечения безопасности основных сетевых служб требуются тысячи правил. Лишь немногие эксперты способны судить об эффективности этих правил. По существующим наборам правил не хватает документации. По этим причинам среднестатистический пользователь Linux обычно оказывается не в состоянии приспособить SELinux к своим нуждам.

Расширение SELinux по праву снискало среди большинства своих пользователей славу «черного ящика». Из-за сложности программы ее установка обычно не обходится без ошибок. В результате при возникновении первых же нестыковок возникает соблазн просто выключить компьютер, а потом начать все заново.


Альтернативы


Наиболее популярной альтернативой SELinux является система, применяемая в SUSE и Ubuntu — AppArmor. Кроме того, в версии ядра 2.6.25 появилась еще одна система MAC под названием Smack (http://lwn.net/Articles/ 252562/). Но пока еще рано судить, сможет ли Smack реально конкурировать с SELinux и AppArmor.

Внутренняя организация и принцип работы SELinux



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

Контекст защиты



Принцип работы SELinux основан на том, что любой объект (например, файл) и любой субъект (например, процесс) связаны с контекстом защиты. С файлами контекст защиты сохраняется в виде расширенных атрибутов. В таком случае информация о защите непосредственно связана с файлом и не зависит от имени файла. Контекст защиты определенного файла проще всего узнать с помощью команды ls.

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

user$ chcon user_u:object_r:user_home_t тестовый_файл

При работе с процессами вместо слова «контекст» часто применяется термин «домен». Чтобы определить контекст (домен) того или иного процесса, используйте команду ps axZ. Как правило, процесс принимает контекст той учетной записи, с которой он был запущен. Но контекст также можно автоматически изменить сразу после запуска с помощью правила SELinux. Это бывает необходимо в тех случаях, когда определенная программа (например, Firefox) должна получать заданный контекст независимо от того, какая учетная запись ее запустила.

user$ ps axZ | grep httpd

user_u:system_r:httpd_t:sO 3758? Ss 0:00 /usr/sbin/httpd user_u:system_r:httpd_t=sO 3760? S 0:00 /usr/sbin/httpd

Контекст защиты состоит из трех или четырех частей, разделяемых двоеточиями:

пользователь: роль: тип: т1з-компонент

Самая важная часть — третья, в которой указывается тип файла или процесса. Большинство правил SELinux интерпретируют эту информацию. Подробное описание всех четырех частей контекста защиты находится здесь: fedoraproject.org/ wiki/SELinux/SecurityContext.

Правила



В обобщенном виде контекст правил SELinux выглядит так: allow Tnnl_t Tnn2_t: класс { операции }:

Приведу пример: следующее правило разрешает процессам, имеющим тип контекста httpd_t, создавать новые файлы в каталогах, имеющих тип контекста httpd_log_t.

allow httpd_t httpd_log_t:dir create;

Как правило, в отдельно взятой конфигурации SELinux таких правил десятки тысяч! Чтобы система работала быстрее, SELinux обычно ожидает правил не в виде текста, а в двоичной форме. Проводя аналогию с программированием, правила можно сравнить с результатом компилирования.Общее описание этапов, которые необходимо выполнить, чтобы добавить к существующей конфигурации SELinux собственный модуль правил, дается в часто задаваемых вопросах по SELinux: http:// fedora.redhat.com/docs/selinux-faq-fc5/.

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

Strict — в Fedora 2 набор правил strict был активен и содержал правила для выполнения всех процессов, но создавал, таким образом, больше проблем, чем решал.

Targeted — в Fedora 3 и выше по умолчанию стал использоваться набор правил targeted. Его правила защищают только специально выбранные сетевые службы.

К сожалению, очень плохо документирован механизм, в соответствии с которым осуществляется защита, а также не описано, какую контекстную информацию должны иметь данные и какие управляющие параметры существуют (булевые, см. ниже). Для некоторых важнейших служб в справке man есть отдельные страницы: ftpd_selinux, httpd_selinux, named_selinux, nfs_selinux, samba_selinux и т. д. Полный список выдает следующая команда:

user$ rpm -qd selinux-policy | grep man8

MLS — в качестве альтернативы можно использовать разработанный для сервера набор правил MLS (многоуровневая безопасность) (пакет selinux-policy-mls). Этот набор был разработан для того, чтобы RHEL мог получить сертификат класса EAL 4. Такой сертификат в США требуется при выпуске определенных (часто — военных) приложений, хотя фактическое улучшение безопасности при этом не так и велико.
При разработке наборов правил SELinux используется механизм reference policy, созданный компанией Tresys (http://oss.tresys.com/projects/refpolicy). Он очень удобно применяется в среде разработки. Все действующие наборы правил SELinux были созданы с помощью этого механизма.

Параметры SELinux (булевые)


Итак, вы уже понимаете, что вносить изменения в наборы правил достаточно сложно. Чтобы у нас было определенное поле для маневра, не требующее изменения

правил, в наборе targeted предусмотрены булевые параметры, которые можно изменять «на ходу». В Fedora/Red Hat для этого обычно используется графический пользовательский интерфейс systemconfig-selinux (рис. 18.6). В качестве альтернативы можно попробовать команду getsebool, узнающую значения булевых параме-TpoB;setsebool предназначена для изменения таких параметров.


Запуск и конфигурация


SELinux входит в состав ядра, поэтому специально запускать программу (например, через систему Init-V) не требуется. Необходимость в демоне SELinux или других фоновых процессах также отпадает.

Конфигурация производится в файлах, расположенных в каталоге /etc/selinux. Определяющее значение имеет файл /etc/selinux/config. В нем указывается, в каком режиме работает SELinux (enforcing, permissive или disabled) и какой набор правил действует (strict или targeted). Изменения, внесенные в этот файл, вступают в силу только после перезапуска.

# /etc/selinux/config

SELINUX=enforcing SELINUXTYPE=targeted

Статус



Команда setstatus определяет текущий статус SELinux. На моем испытательном компьютере, где SELinux работает в режиме targeted, получены следующие результаты:

enabled

root# sestatus

SELinux status

SELinuxfs mount: Current mode: Mode from config file: Policy version:

Policy from config file: targeted

Устранение проблем, связанных с SELinux



В принципе, существуют следующие возможности реагирования на нарушение правил SELinux:

в наборе правил находится параметр, который может быть причиной проблемы,

а затем его настройки корректируются с помощью system-config-security;изменяется контекстная информация файла, вызывающего проблемы;

набор правил изменяется или дополняется; для этого требуются глубокие знания SELinux, и информации, сообщаемой в этом разделе, недостаточно;

SELinux просто отключается.

Проблемы, вызываемые SELinux, не всегда очевидны. Например, если скопировать дерево каталогов, содержащее HTML-файлы, из каталога NFS в каталог /var/www/html командой cp -a, то Apache больше не сможет прочитать эти файлы. Причина заключается в том, что при использовании параметра cp -a вместе с файлами копируются и расширенные атрибуты, и контекстная информация SELinux. Из-за этого файлы, скопированные в /var/www/html, не могут автоматически получить нужную контекстную информацию в соответствии с правилом SELinux. Контекстная информация HTML-файлов в таком случае имеет вид system_u:object_r:nfs_t, в то время как правильный вариант — user_u:object_r: httpd_sys_content_t. Для того чтобы избежать подобных проблем, измените cp -a Hacp -r.

Сам Apache «ничего не знает» о существовании SELinux. Программа просто обнаруживает, что не может прочитать некоторые файлы, и выдает непонятное сообщение об ошибке You don't have permission to access (У вас нет прав на доступ к <имя файла>). Только взглянув в /var/log/messages, вы поймете, что проблемы с доступом возникли из-за SELinux.

Если в момент нарушения правил вы работаете в KDE или Gnome, то на панели отображается предупреждающий значок программы seapplet. Щелчком кнопкой мыши можно запустить программу setroubleshoot, которая исключительно точно и понятно описывает проблему и даже предлагает правильное решение. Теперь контекстную информацию пострадавших файлов нужно правильно настроить с помощью команды restorecon:

root# restorecon -R -v /var/www/html/*

Отключение SELinux



Если требуется активизировать SELinux лишь ненадолго, то запустите system-config-security и включите режим Permissive. Расширение SELinux продолжит работу и будет регистрировать нарушения правил в /var/log/messages. Но в таком режиме SELinux допускает ошибки и не блокирует программы, которые их совершают. Аналогичное действие оказывает команда setenforce 0.

Разумеется, SELinux в system-config-security можно полностью отключить (настройка Disabled). Но это стоит делать лишь в тех случаях, когда вы больше не планируете работать с этим расширением. Причина заключается в том, что, как только вы отключаете SELinux, все его правила больше не могут присваивать контекстную информацию новым файлам. Если позже снова включить SELinux, то файлы, в которых нет контекстной информации, будут вызывать проблемы. При последующей корректировке контекстных данных вам поможет команда restorecon, но подобный процесс утомителен и чреват ошибками.

Если SELinux будет вызывать проблемы уже при старте и мешать запускать компьютер, то в ядре нужно установить параметр selinux=0, не позволяющий системе SELinux запускаться. Активизация происходит только после перезапуска системы. Еще можно применить параметр enforcing=0, тогда SELinux запускается, а нарушения правил не регистрируются.
Читайте так же:
AppArmor






Подпишитесь на рассылку! Никакого спама, только обновления!!!

Комментарии (0)


    Услуги по MODX Revolution

    Посмотреть все услуги

    Техническая оптимизация сайта

    Подробнее & Заказать

    Создание сайта на MODX Revolution

    Подробнее & Заказать

    Перенос сайта на MODX Revolution

    Подробнее & Заказать

    Продвижение сайта на MODX

    Подробнее & Заказать