SELinux
SELinux
ZhangCurrySELinux
一、SELinux是什么?
SELinux(Security-Enhanced Linux)即安全增强型Linux,是Linux内核的一个安全模块。与传统的基于用户ID和组ID的自主访问控制(DAC)不同,SELinux采用强制访问控制(MAC)机制。在DAC中,文件所有者可以自由决定文件的访问权限,但这种方式存在一定风险,一旦用户账户被入侵,攻击者可能获得过高的权限;而MAC机制下,系统会根据预设的安全策略,严格控制每个进程、用户对资源的访问,即使某个进程或用户被攻击,其造成的危害也能被限制在最小范围内 。
二、SELinux的核心作用
SELinux(Security-Enhanced Linux)是Linux的安全增强模块,通过以下方式保护系统:
强制访问控制(MAC):基于策略规则限制进程、文件和网络的权限,而非传统Linux的DAC(自主访问控制)。
类型强制(Type Enforcement):为每个进程和文件分配“安全上下文”(如 httpd_t、unconfined_t),仅允许明确授权的操作。
默认拒绝策略:未明确允许的操作均被阻止。
三、SELinux的工作模式
Enforcing:强制模式,这是SELinux的默认工作模式。在该模式下,SELinux会严格执行安全策略,一旦检测到违反策略的行为,就会阻止操作,并将相关信息记录到日志中。例如,如果一个非授权的进程试图访问受保护的系统文件,SELinux会立即禁止该操作,并在日志中留下记录,方便管理员排查问题。
Permissive:宽容模式,在这种模式下,SELinux不会阻止违反策略的操作,但会将这些违规行为记录到日志中。该模式常用于调试SELinux策略,当管理员不确定某些操作被阻止是否合理时,可以先将SELinux设置为宽容模式,查看日志记录的详细信息,然后再调整策略。
Disabled:关闭模式,即完全关闭SELinux功能。不过,关闭SELinux会降低系统的安全性,一般不建议在生产环境中使用,除非是在调试一些与SELinux冲突且暂时无法解决的软件时,才临时关闭。
四、如何修改SELinux
查看SELinux状态
在Linux系统中,可以使用 getenforce 命令来查看SELinux当前的工作模式,命令执行后会返回 Enforcing 、 Permissive 或 Disabled 。另外, sestatus 命令能提供更详细的SELinux状态信息,包括当前使用的策略类型等。
修改SELinux工作模式
临时修改SELinux工作模式可以使用 setenforce 命令,例如 setenforce 0 将其设置为宽容模式, setenforce 1 设置为强制模式。但这种修改在系统重启后会失效。若要永久修改工作模式,需要编辑 /etc/selinux/config 文件,将 SELINUX 参数的值修改为 enforcing 、 permissive 或 disabled ,然后重启系统使配置生效。
五、为何配置服务时需要关闭SELinux?
当部署新服务(如Web服务器、数据库)时,可能遇到以下问题:
端口绑定失败
示例:Nginx/Apache尝试绑定非标准端口(如8080),但SELinux默认仅允许80/443端口。
错误日志:SELinux is preventing httpd from using the tcp_socket.
文件/目录访问被拒
示例:服务需要写入 /var/www/html 外的目录(如 /data),但目录的SELinux上下文未配置。
错误日志:SELinux is preventing write access to the directory /data.
进程间通信受限
示例:容器运行时(如Docker)需要与宿主机交互,但默认策略限制了进程间通信。



