gpt4 book ai didi

linux - 如何检查权限是否不超过多个文件中的特定级别?

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:48 25 4
gpt4 key购买 nike

我想确保/etc/file1 和/etc/file2 不比 644 更允许。我试过了

if [[ `stat /etc/file1 --format=%a | cut -b 1` -le "6" -a `stat /etc/file2 --format=%a|cut -b 1` -le 6 ]]; then echo "good"; else echo "bad"; fi;

但我得到“bash:条件表达式中的语法错误bash: `-a' 附近的语法错误"

我的计划是将上面的内容重复三次(每个字节的权限一次)。

我也不确定这两个测试是否正常工作,因为我无法让它们在测试之外运行。

最佳答案

我假设“更宽松”是指 file1 或 file2 拥有超过 644 的任何额外权限。

一些例子是:

  • 664 更宽松,因为“组”现在可以写入文件。
  • 700 比 644 更宽松,因为即使“组”和“其他”的权限较少,“所有者”的权限更多
  • 640 不太宽松,因为“其他”不能再阅读,以前可以阅读

这基本上意味着与 644 相比,在 file1 或 file2 中至少设置了一个额外的位。因此,如果您 AND 644 和 file1 权限,结果是两者共有的位。

假设 file1 是 640。644 AND 640 的结果是 640。因为结果与 file1 的权限相同,所以您知道 file1 的权限至少是 644 的子集。

假设 file2 是 700。644 AND 700 将得到 600。600 与 700 不同,因此必须在 file2 中设置 644 没有的位(即不同的权限)。

#!/bin/bash

BASEPERM=644

for FILE in /etc/file1 /etc/file2; do
COMPARISON=$(stat -c '%a' "$FILE")
RESULT=$(printf '%o' $((8#$BASEPERM & 8#$COMPARISON))) # AND the permissions
if [[ $RESULT -eq $COMPARISON ]]; then # If the result is the same as the file's permissions...
echo "Not more permissive" # ...then you know the file has no more permissions than the base permission
else
echo "More permissive"
fi
done

关于linux - 如何检查权限是否不超过多个文件中的特定级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24663158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com