1. 准备工作:安装并启用SELinux
在Ubuntu上使用SELinux前,需先安装相关组件并启用。执行以下命令安装selinux-basics(基础配置工具)和selinux-policy-default(默认策略集):
sudo apt update && sudo apt install selinux-basics selinux-policy-default auditd setroubleshoot -y
安装完成后,通过编辑/etc/selinux/config文件永久启用SELinux(将SELINUX=设置为enforcing):
sudo sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config
激活SELinux并重启系统使配置生效:
sudo selinux-activate && sudo reboot
重启后,使用sestatus命令验证SELinux状态(需显示Current mode: enforcing)。
2. 配置SELinux布尔值限制进程网络访问
SELinux布尔值是动态开关,可快速启用/禁用特定进程的网络功能。例如:
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P sshd_allow_tcp_forwarding 0
sudo setsebool -P mysqld_can_network_connect 1
使用getsebool -a | grep httpd(替换为对应服务名)可查看当前布尔值设置。
3. 管理网络端口与SELinux类型关联
SELinux通过端口类型(如http_port_t)限制进程监听的端口。若需让服务使用非默认端口(如HTTP用8080端口),需添加端口到对应类型:
sudo semanage port -a -t http_port_t -p tcp 8080
查看当前端口类型映射:
sudo semanage port -l | grep http_port_t
若需删除自定义端口:
sudo semanage port -d -t http_port_t -p tcp 8080
此操作可防止进程非法监听未授权端口。
4. 自定义SELinux策略模块实现细粒度隔离
若默认策略无法满足需求(如限制某进程仅能访问特定IP),可通过audit2allow工具生成自定义策略:
sudo ausearch -m avc -ts recent
audit2allow,生成.te(类型强制)文件并编译为模块:sudo ausearch -m avc -ts recent | audit2allow -M my-network-policy
sudo semodule -i my-network-policy.pp
此方法可实现进程级别的网络访问控制(如仅允许某Web应用访问特定数据库IP)。
5. 调整文件上下文确保进程正确访问资源
SELinux通过文件上下文(如httpd_sys_content_t)限制进程对文件的访问。若需让Web服务访问自定义目录(如/mywebsite),需修改目录上下文:
sudo chcon -R -t httpd_sys_content_t /mywebsite
semanage fcontext添加规则,再恢复上下文:sudo semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?"
sudo restorecon -Rv /mywebsite
此操作确保Apache等进程能正确读取自定义目录中的文件。
6. 监控与审计SELinux网络访问
通过日志分析可及时发现并解决SELinux网络隔离问题:
sudo ausearch -m avc -ts today
sudo aureport -m avc -ts today
sudo sealert -a /var/log/audit/audit.log
日志分析可帮助定位“进程无法访问网络”的原因(如缺少端口权限、布尔值未开启)。
注意事项
-t参数)。iptables)使用。