一般ユーザが見ることのできるパスワードファイル。例えば
user:*:1001:1001:Yamada Taro:/home/user:/usr/local/bin/tcsh
この行は、
- ユーザ名は user
- パスワードは秘密 (後述)
- ユーザ ID は 1001
- グループ ID は 1001
- 本名は Yamada Taro (GECOS フィールド)
- ホームディレクトリは /home/user
- ログインシェルは /usr/local/bin/tcsh
であることを示している。
パスワードファイルといっても、パスワードは書かれていない環境もある。昔は /etc/passwd に直接暗号化されたパスワードが入っていた。しかし、現在はコンピュータの高速化により、総当たりでパスワードを解読することも不可能ではなくなったので、暗号化されたパスワードを一般ユーザに公開するのは危険になってしまったわけである。
そこで、暗号化されたパスワードは別のファイルに記録して root 以外には見えないようにし、それ以外の情報を /etc/passwd に置いておくことになった。この仕組みをシャドウパスワードという。BSD 系 UNIX のシャドウパスワードファイルは /etc/master.passwd、一方 SystemV 系・ Linux 系 UNIX のシャドウパスワードファイルは /etc/shadow である。
FreeBSD・NetBSD・OpenBSD では、パスワードファイルは標準でシャドウ化されている。一方 Linux はディストリビューションによって違う (/etc/passwd に暗号化されたパスワードが書かれているものもある)。
まとめると、BSD 系ではパスワードに関して
- 一般ユーザが見ることができる /etc/passwd
- シャドウパスワード /etc/master.passwd
- 高速化のため、/etc/passwd を DB 化した /etc/pwd.db
- 高速化のため、/etc/master.passwd を DB 化した /etc/spwd.db
という4つのファイルがある。BSD 系では、エディタで直接 /etc/passwd や /etc/master.passwd を編集してはいけない。なぜなら、これらの4つのファイルの内容に不整合が生じるからである。編集する場合は、root なら vipw コマンド、一般ユーザなら chsh などを使うこと。さすれば4つのファイルを自動的に更新してくれる。
もしこれらのファイルを間違えていじってしまった場合は、pwd_mkdb コマンドで/etc/master.passwd が残っていれば、他の3つのファイルを作成できる。
一方、SystemV 系・Linux 系では、
- /etc/passwd のみ (シャドウ化されていない)
- /etc/passwd と /etc/shadow の2本立て (シャドウ化されている)
のどちらかである。こちらの方はエディタで直接 /etc/passwd・/etc/shadow を編集してよい (管理用コマンドがあるなら、もちろんそれを使ってもよい)。
ちなみに /etc/passwd は一般ユーザが見られるようにしないといけない。なぜなら、ファイル・ディレクトリの所有者・所有グループは、ユーザ名・グループ名でなく、UID・GID という番号で記録されているからである。つまり、/etc/passwd が一般ユーザから見えないと、ls -l を実行したときに所有者・所有グループを見ることができず、ただの数字 (UID・GID)しか表示されない。また、finger で特定ユーザの GECOS フィールド (本名を記録するフィールド) も見えなくなる。