
Чтобы преодолеть ограничения и повысить механизмы безопасности, предусмотренные стандартом ugo / rwx
разрешения и списки контроля доступа, то Агентство национальной безопасности США (АНБ) разработало гибкий Обязательный контроль доступа (MAC) метод, известный как SELinux (Короче для Linux с повышенной безопасностью), чтобы, среди прочего, ограничить способность процессов получать доступ к системным объектам или выполнять другие операции над ними (например, файлы, каталоги, сетевые порты и т. д.) с наименьшими возможными разрешениями, но с учетом последующих модификаций этой модели.
Еще один популярный и широко используемый MAC - это AppArmor, которые в дополнение к функциям, предоставляемым SELinux, включает режим обучения, который позволяет системе «учить»Как работает конкретное приложение, и установить ограничения, настроив профили для безопасного использования приложения.
В CentOS 7, SELinux встроен в само ядро и включен в Обеспечение соблюдения
режим по умолчанию (подробнее об этом в следующем разделе), в отличие от openSUSE и Ubuntu которые используют AppArmor.В этой статье мы объясним основы SELinux и AppArmor и объясним, как использовать один из этих инструментов в ваших интересах в зависимости от выбранного вами дистрибутива.
Security Enhanced Linux может работать двумя разными способами:
SELinux также можно отключить. Хотя сам по себе это не режим работы, он все же возможен. Однако лучше научиться пользоваться этим инструментом, чем просто его игнорировать. Имейте это в виду!
Чтобы отобразить текущий режим SELinux, использовать getenforce
. Если вы хотите переключить режим работы, используйте setenforce 0
(чтобы установить его на Разрешительный) или setenforce 1
(Обеспечение соблюдения).
Поскольку это изменение не переживет перезагружать, вам нужно будет отредактировать /etc/selinux/config файл и установите SELINUX переменная либо принуждение
, снисходительный
, или отключен
чтобы добиться устойчивости при перезагрузках:
Кстати, если getenforce
возвращает Disabled, вам нужно будет отредактировать /etc/selinux/config с желаемым режимом работы и перезагрузите. В противном случае вы не сможете установить (или переключить) режим работы с помощью сила
.
Одно из типичных применений сила
состоит из переключения между режимами SELinux (от принуждение к снисходительный или наоборот) для устранения неполадок в приложении, которое работает некорректно или не работает должным образом. Если он работает после того, как вы установили SELinux на Разрешительный режиме, вы можете быть уверены, что столкнулись с проблемой разрешений SELinux.
Два классических случая, когда нам, скорее всего, придется иметь дело с SELinux:
Давайте рассмотрим эти два случая на следующих примерах.
Одно из первых действий, которое делают большинство системных администраторов для защиты своих серверов, - это изменение порта, на котором слушает демон SSH, в основном для того, чтобы отпугнуть сканеры портов и внешних злоумышленников. Для этого мы используем директиву Port в /etc/ssh/sshd_config за которым следует новый номер порта, как показано ниже (мы будем использовать порт 9999 в таком случае):
Порт 9999.
После попытки перезапуска службы и проверки ее статуса мы увидим, что она не запустилась:
# systemctl перезапуск sshd. # systemctl status sshd.
Если мы посмотрим на /var/log/audit/audit.log, мы увидим, что sshd был предотвращен запуск в порт 9999 по SELinux потому что это зарезервированный порт для Управление JBoss service (сообщения журнала SELinux включают слово «АВК» чтобы их можно было легко идентифицировать по другим сообщениям):
# cat /var/log/audit/audit.log | grep AVC | хвост -1.
На этом этапе большинство людей, вероятно, отключили бы SELinux но мы не будем. Мы увидим, что SELinux и sshd, прослушивающие другой порт, могут жить в гармонии вместе. Убедитесь, что у вас есть policycoreutils-python пакет установлен и запускается:
# yum install policycoreutils-python.
Чтобы просмотреть список портов, на которых SELinux разрешает прослушивание sshd. На следующем изображении мы также видим, что порт 9999 был зарезервирован для другой службы, поэтому в настоящее время мы не можем использовать его для запуска другой службы:
# semanage port -l | grep ssh.
Конечно, мы могли бы выбрать другой порт для SSH, но если мы уверены, что нам не нужно будет использовать этот конкретный машины для любых служб, связанных с JBoss, мы можем затем изменить существующее правило SELinux и назначить этот порт для SSH вместо:
# semanage порт -m -t ssh_port_t -p tcp 9999.
После этого мы можем использовать первый semanage команда, чтобы проверить, правильно ли назначен порт, или -lC
опции (сокращение от list custom):
# semanage порт -lC. # semanage port -l | grep ssh.
Теперь мы можем перезапустить SSH и подключиться к сервису через порт. 9999. Обратите внимание, что это изменение ПРОДОЛЖИТСЯ после перезагрузки.
Если вам нужно настроить виртуальный хост Apache используя каталог, отличный от /var/www/html в виде DocumentRoot (скажем, например, /websrv/sites/gabriel/public_html):
DocumentRoot «/ websrv / sites / gabriel / public_html»
Apache откажется обслуживать контент, потому что index.html был отмечен default_t SELinux тип, к которому Apache не может получить доступ:
# wget http://localhost/index.html. # ls -lZ /websrv/sites/gabriel/public_html/index.html.
Как и в предыдущем примере, вы можете использовать следующую команду, чтобы убедиться, что это действительно проблема, связанная с SELinux:
# cat /var/log/audit/audit.log | grep AVC | хвост -1.
Чтобы изменить метку /websrv/sites/gabriel/public_html рекурсивно к httpd_sys_content_t
, делать:
# semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html(/.*)?"
Приведенная выше команда предоставит Apache доступ только для чтения к этому каталогу и его содержимому.
Наконец, чтобы применить политику (и немедленно применить изменение метки), выполните:
# restorecon -R -v / websrv / sites / gabriel / public_html.
Теперь у вас должен быть доступ к каталогу:
# wget http://localhost/index.html.
Дополнительные сведения о SELinux см. В Fedora 22 SELinux и руководство администратора.