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),避免误操作导致系统异常。