在麒麟os服务器版中实施细粒度访问约束需启用selinux强制模式:先用sestatus和getenforce确认当前为permissive模式,再执行setenforce 1并修改/etc/selinux/config中selinux=enforcing,重启后验证;接着加载自定义策略模块(如mynginx.pp),调整文件与进程安全上下文(如httpd_sys_content_t),配置布尔值(如httpd_read_user_content on),最后通过ausearch和audit2allow审计排查avc拒绝事件。

如果您在麒麟OS服务器版中需要实施细粒度的进程与文件访问约束,则必须启用并配置SELinux强制访问控制策略。以下是具体操作步骤:
一、确认SELinux当前状态与运行模式
SELinux在麒麟OS中默认以permissive模式运行,仅记录违规行为而不阻止执行,需切换至enforcing模式才能生效强制策略。该步骤用于验证内核是否已加载SELinux模块及当前策略执行级别。
1、执行sestatus命令,检查输出中“Current mode”字段值。
2、若显示为permissive,说明策略处于告警状态,尚未启用强制拦截能力。
3、运行getenforce确认当前运行模式,返回Permissive即表示未激活强制控制。
二、启用SELinux强制模式并持久化配置
临时启用可快速验证策略效果,但系统重启后会恢复默认状态;永久生效需修改配置文件,确保安全策略在每次启动时自动加载。
1、执行sudo setenforce 1将运行模式切换为enforcing。
2、编辑/etc/selinux/config文件:sudo vim /etc/selinux/config。
3、将SELINUX=行后的值修改为enforcing,保存退出。
4、重启系统后再次运行getenforce,确认返回结果为Enforcing。
三、加载自定义SELinux策略模块
麒麟OS预置基础策略(targeted),但针对特定业务服务(如Nginx、PostgreSQL)需加载专用策略模块,否则相关进程可能因标签缺失被拒绝访问资源。
1、确认目标服务是否已有对应策略包:seinfo -a boolean -x | grep nginx(以nginx为例)。
2、若无输出,需安装策略模块:sudo yum install selinux-policy-devel policycoreutils-python-utils。
3、使用audit2allow从审计日志生成策略规则:sudo ausearch -m avc -ts recent | audit2allow -M mynginx。
4、编译并加载新模块:sudo semodule -i mynginx.pp。
5、验证模块已注册:sudo semodule -l | grep mynginx,返回模块名即表示加载成功。
四、调整文件与进程的安全上下文标签
SELinux依据安全上下文(user:role:type:level)裁决访问请求,若文件或进程标签不匹配策略规则,将触发拒绝。需手动修正关键路径与服务进程的上下文。
1、查看目标目录当前上下文:ls -Z /var/www/html。
2、若type字段非httpd_sys_content_t,执行sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"。
3、应用上下文变更:sudo restorecon -Rv /var/www/html。
4、检查Nginx主进程上下文:ps -eZ | grep nginx,确保其type为httpd_t。
5、若进程标签异常,重启服务使SELinux重新标记:sudo systemctl restart nginx。
五、配置布尔值开关启用弹性策略
SELinux布尔值提供运行时策略微调能力,无需修改底层规则即可开启/关闭特定访问权限,适用于调试阶段或临时业务需求。
1、列出所有可用布尔值及其当前状态:getsebool -a | grep httpd。
2、启用HTTPD读取用户主目录权限:sudo setsebool -P httpd_read_user_content on。
3、允许HTTPD发起网络连接(如反向代理场景):sudo setsebool -P httpd_can_network_connect on。
4、验证变更生效:getsebool httpd_read_user_content,返回on即表示已激活。
六、审计与排查SELinux拒绝事件
当服务异常中断且日志中出现“Permission denied”时,极可能由SELinux拦截导致。需解析审计日志定位具体拒绝原因,并生成针对性修复方案。
1、实时监控AVC拒绝事件:sudo ausearch -m avc -ts recent --raw | audit2why。
2、提取最近10条拒绝记录:sudo ausearch -m avc -ts today -i | head -n 10。
3、定位触发进程与目标文件:sudo ausearch -m avc -ts recent -i | grep -E "(comm=|path=)"。
4、生成临时修复建议:sudo ausearch -m avc -ts recent | audit2allow -w。
5、若需立即放行某类操作(仅限测试环境):sudo setenforce 0,但此操作将完全禁用SELinux强制控制,严禁在生产环境执行。










