误修改根目录权限后sudo命令提示权限拒绝的解决方法求助
误修改根目录权限后sudo命令提示权限拒绝的解决方法求助
嘿,这操作确实够坑的——不小心把根目录权限改成744,直接搞崩了sudo的运行依赖,毕竟很多系统程序都需要遍历根目录的执行权限才能正常工作。别慌,咱们有两种靠谱的修复方式,选适合你的来操作:
方法一:通过单用户模式修复(适合能直接操作物理/虚拟机的情况)
这是最快的修复方式,不需要额外介质:
- 重启你的系统,在GRUB启动菜单(Ubuntu/Debian系系统常见)里,选中你平时使用的内核版本,按
e进入编辑模式 - 找到开头为
linux的那一行,把里面的ro quiet splash(或者类似的只读启动参数)替换成rw init=/bin/bash - 按下
Ctrl+X或者F10启动,这时候会直接进入一个拥有root权限的shell,不需要输入密码 - 先把根目录权限改回默认的755:
chmod 755 / - 再修复sudo的特殊权限(sudo需要setuid位才能让普通用户调用):
chmod 4755 /usr/bin/sudo - 最后输入
exec /sbin/init回到正常启动流程,或者直接重启系统即可
方法二:用Live CD/USB启动修复(如果单用户模式进不去)
如果单用户模式没法正常进入,就用这个方法:
- 制作一个和你当前系统同类型的Linux Live USB(比如Ubuntu、Debian的镜像)
- 从Live USB启动,选择“试用系统”(不要选安装选项)
- 先找到你的系统根分区:执行
lsblk查看磁盘分区,找到标注为/的分区(比如/dev/sda1或者/dev/nvme0n1p2) - 创建挂载点并挂载根分区:
sudo mkdir /mnt/myroot sudo mount /dev/你的根分区路径 /mnt/myroot - 进入挂载的系统环境:
sudo chroot /mnt/myroot - 同样执行修复命令:
chmod 755 / chmod 4755 /usr/bin/sudo - 退出chroot:
exit,然后卸载分区:sudo umount /mnt/myroot,重启后拔掉Live USB就可以正常使用了
额外提醒
- 根目录的默认权限必须是
755(所有者读写执行,组和其他用户读执行),改成744会导致大部分系统程序无法遍历目录,直接崩溃 /usr/bin/sudo的默认权限是4755(带setuid位的rwsr-xr-x),这个特殊权限是普通用户能调用sudo的关键,一定要修复到位
备注:内容来源于stack exchange,提问作者Ritesh Tiwari




