温馨提示×

CentOS镜像中的SELinux配置指南

小樊
51
2025-09-24 12:36:08
栏目: 智能运维

CentOS镜像中SELinux配置指南

一、SELinux基础认知

SELinux(Security-Enhanced Linux)是Linux内核级安全模块,通过强制访问控制(MAC)限制进程、文件、网络端口等资源的访问权限,弥补传统DAC(用户/组权限)模型的不足。CentOS镜像默认集成SELinux,但多数场景下默认处于Permissive模式(仅记录违规不阻止),需根据需求调整配置以平衡安全与功能。

二、查看SELinux状态

1. 查看当前模式(Enforcing/Permissive/Disabled)

使用getenforce命令快速获取SELinux运行模式:

getenforce
# 输出示例:Enforcing(强制模式)、Permissive(宽容模式)、Disabled(禁用)

2. 查看详细状态(包括策略类型、加载状态)

使用sestatus命令查看更全面的SELinux信息:

sestatus
# 输出示例:
# SELinux status:                 enabled
# Current mode:                   enforcing
# Mode from config file:          enforcing
# Policy MLS status:              enabled
# Policy deny_unknown status:     allowed

3. 查看SELinux策略模块

使用semodule -l命令列出已安装的SELinux策略模块:

semodule -l
# 输出示例:httpd  ssh  samba  ...

三、修改SELinux模式(临时/永久)

1. 临时更改模式(立即生效,重启失效)

使用setenforce命令切换模式,参数1Enforcing(强制),0Permissive(宽容):

sudo setenforce 1  # 切换到强制模式
sudo setenforce 0  # 切换到宽容模式

2. 永久更改模式(重启后生效)

编辑SELinux配置文件/etc/selinux/config,修改SELINUX参数:

sudo vi /etc/selinux/config

找到SELINUX=行,修改为以下值之一:

  • SELINUX=enforcing(强制模式,推荐生产环境使用)
  • SELINUX=permissive(宽容模式,用于调试应用兼容性)
  • SELINUX=disabled(禁用SELinux,不推荐,会降低系统安全性)
    保存后重启系统使更改生效:
sudo reboot

四、SELinux策略配置

1. 管理SELinux布尔值(开关特定功能)

SELinux布尔值用于控制特定功能的访问权限(如HTTP服务访问网络、FTP服务允许匿名上传)。使用setsebool命令修改,-P参数表示永久生效:

# 查看所有布尔值
semanage boolean -l

# 允许HTTP服务访问网络(适用于Web服务器)
sudo setsebool -P httpd_can_network_connect 1

# 允许FTP服务匿名上传
sudo setsebool -P ftpd_anon_write 1

2. 更改文件/目录安全上下文

文件或目录的安全上下文(Security Context)决定了SELinux对其的访问控制,格式为user:role:type:level(如httpd_sys_content_t)。使用chcon命令临时更改,restorecon命令恢复默认上下文:

# 将/var/www/html目录的上下文设置为httpd_sys_content_t(适用于Web文件)
sudo chcon -t httpd_sys_content_t /var/www/html

# 恢复/var/www/html目录的默认上下文
sudo restorecon -Rv /var/www/html  # -R递归处理,-v显示详细信息

3. 管理SELinux策略模块

(1)安装预定义策略模块

使用semodule命令安装.pp格式的策略模块(如自定义的my_policy.pp):

sudo semodule -i my_policy.pp

(2)删除策略模块

sudo semodule -r my_policy  # my_policy为模块名称(非文件名)

(3)从日志生成自定义策略

当应用出现SELinux拒绝(AVC)时,可通过audit2allow工具生成自定义策略模块:

# 查看最近的AVC拒绝日志
sudo ausearch -m avc -ts recent

# 从日志生成策略模块(my_custom_policy)
sudo ausearch -m avc -ts recent | audit2allow -M my_custom_policy

# 安装生成的策略模块
sudo semodule -i my_custom_policy.pp

五、常见应用场景配置示例

1. Web服务器(Nginx/Apache)

确保Web目录的上下文正确,允许HTTP服务访问:

# 设置Web目录上下文(以/var/www/html为例)
sudo chcon -R -t httpd_sys_content_t /var/www/html

# 允许HTTP服务绑定80/443端口
sudo semanage port -a -t http_port_t -p tcp 80
sudo semanage port -a -t http_port_t -p tcp 443

2. FTP服务器(vsftpd)

允许FTP用户上传文件,修改目录上下文及布尔值:

# 允许FTP匿名上传
sudo setsebool -P ftpd_anon_write 1

# 设置上传目录上下文(以/var/ftp/pub为例)
sudo chcon -t public_content_rw_t /var/ftp/pub

3. 数据库服务器(MySQL)

允许Web应用访问数据库端口(3306):

# 允许HTTP服务访问MySQL端口
sudo semanage port -a -t mysqld_port_t -p tcp 3306

六、注意事项

  1. 禁用SELinux的风险:禁用SELinux会移除强制访问控制,增加系统遭受攻击的风险,仅在测试环境或有特殊需求时使用
  2. 模式切换的影响:从Enforcing切换到Disabled需重启系统,且会清除SELinux策略;Permissive模式不会阻止操作,但会记录违规日志。
  3. 备份配置文件:修改SELinux配置前,备份/etc/selinux/config文件,以便恢复。
  4. 日志分析:当应用无法正常运行时,优先查看/var/log/audit/audit.log中的AVC拒绝日志,定位问题根源。

通过以上步骤,可完成CentOS镜像中SELinux的基本配置,根据实际应用场景调整策略,实现安全与功能的平衡。

0