银河麒麟“权限不足”主因是KYSEC拦截,非传统权限问题;需依次执行:getstatus确认exec control状态,sudo setstatus softmode临时禁用,或sudo security-switch --set custom --list ""后重启,或echo 0 | sudo tee /proc/sys/kernel/kysec_kid清零kid值,再检查挂载选项是否含noexec。

银河麒麟系统运行软件时反复弹出“权限不足”提示,即使文件已用chmod +x赋予权限、用户属于root组、脚本语法完全正确,问题仍无法解决——这大概率不是传统Linux权限模型的问题,而是KYSEC安全机制在底层拦截执行。
确认是否为KYSEC拦截
打开终端,执行:
getstatus
重点查看两行输出:
第一行 Kysec status 应为 enable(若为 disable 可跳过后续KYSEC步骤);
第二行 exec control 若显示 on 或 warning,则说明执行控制已启用,当前报错极大概率由此引发。
若 exec control 显示 off,但依然报错,请直接跳至「检查挂载选项」小节。
临时禁用执行控制(开发调试首选)
方法一:切换软模式(重启后失效)
sudo setstatus softmode
方法二:永久启用软模式(重启后仍生效)
sudo setstatus softmode -p
【注意】软模式下KYSEC仅记录违规行为,不阻止执行,适合测试环境;生产环境请勿长期使用。
关闭应用执行控制策略
该方式通过修改全局安全策略开关实现,需重启生效。
第一步:查看当前策略级别
security-switch --get
第二步:设为自定义模式并清空所有控制项
sudo security-switch --set custom --list ""
第三步:重启系统使配置落地
sudo reboot
重启后再次运行程序,如仍失败,请继续排查。
强制清零kysec_kid参数
桌面版“安全中心→应用访问控制”界面存在UI与内核状态不同步的Bug:界面上显示已关闭,但/proc/sys/kernel/kysec_kid值仍为非0(如3),导致实际拦截持续生效。
执行命令检查当前值:
cat /proc/sys/kernel/kysec_kid
若返回非0数字,立即执行:
echo 0 | sudo tee /proc/sys/kernel/kysec_kid
验证是否成功:
getstatus | grep "kid protect"
输出应为 kid protect: off。
检查挂载选项是否含noexec
某些分区(如/data、/home)若在/etc/fstab中被标记为noexec,内核会直接拒绝该分区下所有二进制文件执行,chmod完全无效。
先定位你的程序所在路径,例如程序在/data/app/run.sh:
mount | grep /data
若输出中包含 (rw,noexec,) 字样,说明该挂载点禁止执行。
编辑fstab:
sudo vi /etc/fstab
找到对应行,将 noexec 替换为 exec,例如:
/dev/sdb1 /data ext4 rw,relatime,nosuid,nodev,noexec 0 2 → 改为 → /dev/sdb1 /data ext4 rw,relatime,nosuid,nodev,exec 0 2
保存退出后,执行重新挂载:
sudo mount -o remount,exec /data
回退到基础权限修正
仅当上述所有KYSEC相关排查均排除后,才需检查文件自身权限:
chmod +x /path/to/your/program
若程序为Shell脚本且需指定解释器,可改用:
sh /path/to/your/script.sh
或确保首行有正确shebang:
#!/bin/bash

















