如何恢复Linux文件系统权限

举报
云技术搬运工 发表于 2021/06/01 11:13:33 2021/06/01
【摘要】 1、该文档适用于Linux系统; 2、该文档仅可以恢复getfacl中获取的文件权限,源和目的的差异部分需要单独恢复。 3、本文旨在恢复因操作错误导致根系统目录被递归修改后导致系统出现异常(系统无法启动、服务无法启动等)问题,以递归修改/etc目录权限为777为例,其他目录的恢复参考/etc目录恢复方法。

【约束与限制】

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

7.png

注:

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

8.png

4、恢复源acl列表中不存在的文件,比如恢复httpd服务配置文件(/etc/httpd/conf/httpd.conf),正确的权限应该为644。

     # chmod 0644 /etc/httpd/conf/httpd.conf

9.png

说明:

如果待恢复的系统重启后,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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。