如何备份和比较文件权限?

如何备份和比较文件权限?

有没有一种方法可以设置文件夹和目录的正确默认权限收据列表,该列表可以用作备份来比较正确的权限,并用于修复由系统或用户更改以及安装的软件引起的错误权限?

例如;您安装一些软件包,并将其自身安装到其中,/usr/lib/但它修改了文件夹或文件的权限,但使用这些文件和文件夹的权限备份列表,可以将其与该列表进行比较,并在需要时进行更正。

file1 is -rwxrwxrwx but should be -rwxr-xr-x
folder1 is drwxrwxrwx but should be drwx------

等等...并在脚本中使用备份列表来运行列表以及目录和文件夹的检查,并使用chown,chmod和更正它们setfacl

如何实现这一目标?如果可能,请举例说明如何实现这一目标。如果需要保留或设置特定权限以防止在不应该发生的地方进行修改或更改,这对于一般的 Linux 服务器甚至可能很有用,并且可能让它在每次重新启动或系统更新后自动运行,并有其列表在需要时自动将新列表添加到列表中,无需太多用户交互。

答案1

最简单的方法是使用 ACL 工具:

getfacl -R / > /path/to/perms/file.acl

备份权限(传统权限和 ACL)和所有权,以及

setfacl --restore=/path/to/perms/file.acl /

来恢复它们。

答案2

作为免责声明,在批量更改权限时请小心。如果脚本中存在更改权限的错误,那可能会很糟糕。

也就是说,考虑这个例子:

创建一个可以在其中进行实验的目录,然后更改为该目录:

mkdir /tmp/experiment
cd /tmp/experiment

在目录中创建一堆文件:

mkdir -p {a,b,c,d}/{e,f,g,h}/{i,j,k,l}
touch {a,b,c,d}/{m,n,o,p}
touch {a,b,c,d}/{e,f,g,h}/{q,r,s,t}
touch {a,b,c,d}/{e,f,g,h}/{i,j,k,l}/{u,v,w,x}

作为实验,给所有文件随机权限

for i in $(find . -type f); do
    chmod $(($RANDOM % 8))$(($RANDOM % 8))$(($RANDOM % 8)) $i
done

还授予目录随机权限,但保留所有者的权限:

for i in $(find . -type d); do
    chmod 7$(($RANDOM % 8))$(($RANDOM % 8)) $i
done

使用以下命令创建权限恢复脚本stat

find . | xargs stat --printf="chmod %a %n\n" > /tmp/perms.sh

注意输出格式:

head -n3 /tmp/perms.sh
chmod 715 .
chmod 700 ./b
chmod 250 ./b/n

现在删除权限:

find . | xargs chmod 777

您现在可以使用以下脚本恢复权限:

bash /tmp/perms.sh

要验证此操作是否有效,您可以像以前一样找到新权限,但将它们保存到不同的文件中:

find . | xargs stat --printf="chmod %a %n\n" > /tmp/perms.sh_new

然后比较两个文件并没有发现没有区别:

diff /tmp/perms.sh{,_new}

相关内容