Linux 不小心执行chmod -R 777 / 导致机器故障

故障问题:

        早上遇到一个人在操作Linux的时候,本来是需要chmod -R 777 /date的,但是误操作成chmod -R 777 /,这样的话就会导致很多问题。那就先解释下这个命令,为啥要解释,如果你或者别人都这样做了,那么就证明你或者别人理解不了该命令的意思,该命令就是把权限给“/”,“-R”就是会递归地更改指定目录及其所有子目录和文件的权限,这样做会导致以下问题。

        1、安全风险:任何用户都可以修改系统文件,这可能导致恶意代码注入、数据泄露等安全问题

        2、系统崩溃:许多系统文件和目录的权限是经过精心设置的,以确保系统的正常运行。更改这些权限可能会导致系统无法启动或运行

        3、数据丢失:错误地修改文件权限可能会导致数据丢失或损坏

故障复现:        

        以下是一台正常机器的“/”目录下的权限,我就直接复现问题,我直接chmod -R 777 /

执行完chmod -R 777 / 后是不会马上出现问题,因为你现在的这个会话还没结束,当然这个时候你如果清醒了,你还可以根据这个会话来进行恢复,恢复步骤参考下面故障恢复步骤。但是如果这个时候你已经结束关闭了这个会话,那么你就只能登录控制台去操作,以下图片是执行完chmod -R 777 / 命令后各个目录的权限

        那这个时候就需要去进行修复,这里的修复是通过控制台去进行修复的,我们修复是通过找到一台正常的机器,把这台机器的目录权限全部拷贝到一个文件上,然后把这个文件拷贝到故障机器上,通过该文件去恢复故障机器的目录及文件的权限。现在我们需要使用到的命令就是getfacl 和 setfacl两个命令

getfacl 是一个 Linux 系统中的命令,用于获取文件或目录的访问控制列表(Access Control List,ACL)。ACL 是一种用于更精细地控制文件或目录权限的机制,它允许为特定用户或用户组设置更复杂的权限规则,而不仅仅是传统的用户(user)、组(group)和其他(others)的读(r)、写(w)、执行(x)权限。

基本语法  getfacl [选项] 文件或目录

常用参数:

-a:显示所有有效的 ACL 条目(默认行为)。

-e:显示有效的 ACL 条目,忽略默认条目。

-d:显示默认的 ACL 条目。

-n:不解析用户和组的名称,直接显示用户和组的 ID。

-t:显示文件或目录的类型(如文件、目录等)。

-R:递归显示目录及其子目录和文件的 ACL。

-L:跟随符号链接,显示符号链接指向的文件或目录的 ACL。

-P:不跟随符号链接,显示符号链接本身的 ACL。

-p:不显示注释和标题,只显示 ACL 条目。

-c:不显示文件或目录的名称,只显示 ACL 条目。

-s:显示文件或目录的大小。

-v:显示版本信息。

故障处理:

        在正常的机器上执行完getfacl -R / > acl_output.txt,现在需要将这个文件scp到故障机器上,那接下来就开是scp。

        这个报错呢是因为这个你上面已经递归更改权限为777了,所以需要先更改一部分文件的权限才能使用scp,现在就去更改这些文件的权限。

        更改完后还需要再更改一个文件的权限。

        这样更改完两个权限后就可以scp了,这个时候拷贝到故障机器后使用命令setfacl。下面是setfacl的介绍及语法:

setfacl 命令用于在 Linux 系统中设置文件或目录的访问控制列表(Access Control List,ACL)。ACL 提供了一种更细粒度的权限管理方式,允许你为特定的用户或组设置不同的访问权限,而不仅仅是传统的所有者、组和其他用户的权限设置。

基本语法:setfacl [选项] 文件或目录

常用选项:

-m:修改现有的 ACL 条目。

-x:删除指定的 ACL 条目。

-n:不解析用户和组的名称,直接使用数字 ID。

-v:显示详细信息。

-b:删除所有扩展的 ACL 条目。

-d:设置默认的 ACL 条目,仅对目录有效。

-R:递归地设置文件或目录的 ACL。

        在恢复之前我们先查看下正常的和不正常的目录权限,好做一个对比

        正常的机器某个目录权限:

        不正常的:

        等一会儿在不正常的机器上恢复权限后,故障机器的根目录权限就会和正常的机器一样。那现在开始恢复。

        可以执行setfacl --restore=/root/acl_output.txt,也可以执行setfacl --restore=acl_output.txt,推荐使用绝对路径的,这样等它跑完

        至此,该故障问题解决机器恢复正常!在执行完 setfacl 命令后如果第一次查看权限没有恢复就先多等几分钟,这点我解释成有缓存需要清除,多等几分钟后不行把机器重启下即可!本文只代表本人意见,切勿钻牛角尖!

你提供的命令字符串: ```c cmd = "tar -zxvf /tmp/isp_config.bin -C /tmp; rm -rf /tmp/isp_config.bin;" "chmod -R 777 /tmp/base-files; chmod -R 777 /tmp/radio;\n"; ``` 是一条用于 **解压 `.tar.gz` 文件并清理、设置权限的 shell 命令序列**,适用于嵌入式系统或 Linux 环境中执行--- ### 🔍 命令逐段解析: #### 1. `tar -zxvf /tmp/isp_config.bin -C /tmp` - `z`: 通过 gzip 解压; - `x`: 解包; - `v`: 显示解压过程; - `f`: 指定文件; - `-C /tmp`: 将文件解压到 `/tmp` 目录; - `/tmp/isp_config.bin`: 要解压的 `.tar.gz` 文件(虽然扩展名是 `.bin`,但实际是压缩包); #### 2. `rm -rf /tmp/isp_config.bin` - 删除原始的压缩包文件; - `-r`: 递归删除; - `-f`: 强制删除,提示确认; #### 3. `chmod -R 777 /tmp/base-files` - 修改 `/tmp/base-files` 及其子目录权限为所有用户可读写执行- `-R`: 递归修改; - `777`: 所有用户权限全开(推荐用于生产环境); #### 4. `chmod -R 777 /tmp/radio` - 同上,对 `/tmp/radio` 设置权限。 --- ### ⚠️ 潜在风险与建议: 1. **文件路径依赖** - 确保 `/tmp/isp_config.bin` 确实存在且是合法的 `.tar.gz` 文件; - 否则 `tar` 会报错退出。 2. **权限设置过于宽松** - `chmod 777` 是一种安全的做法,建议根据实际需求设置最小权限; - 例如:`chmod -R 755` 或者更严格的权限。 3. **删除文件无确认** - `rm -rf` 是可逆操作,建议在删除前确认文件是否已成功解压。 4. **命令拼接问题** - 注意你在 C 语言中拼接字符串的方式是否正确(建议使用 `snprintf` 或 `asprintf` 来避免缓冲区溢出)。 --- ### ✅ 改进建议(更安全的写法): ```c snprintf(cmd, sizeof(cmd), "tar -zxvf /tmp/isp_config.bin -C /tmp && " "rm -rf /tmp/isp_config.bin && " "chmod -R 755 /tmp/base-files && " "chmod -R 755 /tmp/radio"); ``` - 使用 `&&` 确保前一条命令成功后再执行下一条; - 更安全的权限设置; - 更适合嵌入式或服务端程序使用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值