记录一次chmod导致的服务器崩溃

IRIS Lv1

背景

笔者在用vscode ssh远程配置docker镜像源的时候尝试通过修改
/etc/docker/daemon.json
文件来添加镜像源,由于笔者没有进入root账户,在修改完毕后遇到了无写入权限的问题,于是笔者根据以往的经验尝试使用sudo chmod R 777 <path>来进行权限修改。由于笔者是linux小白,为了省事直接令path=/etc,即是执行了

sudo chmod R 777 /etc

这一下坏事了,/etc下存在许多重要文件,他们依赖于特定权限工作。
这个指令造成的影响包括但不限于:

  • SSH服务无法正常启动
  • sudo命令无法正常初始化
  • network瘫痪,外部无法ping通
  • DNS服务错误,甚至无法解析外部链接进行工具下载

连ssh都登不上了,问题似乎有些棘手。

尝试

笔者翻阅了stackoverflow,csdn等国内外论坛,发现主要的思路大体分为两种:

  1. 使用pkexec工具代替损坏的sudo进行权限设置。但是笔者的server上没有该工具也无法下载(见上文第四条影响)。而且受影响的目录和文件那么多,难道要一点点ls然后敲?总体来说大致的思路合理,但是槽点很多。笔者的解决方案大致采取了它的登录+权限修复模式,并结合实际进行改进。
  2. 准备一台正常的服务器,把此服务器的权限文件保存下来并传输到问题服务器上,问题服务器可以根据此文件重新设置权限。问题在于笔者没有多的服务器,而且毕竟是断了网的云服务器,不是物理机,如何传输也是问题。

解决方案

在网上查找了大量资料后,我将问题分解为两步.

stage1:VNC登录

VNC

VNC(Virtual Network Computing)登录是一种远程桌面访问技术,允许用户通过网络连接到另一台计算机的桌面环境,从而实现对远程计算机的控制和操作。

VNC登录root账号

与SSH协议不同,VNC是一种不安全的协议,对于权限没有特别高的要求就能执行。恰恰如此,这种远程登陆方案能够方便的在权限混乱的情况下使用。笔者使用的腾讯云服务器提供了VNC登录,我们可以通过重置密码功能设置root账户的密码,确认后点击登录,我们就以root的身份登录上机器了。
如图设置

stage2:遍历/etc恢复权限

接下来,我们可以采用find+chmod有条件的递归式恢复文件和目录至正常权限。废话不多说,命令如下:

1
find /etc -type d -exec chmod 775 {} \; && find /etc -type f -exec chmod 600 {} \;

作用是在/etc目录下递归的遍历所有文件和目录,并将文件的权限设置为600,将目录的权限设置为775。拷贝命令至命令行后回车即可。

输入命令后,笔者进行了ping, ssh等各种测试,最终判断服务器完全恢复正常。此方案应该也可用于恢复/etc以外的目录(如根目录/)的权限,不过笔者没有测试,不保证可行性,仅供参考。

收获

Permission is a dangerous toy

Using it carefully


学パロこいしちゃん@ののこ #piciv

  • Title: 记录一次chmod导致的服务器崩溃
  • Author: IRIS
  • Created at : 2025-02-22 22:58:35
  • Updated at : 2025-02-25 23:36:27
  • Link: https://www.irisnote.xyz/2025/02/22/记录一次chmod导致的服务器崩溃/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
记录一次chmod导致的服务器崩溃