必须立即按优先级分层抢救:先修复sudo setuid位(chmod 4755 /usr/bin/sudo),再降权/etc/shadow(600)和/etc/sudoers(440),同步禁用KYSEC干扰,最后逐项恢复关键路径权限与sticky bit。

当你在麒麟OS中误执行sudo chmod -R 777 /后,/usr/bin/sudo丢失setuid位、/etc/shadow变成全局可读、/tmp失去sticky bit、systemd单元加载失败——这些不是零散故障,而是同一权限契约崩塌引发的连锁反应,必须按优先级分层抢救。
立即止损:保住当前会话不崩溃
终端仍能输入命令?这是黄金窗口期,别关机、别退出shell、别执行任何新chmod。
先锁定最关键的提权入口:执行chmod 4755 /usr/bin/sudo。若提示“Operation not permitted”,说明当前bash已因/lib64/ld-linux-x86-64.so.2权限错乱而无法加载动态链接库——此时必须立刻停手,跳转至Recovery模式。
同步降权敏感文件:运行chmod 600 /etc/shadow和chmod 440 /etc/sudoers。这两步能阻止未授权用户直接读取密码哈希或篡改提权策略,【跳过将导致系统在重启后彻底失守】。
权限模板还原:用getfacl精准回滚
该方法仅适用于有同版本干净麒麟OS可用(虚拟机/另一台物理机),且故障机仍能挂载根分区的情况。
方法一:从正常机器导出基准权限
在干净麒麟V10系统中,以root身份执行:cd / && getfacl -pR . > /tmp/kylin-perms.acl。注意必须用.而非/,否则路径前缀为/会导致restore时找不到目标;-p参数不可省略,否则绝对路径信息丢失。
方法二:拷贝并恢复到故障机
将生成的kylin-perms.acl文件通过U盘或scp传入故障机→挂载根分区(若已无法启动,需从Live USB进入后执行mount /dev/sda1 /mnt)→进入chroot环境:chroot /mnt→执行setfacl --restore=/kylin-perms.acl。恢复过程出现“没有那个文件或目录”报错可忽略,这是因部分临时文件已被删除所致。
无备份时手动抢救关键路径
若无同版本环境,只能按模块逐项修复。以下顺序不可颠倒:先保基础执行能力,再锁核心配置,最后修服务依赖。
第一步:修复所有特权程序
执行chown root:root /usr/bin/sudo /usr/bin/passwd /bin/ping /usr/bin/su→再统一设setuid:chmod 4755 /usr/bin/sudo /usr/bin/passwd /bin/ping /usr/bin/su。注意:/bin/bash也必须包含在内,否则新终端无法启动。
第二步:重置关键目录与文件权限
/tmp和/var/tmp必须为1777:chmod 1777 /tmp /var/tmp;/root目录必须为700:chmod 700 /root;/etc/ssh下的私钥必须为600:chmod 600 /etc/ssh/*_key。
第三步:校验KYSEC是否干扰恢复
执行getstatus | grep "kid protect"。若输出为kid protect: on(值为3),立即执行echo 0 | sudo tee /proc/sys/kernel/kysec_kid。这一步常被忽略,但KYSEC在权限混乱状态下会主动拦截chmod等系统调用,导致修复命令静默失败。

















