chmod -R 777抢救全过程记录
背景
在两台Ubuntu 20.04的服务器上错误执行了chmod -R 777 /
命令,结果非常酸爽,sudo权限失效,而且ssh也没有用了。在经过了10多个小时的踩坑以后最后在不重装系统的情况下解决了问题,以下记录只记录正确的步骤,照做即可。
参考资料:
https://blog.csdn.net/chrisy521/article/details/128796439
步骤1-找到服务器物理机并物理连接,进入root模式
ssh不能用了,就必须物理连接服务器了,如果无法物理连接,本教程无法解决问题。
作为Ubuntu的机器,只需要在开机过程中不断地点按ESC
即可进入GRUB界面,很可能因为按得太快错过了那个界面,直接到了GRUB的命令行,不急,可以输入normal
回车并马上点按ESC
,即可进入以下界面:
选择Advanced options for Ubuntu
,然后选择第一次带recovery mode
字样的进入恢复模式
然后只需要在后续的界面选择root
回车
就可以在界面最下方看到root登录的命令行terminal了
步骤2-手动授权修复基本权限结构
执行以下命令:
chmod -Rf 755 /
chmod -Rf 777 /tmp
chmod -Rf 700 /root
chmod -Rf 555 /sys
# 对于需要给其他用户sudo权限的还需要执行以下命令
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
重启服务器,这时候可以测试一下sudo权限是否正常,如果报错说什么文件夹必须只能被root writable,那就把那些文件夹的权限通过chmod 755都改过来即可。
步骤3-恢复ssh权限
ssh的正常登录要求ssh一些文件不是world writable。这时候解决方案如下:
找到你的一个ssh正常的机子,通过ls -l /etc/ssh
检查正确的权限结构,为了防止你没有ssh正常的机器,我提供一下我机器的权限结构,其中那两个myold尾缀的是我之前的备份,大家可以不管:
也就是说你需执行以下指令:
cd /etc/ssh
chmod 644 moduli ssh_config sshd_config ssh_host_dsa_key.pub ssh_host_ecdsa_key.pub ssh_host_ed25519_key.pub ssh_host_rsa_key.pub
chmod 600 ssh_host_dsa_key ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key
然后执行reboot
命令重启,这时候应该能够ssh,也能够sudo了,服务器恢复正常使用,大功告成。
步骤4-少数情况出现网络不能正常使用了
我有一台服务器网络还需要重新配置了,发现ping www.baidu.com
都配不同。网络配置的方法很简单,按照上面的教程进入恢复模式,csdn查找你对应系统版本的网络IP, DNS的配置方法,我发现不同系统版本是不一样的,之前用Ubuntu 16.04在我Ubuntu 20.04尝试,怎么也不行。现在提供Ubuntu 20.04的配置方案如下:
修改vim /etc/netplan/01-network-manager-all.yaml
文件,01-network-manager-all.yaml
在不同机器上可能有不同的名字,并修改内容如下:
network:
version: 2
renderer: NetworkManager
ethernets:
eno2:
dhcp4: no
addresses: [192.168.1.100/24]
optional: true
gateway4: 192.168.1.1
nameservers:
addresses: [223.5.5.5,223.6.6.6]
~
其中eno2是我的网卡的名字,可以通过ifconfig
查看,可能是enoxxx
其他编号,也可能是ensxxx
,根据具体情况而定。addresses那配置的就是[IP/CIDR]
,CIDR
为24对应的子网掩码是255.255.255.0,有的单位可能是255.255.254.0
,这个CIDR就是23,具体可以去这个博客查:https://www.forease.net/docs/handbook/appendix-netmask.html。gateway4就是网关,nameservers下面的就是域名服务器,需要问网管要。
这个文件配置好以后执行以下命令
netplan apply # 应用配置
/etc/init.d/network-manager restart # 重启网络服务
大功告成!如果还不行,建议卸载重装openssh,教程可见(https://blog.csdn.net/zj850324/article/details/124977925)