1.10.1標準
/usr/local/bin配下の通常ファイルから、SUIDまたはSGIDの少なくとも一方が設定されたものをGNU findで一覧する。
ファイルのほかのpermission bitは問わない。
適切なコマンドはどれか。
× 不正解
GNU findの-perm /6000は、SUID 4000またはSGID 2000の少なくとも一方を持つファイルへ一致する。
詳細解説
正しい
find /usr/local/bin -type f -perm /6000/MODEは指定bitのいずれかが立つファイルに一致する。
/6000は4000か2000の少なくとも一方へ一致し、通常permissionの値は問わない。
誤り
find /usr/local/bin -type f -perm -6000-MODEは指定したSUIDとSGIDの両方が立つことを要求する。
-6000はSUIDとSGIDの両方を要求するため、片方だけのfileを取りこぼす。
誤り
find /usr/local/bin -type f -perm 6000MODEだけではpermission全体が6000に完全一致するものへ限定される。
6000の完全一致ではexecuteやread bitを持つ一般的な実行fileが一致しない。
誤り
find /usr/local/bin -type f -perm /06000600はownerのread/write bitを表し、特殊permission bitではない。
/0600はowner read/writeの監査になり、SUID・SGIDを判定しない。
実際に確かめる
一時的な検証環境で実行できる例です。
tmp=$(mktemp -d); touch "$tmp/suid" "$tmp/sgid" "$tmp/plain"; chmod 4755 "$tmp/suid"; chmod 2755 "$tmp/sgid"; find "$tmp" -type f -perm /6000 -printf '%f
' | sort; rm -rf "$tmp"期待される結果
sgid
suid理解のポイント
- SUIDは4000
- SGIDは2000
- /MODEはどれかのbit
確認時の注意
- 確認環境: GNU findutils 4.9 / 一時ディレクトリ
基礎のおさらい
特殊permissionの監査
意図しない権限昇格を見つけるため、SUID・SGID fileを定期的に棚卸しする。
検索範囲
-xdevでfilesystemを限定するなど、目的に応じて擬似filesystemや別mountを除外する。
問題IDKL-102-1115
確認環境GNU findutils 4.9 / 一時ディレクトリ
最終技術確認2026-08-13
誤り・権利侵害を報告