vlambda博客
学习文章列表

CentOS7 所有文件被赋予777权限故障恢复

在Linux系统中,/是文件树的最高一级,所有文件都在/之下。文件的路径分为相对路径和绝对路径,假如file文件存放在/tmp目录,那么/tmp/file就是file文件的绝对路径,在任意位置都可以对绝对路径/tmp/file就行操作。假如当前处于/tmp目录,可以把/tmp/file简写成./file进行操作,点号“.”代表的是当前目录,./file就是相对路径。


CentOS7 所有文件被赋予777权限故障恢复

普通文件一般使用3组字符串来表示系统用户对文件的操作权限,每组有3个字符。3组字符串从左到右分别表示文件所有者、文件所属组用户、其他组用户对该文件的操作权限。读写执行权限在chmod命令修改权限的时候可用数字421来代替。假如给每组用户都具有读写执行权限的话可以执行chmod 777 file来设置。如果是当前目录下所有的文件chmod 777 -R ./* ,R的作用是递归,那么当前目录下所有的文件都被赋予777权限了。对于系统权限不是很了解的人会认为777已经是最高权限了,其实不然。举个例子,/usr/bin/su权限为4755,最前面的这个4表示其他用户执行文件时,具有与所有者相当的权限。当普通用户执行su命令时需要访问root用户才能访问的权限,但是su被修改为777之后,普通用户执行su命令就无法访问只有root才有权限访问的文件,所以su - root就会失败,无法正常切换。


如果当前处于/tmp路径,原计划修改/tmp下所有的文件权限为777,命令为chmod -R 777 ./*,结果误操作执行chmod 777 -R  /*,/前面的.上文已经介绍,写与不写结果完全不同。chmod 777 -R  /*命令执行后会刷很多权限不足的报错,意识到不对劲的时候应该快速执行Ctrl+c中断该命令。如果没有发现那么命令执行完成后几乎所有的文件权限变成777了。

CentOS7 所有文件被赋予777权限故障恢复


此时网络还可以ping通,但是新的ssh连接将会失败。通过显示器登录的话只能登录普通用户,普通用户登录后su切换root失败无法进行一些恢复操作。CentOS7 所有文件被赋予777权限故障恢复


恢复方案:

1.在同版本正常的系统上备份相关目录文件权限并保存在对应的文件;

getfacl -p -R /usr/ >/tmp/usr.txt

getfacl -p -R /boot/ >/tmp/boot.txt

getfacl -p -R /etc/ >/tmp/etc.txt

getfacl -p -R /home/ >/tmp/home.txt

getfacl -p -R /root/ >/tmp/root.txt

getfacl -p -R /var/ >/tmp/var.txt

getfacl -p -R /opt/ >/tmp/opt.txt

getfacl -p -R /sys/ >/tmp/sys.txt

2.进入单用户模式下进行恢复ssh服务和su命令,给root登录恢复做铺垫;

重启主机在该界面出现时按字母e进行编辑

CentOS7 所有文件被赋予777权限故障恢复

光标向下移动,修改ro为rw,行尾增加init=/bin/sh

CentOS7 所有文件被赋予777权限故障恢复

执行Ctrl+x进入单用户

CentOS7 所有文件被赋予777权限故障恢复

3.恢复/usr/bin/su权限为4755;

CentOS7 所有文件被赋予777权限故障恢复

4.从单用户模式切换到多用户模式并切换root用户;

exec  /sbin/init

CentOS7 所有文件被赋予777权限故障恢复

5.恢复ssh远程登录权限;

CentOS7 所有文件被赋予777权限故障恢复

6.上传步骤1备份的txt文件至本机/tmp目录;

7.文件权限恢复;

setfacl 命令需要在/目录下执行,cd /在执行以下命令进行恢复

setfacl --restore=/tmp/boot.txt

setfacl --restore=/tmp/etc.txt

setfacl --restore=/tmp/home.txt

setfacl --restore=/tmp/opt.txt

setfacl --restore=/tmp/usr.txt

setfacl --restore=/tmp/sys.txt

setfacl --restore=/tmp/var.txt

setfacl --restore=/tmp/root.txt

8.确认恢复后的权限;

两套系统的文件不可能完全一致,只能恢复备份主机和故障主机文件名相同的文件权限。