CentOS/Redhat:打开SELinux保护

时间:2020-01-09 10:43:25  来源:igfitidea点击:

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