/etc/shadow 【シャドウファイル】 /etc/master.passwd
概要
/etc/shadow(シャドウファイル)とは、LinuxなどのUNIX系OSで、各ユーザーのパスワードを安全に格納するために設けられた設定ファイル。管理者しかアクセスできず、「/etc/passwd」ファイルからパスワード情報のみを引き抜いて構成されている。初期のUNIX系OSではユーザーの設定情報などを「/etc/passwd」ファイルに保管していたが、このファイルはどのユーザーの権限でも読み込みが可能なため、ハッシュ化されたパスワード情報を盗み見てパスワードの復元を試みる攻撃手法が問題となった。
そこで、このファイルからパスワード情報のみを引き抜いて、管理者しかアクセス権のないファイルに移したのがシャドウファイルである。Linuxなどでは「/etc/shadow」だが、BSD系システムなどでは「/etc/master.passwd」が用いられる。
書式はpasswdファイルと似ており、1ユーザーにつき1行、各項目を「:」(コロン)で区切って記載する。先頭からユーザー名、ハッシュ化されたパスワード、最終更新日、次回変更可能になるまでの日数、有効期限(過ぎると変更必須)、期限切れの警告日(期限何日前に警告するか)、無効化までの連続非ログイン日数、アカウント失効までの連続非ログイン日数、フラグとなっている。不要な項目は記載しなくて良い(::で空文字列とする)。
パスワードの記録形式
パスワード欄(第2項目)は「$ハッシュ関数$ソルト$ハッシュ値」という書式になっており、ハッシュ関数の欄はハッシュ化に用いる計算方式を数字で指定する。値と方式の対応関係はシステムによるが、「1」がMD5、「2」または「2a」がBlowfish、「5」がSHA-256、「6」がSHA-512となっていることが多い。
ソルト(salt)はハッシュ関数にパスワードと連結して与えるためのランダムな文字列で、パスワードの登録・更新時にシステムが自動生成して付与する。同じパスワードでもソルトが異なると得られるハッシュ値が変わるため、より解読されにくくする効果がある。
パスワード欄は未設定の場合は「*」に、アカウントがロックされている場合は先頭が「!!」となる。パスワードがシャドウ化されている場合は元のpasswdファイルのパスワード欄(第2項目)に「x」などと記載されるようになる。