SELinux故障排除

SELinux是Fedora系统上最强大的安全功能之一。 这就像您的计算机服务的代客密钥,只是允许它们访问批准的数据。 SELinux因其困难而建立在其早期声誉上。 现在,它具有适用于最受欢迎应用程序的可配置策略,并提供了额外的安全性和信心。 但是,有时错误的确会发生,本文将帮助您解决错误。

先决条件

本文假设两件事:

  1. 您了解SELinux的基础知识。 如果您不了解SELinux的基础知识,那么现在是进行此操作的好时机。
  2. 您正在以强制模式使用SELinux。 强制是启动Fedora的正常方法。 如果禁用了SELinux,则需要启用它。 编辑/ etc / sysconfig / selinux文件以将SELINUX设置为宽松。 使用宽松模式可确保仍然可以使用以下命令自动解决任何根本性问题。 然后,请按照下列步骤操作:
    sudo fixfiles -F onboot
    reboot

    由于SELinux重新标记了禁用时创建的所有文件,因此引导过程可能比平时花费更长的时间。 在非常大的文件系统上这可能需要一段时间,因此请耐心等待。

如果您已经在禁用模式下一段时间,在重新标记文件后开始看到错误,请不要感到惊讶。 在禁用模式下工作就像通过漏水粘合墙纸一样。 移除墙纸时,您可能会发现水渍。 同样,如果您已经在未启用SELinux的情况下工作,则可能已经创建了更多当前需要解决的问题。

机器重新启动后,可以切换到强制模式:

sudo setenforce 1

这真的在selinux中吗?

判断SELinux是否出错的一个好方法是设置许可模式。 这意味着SELinux记录错误,但仍然允许活动。 为此,请运行以下命令:

sudo setenforce 0

然后,如有必要,请在另一个终端中再次尝试该过程。 如果SELinux策略成功,则会发生错误。 要在最近10分钟内发现错误,请使用ausearch命令:

sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts recent

如果该过程仍未处于允许模式,则问题很可能与SELinux策略无关。 在这种情况下,请确保运行sudo setenforce 1以返回到强制模式。 记住这个参数是 全球

定义问题

通常,您可以通过AVC消息发现SELinux错误。 AVC消息的参数之一是生成消息的命令。 例如,您可以在Apache Web服务器生成的SELinux错误消息中看到comm =“ / usr / sbin / httpd”。

该问题还将告诉您系统作用部分的源上下文(scontext),以及它试图作用的事物的目标上下文(tcontext)。 通常,但并非总是如此,源是二进制文件和目标文件。 为了更好地理解错误,可以使用SELinux Troubleshooter。 您可以将其与Fedora Workstation中的工具软件一起安装,或在终端中将sudo与dnf一起使用:

sudo dnf install setroubleshoot

要启动该程序,请使用Fedora Workstation中的“浏览”查找SELinux故障排除程序,或从终端运行:

sealert

您可以在出现的浏览器中找到最新的警报:

例如,在此屏幕上,您可以获取系统中存在的所有警告的列表,以便系统地消除它们。

解决问题

选择问题时,您将看到几个错误选项。

SELinux故障排除

在这种情况下,用户在其主目录中创建了一个index.html文件,并使用mv命令将其移动到Apache Web服务器将提供的/ var / www / html /目录中。 通过在Web浏览器中指向http:// //localhost/index.html,发生了此错误。

请注意,每个选择如何为您提供一组特定的命令,您可以运行这些命令来解决问题。 在这种情况下,存在一个布尔选项,即使SELinux强制执行该策略,该选项也允许将来允许执行该操作。

但是,仅仅因为有一个布尔值, 并不意味着您必须在不了解的情况下将其打开。 在这种情况下,如果启用布尔值,则Apache Web服务器将能够读取其权限允许文件访问的任何用户内容。 因此,在这种情况下,如果我们可以反问,“为什么此文件具有上下文?” 在这种情况下,这是因为用户移动了文件。 这意味着文件已通过其旧链接移动到新位置,而不是接收允许Web服务器读取/ 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是布尔值的名称,值是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)中找到它们,这有助于理解这些功能。

Sidebar