SELinux_Howto学习

SELinux模式

SELinux 拥有三个基本的操作模式,当中 Enforcing 是缺省的模式。此外,它还有一个 targeted 或 mls 的修饰语。这管制 SELinux 规则的应用有多广泛,当中 targeted 是较宽松的级别。

SELinux 的模式可以通过 Adminstration 选单里的 SELinux 图像管理界面、或者在命令行执行 system-config-selinux 来查看及更改(SELinux 图像管理界面是 policycoreutils-gui 组件的一部份,缺省是不会被安装的)。

较喜欢命令行的用户可使用 sestatus 这个指令来查看现时的 SELinux 状况:

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 21
Policy from config file:        targeted

setenforce 这个指令可以即时切换 Enforcing 及 Permissive 这两个模式,但请注意这些改动在系统重新开机时不会被保留。

要令改动过渡系统开机,请在 /etc/selinux/config 内修改 SELINUX= 这一行为 enforcing、permissive 或 disabled。例如:SELINUX=permissive。

注: 当你由 Diabled 切换至 Permissive 或 Enforcing 模式时,我们强烈推荐你重新引导系统并重新标签文件系统。

查看安全性脉络

$ ls -Z /var/www/html/index.html
-rw-r--r--  username username system_u:object_r:httpd_sys_content_t /var/www/html/index.html

$ ps axZ | grep httpd
system_u:system_r:httpd_t        3234 ?        Ss     0:00 /usr/sbin/httpd

查看错误

SELinux 缺省会通过 Linux 审计系统 auditd 将日志写在 /var/log/audit/audit.log 内,而该务服缺省为启用的。假若 auditd 长驻程序并未运行,信息将会被写进 /var/log/messages。SELinux 的日志都以 AVC 这个关键字作标签,让 grep 等程序可轻易地把它们从其它信息中过滤出来。

重新标签文件

chcon -Rv --type=httpd_sys_content_t /html 

以这个方式更改安全性脉络在系统重新开机后仍会获保留,直至该部份文件系统被重新标签。这个动作也算颇常,因此正确的解决方法,就是于测试后编写一条自定的规则(所谓的政策模块),并把它与本地的规则进行合并。它将会是原有的 200 多条规则外的一条规则。要作出永久性、能过渡文件系统重新标签的安全性脉络改动,我们可以采用 SELinux 管理工具,或者在命令行执行 semanage 这个指令:

semanage fcontext -a -t httpd_sys_content_t "/html(/.*)?" 

如此便会将 /html 以下的一切加入 httpd_sys_content_t 这个文件脉络类型。

撤消缺省的安全性脉络

restorecon -Rv /var/www/html

只检查哪些文件的安全性脉络需要被撤消:

restorecon -Rv -n /var/www/html 

重新标签整个文件系统

要在重新开机后自动将整个文件系统重新标签,请执行:

touch /.autorelabel
reboot 

假若一个系统在升级至 CentOS-5.2 时停用了 SELinux,然后 SELinux 被启用,重新标签整个文件系统时或许会失败。如果以上的步骤不能正确地将整个文件系统重新标签,请尝试先执行 genhomedircon 这个指令:

genhomedircon
touch /.autorelabel
reboot

允许访问某个端口

我们或许会想容让 Apache 连结至某个非标准的端口并聆听对内的连接。SELinux 的政策缺省只允许每个服务访问被公认与该服务有关的端口。如果我们想容让 Apache 在 tcp 端口 81 上聆听,我们可以利用 semanage 这个指令来新增一条规则批准此事:

semanage port -a -t http_port_t -p tcp 81 

你可以这样令 SELinux 完整地列出每个服务可访问的端口:

semanage port -l

其他