local accountのpassword hashとaging fieldを一般userから直接読めないようにする。
標準的なshadow password構成を選ぶ。
適切な構成はどれか。
/etc/shadowはpassword hashとaging dataを保持するため、root等の必要な主体だけが読めるpermission・ownershipにする。
詳細解説
passwdはUID、home、shell等を参照するため通常全userが読める。
誤り。passwdのmetadataは多くのprogramがaccount lookupに使うため、hashを分離した上で通常read可能にする。
hashを公開account情報から分離して読取を制限する。
正しい。shadowのhashをroot等へ限定し、一般userによるoffline attack材料の取得を防ぐ。
offline password crackingの材料を全userへ公開する。
誤り。world-readableなshadowはhashを全local userへ公開し、shadow passwordの保護目的を失う。
services fileはservice名とportのdatabaseでcredential保存先ではない。
誤り。servicesはnetwork service/port対応用で、credential dataの保存先ではない。
実際に確かめる
一時的な検証環境で実行できる例です。
printf '%s
' '/etc/passwd=public account metadata' '/etc/shadow=restricted hashes and aging'期待される結果
/etc/passwd=public account metadata
/etc/shadow=restricted hashes and aging理解のポイント
- hashを非公開にする
- passwdはaccount lookupに必要
- shadow permissionを監査
確認時の注意
- 確認環境: file役割対応表
基礎のおさらい
permission監査
ownershipとmodeだけでなくACL、backup、core dump等からhashが漏れていないかも考える。
hash自体の防御
非公開化に加え、適切なpassword hashing algorithmとcost、強固なpassword policyを使う。