750より低い権限を持つファイルを見つけるスクリプト?

750より低い権限を持つファイルを見つけるスクリプト?

ユーザーのホームディレクトリにあるすべてのファイルを確認し、750未満の権限を持つファイルが見つかった場合、結果は1になるSTIGルールを作成する必要があります。

これが私がこれまでにしたことです。

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.. はすべて失敗する必要があります。私のスクリプトはこれらすべてを捉えません。

言う:ホームディレクトリ内のすべてのファイルに「その他」属性がないことを確認する必要があります。 「other」にr、w、またはxがある場合は失敗する必要があります。また、「グループ」にはwが含まれない限り。 「グループ」が書き込んだファイル、または「その他」が読み書きしたり、実行したファイルが見つからない限り、パスしなければなりません。これが見つかると失敗します。

ルートが所有しているファイルを除外するように変更することもできれば役立ちます。

答え1

750以下のライセンスが見つかった場合

許可ビットがある場合0750に対応しますrwxr-x---。 「その他」グループにビットが設定されているすべては(デフォルトでは定義に従って)より緩いです。繰り返しますが、同様のことは0700あまり許容できません(グループへのアクセスを提供しません)。

しかし、0644/のようなものは、rw-r--r--「他人」への読み取りアクセスを許可しますが、誰にも実行アクセスを許可しないため、ある程度許可されます。

明確にするには、ホームディレクトリ内のすべてのファイルに「その他」属性がないことを確認する必要があります。

もちろん、上記の定義とは異なります。ただし、特定の権限ビットセットを持つファイルを検索する方が簡単なので、特定の権限ビットセットのサブセットのみを持つファイルを検索する代わりに検索を実行します。

条件付きGNU findがあるとします。これは「すべての許可ビット」を意味します。-perm /modeモデルファイルに設定します。 「(よりマニュアルページ)。したがって、find -type f -perm /027任意のビットが設定されている一般的なファイルを見つけることができます----w-rwx。たとえば、FreeBSDの同様の条件付き検索は-perm +027マニュアルページ)。

したがって、次の方向に行くこともできます。

x=$(find "$dir" -type f -perm /027 -print -quit)
if [ "$x" != "" ]; then
    echo "some files were found"
fi

関連情報