SELinux является одной из самых мощных функций безопасности в вашей системе Fedora. Это как ключ камердинера для ваших компьютерных услуг, только что позволяет им получить доступ к утвержденным данным. SELinux обрастает своей ранней репутацией из-за трудностей. Теперь он имеет настраиваемую политику для наиболее популярных приложений, а также обеспечивает дополнительную безопасность и уверенность. Однако, иногда ошибки случаются, и эта статья поможет вам справиться с ними.
Предпосылки
Эта статья предполагает две вещи:
- Вы знаете основы SELinux. Если вы не узнаете основы SELinux, сейчас прекрасное время, чтобы сделать это.
- Вы используете SELinux в режиме enforcing. Режим enforcing является нормальным и ожидаемым способом запуска Fedora. Если вы отключили SELinux, вам необходимо включить его. Отредактируйте файл /etc/sysconfig/selinux для установки SELINUX=permissive. Используя режим permissive гарантирует, что любые радикальные проблемы все еще могут быть исправлены автоматически с помощью следующих команд. Затем выполните следующие действия:
sudo fixfiles -F onboot reboot
Процесс загрузки может занять больше времени, чем обычно, так как SELinux перемаркирует все файлы, созданные в то время, когда он был отключен. Это может занять некоторое время для очень больших файловых систем, так что будьте терпеливы.
Не удивляйтесь, если вы начинаете видеть ошибки после того, как перемаркируете файлы, если вы уже работаете в режиме disabled некоторое время. Работа в режиме disabled, это как клеить обои через утечку. При удалении обоев, вы, вероятно, найти повреждение водой. Точно так же, если вы уже работаете без включенным SELinux, вы, вероятно, создали больше проблем, которые в настоящее время должны быть решены.
После того как машина перезагрузится, вы можете переключиться на режим enforcing:
sudo setenforce 1
Это действительно в selinux?
Хороший способ сказать, является ли SELinux виноват в ошибке, чтобы установить режим permissive. Это означает, что SELinux регистрирует ошибку, но все же позволяет активность. Для этого выполните следующую команду:
sudo setenforce 0
Затем попробуйте процесс снова, в другом терминале, если это необходимо. В случае успеха политики SELinux происходит ошибка. Чтобы найти ошибки в течение последних 10 минут, используйте команду ausearch:
sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts recent
Если процесс все еще не в режиме permissive, то проблема, скорее всего, не в политике SELinux. В этом случае убедитесь, в запуске sudo setenforce 1, чтобы вернуться в режим enforcing. Помните, этот параметр является глобальным.
Определение проблемы
Обычно вы можете определить ошибки SELinux через сообщение AVC. Одним из параметров сообщения AVC является командой, которая генерируется сообщение. Например, вы можете увидеть comm=”/usr/sbin/httpd” в сообщении об ошибке SELinux, которая генерируется веб — сервером Apache.
Проблема также скажет вам контекст источника (scontext) действуя части вашей системы, и контекст цели (tcontext) вещи, котор она попыталась подействовать дальше. Часто, но не всегда, источник является бинарным и целевым файлом. Чтобы понять ошибки лучше, вы можете использовать SELinux Troubleshooter. Вы можете установить это с программным обеспечением инструмента в Fedora Workstation, или использовать sudo с dnf в терминале:
sudo dnf install setroubleshoot
Для запуска программы используйте Обзор в Fedora Workstation, чтобы найти SELinux Troubleshooter, или запустить из терминала:
sealert
Вы можете найти последние оповещения в браузере, который появляется:
На этом экране, например, вы можете получить список всех предупреждений, присутствующие в системе, чтобы устранить их систематически.
Решение проблемы
При выборе неполадок вы увидите несколько вариантов вашей ошибки.
В этом случае пользователь создал файл index.html в своем домашнем каталоге, и использовал команду mv, чтобы переместить его в каталог /var/www/html/ который будет обслуживаться веб — сервера Apache. Указав в веб — браузере http://localhost/index.html, эта ошибка произошла.
Обратите внимание, как каждый выбор дает вам определенный набор команд, которые можно выполнить для решения проблемы. В этом случае имеется логический параметр, который позволяет разрешить действие в будущем, даже если SELinux применяет политику.
Тем не менее, только потому, что существует логическое значение, не означает, что вы должны включить его, не понимая его. В этом случае, если вы включите логическое значение, веб — сервер Apache сможет прочитать любой пользовательский контент, чьи права позволяют доступ к файлам. Таким образом, в этом случае, если мы могли бы вместо этого спросить, «Почему этот файл имеет контекст?» В этом случае это происходит потому, что пользователь переместил файл. Это означает, что файл перенесли его старые связи в новом месте, вместо того, чтобы получать новый контекст по умолчанию, который позволяет веб-серверу прочитать содержимое в /var/www/html.
В этом случае лучше идея заключается в том, чтобы просто восстановить правильный контекст файла:
sudo restorecon -rv /var/www/html/index.html Relabeled /var/www/html/index.html from unconfined_u:object_r:user_home_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0
Примечание о булевых операциях в SELinux
Есть много доступных булевых операций. Каждый из них позволяет установить широкий класс доступа, который можно ожидать для функционирования приложения. Чтобы увидеть весь список и их текущие настройки, выполните следующую команду:
semanage boolean -l
Если установить пакет selinux-policy-devel первым, вы также можете увидеть краткое описание для каждой булевой операции при выполнении команды выше:
SELinux boolean State Default Description abrt_anon_write (off, off) Allow ABRT to modify public files used for public file transfer services. abrt_handle_event (off, off) Determine whether ABRT can run in the abrt_handle_event_t domain to handle ABRT event scripts. abrt_upload_watch_anon_write (on, on) Determine whether abrt-handle-upload can modify public files used for public file transfer services in /var/spool/abrt-upload/. antivirus_can_scan_system (off, off) Allow antivirus programs to read non security files on a system ...
Чтобы установить логическое временно запустить эту команду, где boolname это имя логического значения и value является либо on или 1, или off или 0.
setsebool boolname=value
Для того, чтобы установить его постоянно, добавьте переключатель -P:
setsebool -P boolname=value
Вывод
Есть и другие функции, которые можно выполнять для решения проблем в SELinux, такие как создание конкретного модуля политики для вашей системы. Вы можете их в руководстве по SELinux (https://docs-old.fedoraproject.org/en-US/Fedora/25/html/SELinux_Users_and_Administrators_Guide/index.html), которое полезно для понимания этих функций.