SELinux与CentOS服务集成的核心流程
在集成前,需先确认SELinux是否启用及当前模式。使用getenforce
命令查看模式(Enforcing
为强制模式,Permissive
为宽容模式,Disabled
为禁用),通过sestatus
查看详细状态。若未启用,需编辑/etc/selinux/config
文件,将SELINUX=disabled
改为SELINUX=enforcing
,并重启系统生效。
部分服务(如FTP、SSH)的SELinux策略调整需要额外工具。使用以下命令安装policycoreutils-python
(包含semanage
、restorecon
等工具):
sudo yum install -y policycoreutils-python
服务的文件或目录需具备正确的SELinux类型(如Apache需httpd_sys_content_t
,FTP需public_content_t
)。常用命令:
semanage fcontext -a -t <服务类型> "<目录路径>(/.*)?"
(如semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?"
);restorecon -Rv <目录路径>
(递归恢复目录及子项的默认上下文)。若服务使用非默认端口,需通过semanage
添加端口映射。例如,允许Apache使用8080端口:
sudo semanage port -a -t http_port_t -p tcp 8080
验证端口映射:semanage port -l | grep <服务类型>
(如semanage port -l | grep http
)。
若默认策略无法满足需求(如FTP访问用户家目录),可通过日志分析生成自定义模块:
ausearch -m AVC -ts recent
(查看最近的SELinux拒绝事件);audit2allow -a -M <模块名>
(如audit2allow -a -M my_ftp
);checkmodule -M -m -o my_ftp.mod my_ftp.te
semodule_package -o my_ftp.pp -m my_ftp.mod
semodule -i my_ftp.pp
ls -Z <文件/目录路径>
(确认文件类型与服务要求一致,如Apache目录应为httpd_sys_content_t
);systemctl restart <服务名>
,如systemctl restart httpd
),通过客户端访问服务(如浏览器访问http://服务器IP:8080
);audit2why
工具分析拒绝原因:ausearch -m AVC -ts recent | audit2why
。sudo yum install -y httpd
;semanage fcontext -a -t httpd_sys_content_t "/var/www/myapp(/.*)?"
;restorecon -Rv /var/www/myapp
;sudo systemctl restart httpd
。sudo yum install -y vsftpd
;semanage port -a -t ftp_port_t -p tcp 30000:31000
;setsebool -P ftp_home_dir on
;sudo systemctl restart vsftpd
。semanage port -a -t ssh_port_t -p tcp 2222
;/etc/ssh/sshd_config
中的Port
为2222;sudo systemctl restart sshd
。通过以上步骤,可实现SELinux与CentOS服务的有效集成,在保障系统安全的同时,确保服务正常运行。需注意,策略调整前建议备份配置文件(如/etc/selinux/config
、/etc/vsftpd/vsftpd.conf
),避免误操作导致系统异常。