故障问题:
早上遇到一个人在操作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 命令后如果第一次查看权限没有恢复就先多等几分钟,这点我解释成有缓存需要清除,多等几分钟后不行把机器重启下即可!本文只代表本人意见,切勿钻牛角尖!
2万+

被折叠的 条评论
为什么被折叠?



