CentOS/Redhat:打开SELinux保护
SELinux提出了一个想法,即程序应限制在它们可以访问的文件以及可以执行的操作中。
但是,默认情况下,在RHEL/CentOS版本5.x和6.x服务器下它是关闭的吗?
如何打开它?
如何在CentOS/RHEL 6 IBM服务器上启用SELinux?
SELinux是内核安全性扩展,可用于防止配置错误或者受到破坏的程序。
它带有强制访问控制(MAC)系统,该系统改进了传统的UNIX/Linux DAC(Discretionary Access Control)模型。
SELinux可以是下列状态之一:
- `enforcecing'强制执行SELinux安全策略。
- " permissive" SELinux打印警告而不是强制执行。
- `disabled'SELinux被完全禁用。
步骤1:安装其他SELinux软件包
输入以下yum
命令:
# yum install policycoreutils setroubleshoot
步骤2:在许可模式下运行SELinux
编辑/etc/selinux/config文件,运行:
# vi /etc/selinux/config
如下更新配置文件:
SELINUX=permissive SELINUXTYPE=targeted
保存并关闭文件。
重新启动服务器:
# reboot
步骤3:确保SELinux没有拒绝操作
执行以下命令,以确认SELinux在重新引导期间未拒绝操作:
grep "SELinux is preventing" /var/log/messages
该命令不返回任何错误,也不会输出到步骤3。
如果出现任何输出/错误,请尝试使用chcon命令。
它可用于更改文件的SELinux安全上下文。
但是,建议您重新标记完整的文件系统。
执行以下命令以恢复/home的默认安全上下文:
# restorecon -Rv -n /home
您也可以在根(/)文件系统上运行此命令:
# restorecon -Rv -n /
不要跳过此步骤。
执行以下命令:
# touch /.autorelabel # reboot
重新标记完整的文件系统将需要一些时间。
如果遇到任何错误或者mysqld或者sshd常见服务失败,请尝试以下解决方案(进入单用户模式):
# init 1 # genhomedircon # touch /.autorelabel # reboot
现在,转到步骤4。
步骤4:将SELINUX设置为强制模式
编辑/etc/selinux/config,执行:
# vi /etc/selinux/config
如下更新配置文件:
SELINUX=enforcing SELINUXTYPE=targeted
了解SELinux配置
- SELINUX = enforcing:强制是默认模式,它将在Linux上启用和实施SELinux安全策略。它还将拒绝未经授权的访问并在日志文件中记录操作。
- SELINUXTYPE = targeted:仅保护目标网络守护程序(例如DNS,Apache等)。
保存并关闭文件。
确保未使用Grub引导加载程序禁用SELinux。
使用grep搜索/boot/grub/grub.conf文件,并确保不要出现以下行:
# egrep -i 'selinux=0|enforcing=0' /boot/grub/grub.conf
如果找到带有" selinux = 0"或者" enforcing = 0"的行,请将其删除并保存更改。
重新启动服务器:
# reboot
步骤5:确保正确启用SELinux
执行以下命令:
# sestatus
输出示例:
SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 24 Policy from config file: targeted
如何打印允许的网络端口的完整列表?
输入以下命令
# semanage port -l # semanage port -l | less #### look for port 80 #### # semanage port -l | grep -w 80
如何在端口8181上允许Lighttpd/Apache/Nginx?
默认情况下,SELinux将阻止访问许多端口,包括8181。
您需要允许访问端口8181,以便它可以绑定并侦听非特权端口上的传入请求。
您需要使用semanage命令,如下所示:
# semanage port -a -t http_port_t -p tcp 8181
如何查找不受保护的服务?
执行以下命令:
# ps -eZ | egrep "initrc" | egrep -vw "ps|tr|egrep|awk|bash" | tr ':' ' ' | awk '{ print $NF }'
在完全配置的SELinux系统上,您应该看不到任何输出。
我如何看待SELinux标签?
执行以下命令:
# ls -lZ /path/to/file # ls -lZd /path/to/dir # ls -lZd /etc # ls -lZ /dev/ | grep deviceName # ls -lZ /etc/resolv.conf
输出示例:
-rw-r--r-- root root system_u:object_r:net_conf_t /etc/resolv.conf
对SELinux策略错误进行故障排除
SELinux是相当复杂的内核软件。
修复错误需要时间。
使用以下工具查找和调试SELinux策略问题(请参阅本地手册页):
- ps -Z -p PID
- ls -Z fileName
- ausearch
- restorecon
- semodule
- audit2allow
- 日志文件:/var/log/audit/audit.log和/var/log/setroubleshoot/setroubleshootd.log