查找权限低于 750 的文件的脚本?

查找权限低于 750 的文件的脚本?

我需要编写一个 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

相关内容