在 CentOS 7.5、Linux 3.10.0-862.3.2.el7.x86_64 上,我试图了解文件上下文是如何工作的。ls -Z
,chcon
并且semanage
似乎按预期工作,但restorecon
似乎固执地保持沉默。
例如:
$ cd
$ mkdir context
$ ls -laZ
drwxrwxr-x liteyear liteyear ? context
$ chcon -v unconfined_u:object_r:user_home_t:s0 context
$ ls -laZ
drwxrwxr-x. liteyear liteyear unconfined_u:object_r:user_home_t:s0 context
$ rmdir context
一切都好,并且semanage
:
$ mkdir context
$ sudo semanage fcontext -a -t user_home_t /home/liteyear/context
$ cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.
/home/liteyear/context system_u:object_r:user_home_t:s0
一切都好,但restorecon
路线:
$ restorecon -v /home/liteyear/context
$ ls -laZ
drwxrwxr-x liteyear liteyear ? context
不应用文件上下文。
我已经尝试了各种迭代,使用现有的上下文、不同的上下文、其他文件夹和文件,restorecon
但从未产生任何东西。有各种类似的报告(例如[CentOS] SELinux restorecon does not work),但似乎没有人确认存在问题。
这restorecon
是应该工作的方式吗?
在启用 SELinux 的运行系统上,新文件和目录从父目录继承上下文或根据策略规则应用上下文。示例显示创建目录时未应用 SELinux 上下文,从
ls -Z
输出可见,如?
安全上下文列中所示。这表明您的系统上未启用 SELinux。启用 SELinux 后,系统会自动应用文件上下文。
sestatus
您可以使用命令检查 SELinux 状态。如果您想重新启用 SELinux,您应该提前查看文档。系统应首先以许可模式启动以重新标记(要应用缺少的标签),并且应在切换到强制模式之前修复任何明显的问题。
SELinux 通常需要一些配置:您的文件可能位于默认策略未包含的位置,或者您的应用程序可能需要比默认策略允许的更多权限。
audit2allow
并且audit2why
在调查 SELinux 日志时是有用的工具,并且经常显示错误的文件标签或建议可以解决问题的布尔值。SELinux 还具有许可域,可用于禁用某些域(进程)的 SELinux,同时将其余策略保持在强制模式。在许可模式下,日志的生成方式与在强制模式下相同,否则会被拒绝。显然,在 permissive 域中运行应用程序实际上与运行禁用 SELinux 的应用程序相同。