如何恢复Linux文件系统权限
【约束与限制】
1、该文档适用于Linux系统;
2、该文档仅可以恢复getfacl中获取的文件权限,源和目的的差异部分需要单独恢复。
3、本文旨在恢复因操作错误导致根系统目录被递归修改后导致系统出现异常(系统无法启动、服务无法启动等)问题,以递归修改/etc目录权限为777为例,其他目录的恢复参考/etc目录恢复方法。
【关键字】
chmod,getfacl,setfacl
【问题场景】
ACL(Access Control List)是一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配rwx权限。
在Linux的使用中会遇到误操作修改目录权限,修改系统文件的权限会出现各种问题,系统服务无法启动,无法ssh登录等。单个文件的权限修改可以很快恢复,如果是递归修改(比如执行了 chmod –R 777 /etc)如何进行批量恢复?
Linux系统提供了getfacl可以获取文件的访问控制属性,包含文件名,属主,属组及访问控制(ACL)。同时setfacl可以实现设置文件的访问控制属性。这两个工具配合使用可以实现递归恢复文件权限。
【解决方案】
通过使用getfacl和setfacl恢复系统初始/etc目录权限(不包含后新增文件),使系统可以恢复正常运行。
1、从正常的服务器上获取/etc目录的正确权限:
# getfacl -pR /etc >/tmp/etc_acl_backup
注:
a.getfacl中-p为使用绝对路径,建议使用绝对路径;
b.-R为递归查询;
c.etc_acl_backup保存了/etc目录下所有文件的ACL配置。
2、将获取生成的etc_acl_backup拷贝到需要恢复的服务器上(scp或者挂盘拷贝)待恢复的服务器的/tmp目录下。
3、在需要恢复的系统上使用setfacl恢复:
# setfacl --restore=/tmp/etc_acl_backup
4、恢复源acl列表中不存在的文件,比如恢复httpd服务配置文件(/etc/httpd/conf/httpd.conf),正确的权限应该为644。
# chmod 0644 /etc/httpd/conf/httpd.conf
说明:
如果待恢复的系统重启后,sshd服务会因为秘钥文件权限过大导致无法启动导致无法拷贝acl备份文件,执行步骤2前需要先恢复sshd服务,恢复方法为:
1、登录控制台vnc,恢复ssh登陆依赖的文件权限,将/etc/ssh/*所有文件修改为644, 将ssh_host_dsa_key文件改为了600
# chmod 0644 /etc/ssh/*
# chmod 0600 /etc/ssh/ssh_host_dsa_key
# chmod 0600 /etc/securetty
2、重启sshd
# systemctl restart sshd
- 点赞
- 收藏
- 关注作者
评论(0)