我需要编写一个 STIG 规则来检查用户主目录中的所有文件,如果发现任何文件的权限低于 750,则结果为 1。
这就是我到目前为止所做的。
egrep ":[0-9]{4}:" /etc/passwd | cut -d: -f6 |
while read line; do
if [ ! -e "${line}" ];then
exit 1
else
if [ `stat -c "%a" "${line}"` -gt 750 ];then
exit 1
fi
fi
done
但是,当权限是诸如 557 之类的数字时,这不起作用。至少以我的技能水平,我想不出一种方法来让它发挥作用。
我如何检查主目录中的所有文件,并在发现权限低于 750 的文件时返回 1?
示例:751,757, 551, 501, 001, 770, 570.. 都应该失败。我的脚本没有捕获所有这些。
澄清:我需要确保主目录中的所有文件都没有任何“其他”属性。如果他们在“其他”中有 ethier r、w 或 x,则它需要失败。另外,在“组”中,只要不包含w即可。只要它找不到“组”已写入或“其他”已读取、写入或执行的任何文件,那么它应该通过。如果它找到这些,它就会失败。
如果我也可以修改它,以便排除 root 拥有的文件,那会很有帮助
答案1
如果发现任何低于 750 的许可
如果权限位为0750
,则对应于rwxr-x---
。任何在“其他”组中设置位的东西(基本上根据定义)都是更宽松的。同样,类似的东西0700
不太宽松(它不提供对该组的任何访问权限)。
然而,像0644
/这样的东西rw-r--r--
会或多或少地被允许,因为它允许对“其他人”进行读取访问,但不允许对任何人进行执行访问。
澄清一下:我需要确保主目录中的所有文件都没有任何“其他”属性。
当然,这与上面的定义不同。但搜索设置了某些权限位的文件也更容易,因此让我们这样做,而不是查找仅具有某些权限位集的子集的文件。
假设你有 GNU find,有条件,这意味着“任何权限位-perm /mode
模式为文件设置。”(参见手册页)。因此find -type f -perm /027
会找到任何设置了任何位的常规文件----w-rwx
。例如 FreeBSD 中的类似条件 find 是-perm +027
(手册页)。
所以,也许朝这个方向发展:
x=$(find "$dir" -type f -perm /027 -print -quit)
if [ "$x" != "" ]; then
echo "some files were found"
fi