如何使用 SELinux 更改 CentOS 中目录的安全上下文?

Chl*_*loe 5 centos selinux

我试图改变它,但它不让我这么做。

# ls -dZ /usr/local/spamassassin
drwx------. spam spam system_u:object_r:usr_t:s0       /usr/local/spamassassin

# chcon -v --type=spamd_t /usr/local/spamassassin
changing security context of `/usr/local/spamassassin'
chcon: failed to change context of `/usr/local/spamassassin' to `system_u:object_r:spamd_t:s0': Permission denied
Run Code Online (Sandbox Code Playgroud) audit.log
type=AVC msg=audit(1483587389.449:354941): avc:  denied  { append } for  pid=31588 comm="spamd" name="spamfilter.log" dev=xvde ino=24109 scontext=unconfined_u:system_r:spamd_t:s0 tcontext=unconfined_u:object_r:usr_t:s0 tclass=file
Run Code Online (Sandbox Code Playgroud)

CentOS 版本 6.8(最终版)

小智 3

您收到权限被拒绝的原因是 spamd_t 类型不是有效的 SELiunx 类型。您可能需要安装一些软件包才能使其成为有效类型。我不确定那里。但我会仔细检查您的答案,以确保您遵循最佳实践。


semanage fcontext -a -t spamc_home_t "/usr/local/spamassassin(/.*)?"
Run Code Online (Sandbox Code Playgroud)

这将添加一条规则,以递归方式将 SELinux 类型更改为包括目录本身spamc_home_t在内的任何内容/usr/local/spamassassin,但这些更改不会立即生效。

为了使这些更改立即生效,我将在上述命令之后立即运行以下命令:

restorecon -rv /usr/local/spamassassin
Run Code Online (Sandbox Code Playgroud)

这将根据系统的规则恢复默认的 SELinux 上下文。实际上与系统重新启动或创建新文件时发生的行为相同。它比使用更好,chcon因为它从规则集(您刚刚使用上述命令修改)读取,而不是进行临时的非持久更改。