记一次阿里云服务器ECS误执行chmod -R 777 /的快速恢复方案

  • A+
所属分类:云服务器ECS教程
阿里云代金券

今日收到老大的电话,说公司一个新人在刚部署的一台阿里云业务服务器上误执行了chmod -R 777 /的命令,导致现在服务器无法远程。想知道是否还有办法恢复,如果不行,只能初始化系统,让新人重新部署了(业务不复杂,就是东西比较多,上传比较费时)。

我第一个想法就是通过阿里云管理终端进入单用户救援模式,然后恢复SSH涉及的目录,文件的权限,让公司可以远程;然后通过在阿里云上新创建一台相同配置,相同系统的ECS来恢复其他目录的权限;最后,我们手动恢复自己创建的目录的权限。整体救援过程如下:

创建快照,万一整坏了系统还可以恢复回来

打开阿里云服务器管理终端,尝试进入系统

在保证账号,密码完全正确的情况下,通过管理终端无法进入;说明系统内ssh服务已经崩溃。通过管理终端直接进入系统恢复权限的思路已经不行了。

通过阿里云服务器控制台重启服务器,在管理终端尝试进入单用户救援模式

然而通过阿里云控制台重启ECS的话,在管理终端有15S的不可用时间,导致我们可以操作管理终端时,已经跳过了救援模式入口了。真是坑啊,不知道阿里云怎么想的!!(不过,这个Bug可以通过修改系统等待时间来绕过,当然这都是后话了,系统都进不去,修改系统等待时间当然是废话。在业务恢复后,我把阿里云上所有的云服务器ECS的系统等待时间都修改为了30S,具体修改方法你可以到这里看)

当可以操作管理终端时,基本已经这样子了

到这里,我基本上已经无计可施了,万般无奈之下,只能向阿里云发工单求助。

发工单要求阿里云协助进入单用户救援模式

工单处理完毕后,阿里云已经帮我恢复了ssh崩溃的问题,公司那边已经可以ssh连接了。登陆进去一看,果然都是777

工单处理期间需要授权阿里云连接我们的故障服务器,且提供账户信息。工单截图如下,大家以后遇到类似问题可以参考下。

应部分客户的要求,我把阿里云的修复代码也贴出来,方便大家拷贝执行。

  1. cd /etc
  2. chmod 644 passwd group shadow
  3. chmod 400 gshadow
  4. cd ssh
  5. chmod  600  moduli  ssh_host_dsa_key ssh_host_key ssh_host_rsa_key ssh_host_ecdsa_key
  6. chmod  644 ssh_config ssh_host_dsa_key.pub ssh_host_key.pub ssh_host_rsa_key.pub ssh_host_ecdsa_key.pub
  7. chmod  640 sshd_config
  8. chmod  711 /var/empty/sshd
  9. service network start
  10. service sshd start       --执行完以上代码后,虽然系统在救援模式下,但已经可以通过SSH连接了。

SSH问题已经解决接下来的事情就简单了。

创建同配置的按量付费云服务器ECS

选择按量付费的机器,我们只是想要导出下目录权限,用完就释放的。

恢复根目录权限

到这一步,阿里云有官方的文档,我下面写的比较简单;跟不上速度的,可以看阿里云的官方文档,他们写的比较详细。

在临时服务器上执行以下代码

  1. getfacl -R / > ./linux.chmod.bak

将临时服务器上获取的linux.chmod.bak文件拷贝到故障机上,然后执行以下代码恢复(最好将文件放在根目录下恢复)

  1. setfacl --restore=/linux.chmod.bak

恢复自建目录及文件的权限,并重启

我们一般给目录755权限,文件644权限

  1. chmod  755 /data
  2. find /data -type d -exec chmod 755 {} \;
  3. find /data -type f -exec chmod 644 {} \;
  4. reboot

恢复成功

最后,吐槽下阿里云的管理终端,既然是专用于故障救援的,就不应该有所保留。本来30分钟就可以完成的事情,硬是给我拖成了4个小时。

全民云计算
RDS承担一切风险

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: