执行Node相关操作后sudo命令报错,寻求恢复解决方案
修复被破坏的sudo权限及系统权限问题
你这情况明显是执行Node相关权限修改命令时,误操作影响到了系统关键文件的权限,尤其是sudo的核心权限被搞坏了。别着急,咱们一步步来恢复:
第一步:先拿到root权限(毕竟sudo已经用不了了)
要修复sudo,得先获取root身份:
- 先试试直接输入
su -,如果能输入root密码进入root shell,那直接跳到下一步。 - 如果
su -也不行,就得进入单用户模式:- 对于CentOS/RHEL系列:开机时按
e进入GRUB编辑界面,找到以linux16开头的行,把ro改成rw init=/sysroot/bin/sh,按Ctrl+X进入紧急shell,再执行chroot /sysroot切换到真实系统环境。 - 对于Ubuntu/Debian系列:开机按
Shift调出GRUB菜单,选「高级选项」,再选recovery mode里的「root shell」,先执行mount -o remount,rw /把根目录改成可写状态。
- 对于CentOS/RHEL系列:开机时按
第二步:修复sudo的核心权限
进入root环境后,执行这两条命令把sudo的权限改回正确状态:
chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo
chown是把sudo的所有者和组强制改回root(报错里明确要求sudo必须属于uid 0的用户)chmod 4755是设置setuid位——这就是报错里提到的必须的setuid bit,有了它sudo才能以root身份执行命令。
执行完后输入sudo -l测试,如果能正常列出你的sudo权限,说明sudo已经恢复正常了。
第三步:批量修复其他系统文件的权限
你之前只针对mkdir单独修复了权限,但之前的递归chmod和复制操作可能影响了大量系统文件,所以要批量恢复所有系统包的默认权限:
sudo rpm --setperms -a sudo rpm --setugids -a
这里的-a参数是对所有已安装的rpm包执行权限和属主恢复,而不是单个命令,这样能把被误改的系统文件权限全部还原回去。
恢复完后再测试mkdir /opt/test13121,应该就能正常创建目录了。
最后提个醒
以后执行chmod -R这种递归修改权限的命令一定要格外小心,尤其是涉及到复制到/usr/local这类系统目录的操作时,先确认$n的路径仅指向你的Node安装目录,别不小心碰了系统文件的权限。
内容的提问来源于stack exchange,提问作者tryingHard




