SELinux(Security-Enhanced Linux)是Linux内核级安全模块,通过强制访问控制(MAC)限制进程、文件、网络端口等资源的访问权限,弥补传统DAC(用户/组权限)模型的不足。CentOS镜像默认集成SELinux,但多数场景下默认处于Permissive模式(仅记录违规不阻止),需根据需求调整配置以平衡安全与功能。
使用getenforce命令快速获取SELinux运行模式:
getenforce
# 输出示例:Enforcing(强制模式)、Permissive(宽容模式)、Disabled(禁用)
使用sestatus命令查看更全面的SELinux信息:
sestatus
# 输出示例:
# SELinux status: enabled
# Current mode: enforcing
# Mode from config file: enforcing
# Policy MLS status: enabled
# Policy deny_unknown status: allowed
使用semodule -l命令列出已安装的SELinux策略模块:
semodule -l
# 输出示例:httpd ssh samba ...
使用setenforce命令切换模式,参数1为Enforcing(强制),0为Permissive(宽容):
sudo setenforce 1 # 切换到强制模式
sudo setenforce 0 # 切换到宽容模式
编辑SELinux配置文件/etc/selinux/config,修改SELINUX参数:
sudo vi /etc/selinux/config
找到SELINUX=行,修改为以下值之一:
SELINUX=enforcing(强制模式,推荐生产环境使用)SELINUX=permissive(宽容模式,用于调试应用兼容性)SELINUX=disabled(禁用SELinux,不推荐,会降低系统安全性)sudo reboot
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
文件或目录的安全上下文(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显示详细信息
使用semodule命令安装.pp格式的策略模块(如自定义的my_policy.pp):
sudo semodule -i my_policy.pp
sudo semodule -r my_policy # my_policy为模块名称(非文件名)
当应用出现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
确保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
允许FTP用户上传文件,修改目录上下文及布尔值:
# 允许FTP匿名上传
sudo setsebool -P ftpd_anon_write 1
# 设置上传目录上下文(以/var/ftp/pub为例)
sudo chcon -t public_content_rw_t /var/ftp/pub
允许Web应用访问数据库端口(3306):
# 允许HTTP服务访问MySQL端口
sudo semanage port -a -t mysqld_port_t -p tcp 3306
Enforcing切换到Disabled需重启系统,且会清除SELinux策略;Permissive模式不会阻止操作,但会记录违规日志。/etc/selinux/config文件,以便恢复。/var/log/audit/audit.log中的AVC拒绝日志,定位问题根源。通过以上步骤,可完成CentOS镜像中SELinux的基本配置,根据实际应用场景调整策略,实现安全与功能的平衡。