昨天手贱,执行命令的时候输错了,结果输入了以下命令:
chmod -Rf 777 /
可想而知,得到的回报惊人哈哈,我现在之所以还笑的出来,是因为折腾了半天已经修复了这个问题了。
先来复盘一下问题解决的过程吧
错误原因
失误导致的,本来想输入 chmod -Rf 777 ./
结果打完了没好好确认,眼睁睁的执行了 chmod -Rf 777 /
。这个命令的威力,可以说是仅次于 rm -rf /
。
操作完该命令后,也没太在意,就推出 root 用户了。😭
犯错后果
执行完 chmod -Rf 777 /
后,有两种可能的场景。
- 如果没有退出 root 用户,那么在当前 root 下,继续执行一系列恢复权限的操作,该问题就能轻松解决了,具体参考解决办法最后执行的几个命令。
- 如果已经推出了 root 用户,那么会出现 “非 root 用户失去 sudo 权限” 报错:
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
,“root 用户/非 root 用户均无法再登陆系统” 等一系列问题。直接导致系统不可用,解决办法参考下面章节,需要进入 recovery mode 进行权限修复。
解决步骤
首先,重启电脑,连续点按 ESC 进入系统选择菜单:
按照下图选择 recovery mode:
在下面的图片中,选择 root 一行,回车进入:
此处,输入 root 用户密码,登陆系统:
下图可以看到,已经正常登陆到系统中了,此时我们执行一下权限变更命令,当然这个命令执行并不会将权限恢复到原来,后面系统可以登录后,遇到问题可以再慢慢的恢复:
执行的命令如下:
chmod -Rf 755 /
chmod -Rf 777 /tmp
chmod -Rf 700 /root
chmod -Rf 555 /sys
此时,再重启系统,就可以使用 root 用户进行登陆了,权限打开可以登陆系统,可以松一口气了。
如果有远程需求(ssh)该如何修复访问?
如果你有一些远程登录的需求,比如需要通过 ssh 远程连接(一些堡垒机通过 ssh 协议登陆),就需要单独针对性修改 ssh 文件夹的权限。操作步骤分两步,这里简要介绍一下:
- 首先使用 root 用户登陆到系统中,查看 sshd 服务状态,例如在 ubuntu 系统中,执行
service sshd.service status
此时,通常可以看到 sshd 服务已经异常了,报错信息显示的就是密钥文件权限问题; - 然后我们可以打开一个类似的 linux 系统,查看其 /etc/ssh 文件夹下的所有文件权限,并在损坏的系统上一一修复即可。
非 root 用户 sudo 权限失效如何解决?
该问题出现的表现为出现如下报错:
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
解决办法操作步骤如下:
# 登陆 root 用户,执行如下命令
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
通常情况下,执行完成后 sudo 问题解决,可以登陆 sudo 用户执行尝试。
End~