SELinux_Howto学习
SELinux模式
SELinux 拥有三个基本的操作模式,当中 Enforcing 是缺省的模式。此外,它还有一个 targeted 或 mls 的修饰语。这管制 SELinux 规则的应用有多广泛,当中 targeted 是较宽松的级别。
- Enforcing: 这个缺省模式会在系统上启用并实施 SELinux 的安全性政策,拒绝访问及记录行动
- Permissive: 在 Permissive 模式下,SELinux 会被启用但不会实施安全性政策,而只会发出警告及记录行动。Permissive 模式在排除 SELinux 的问题时很有用
- Disabled: SELinux 已被停用
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 等程序可轻易地把它们从其它信息中过滤出来。
-
安装工具包
yum install setroubleshoot
-
分析报告
sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt
重新标签文件
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
其他
- 自定SELinux政策
- 利用 audit2allow 创建自定 SELinux 政策模块