UNIX/Linuxの部屋 設定ファイル:/etc/passwd

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




設定ファイル /etc/passwd パスワードファイル このエントリーをはてなブックマークに追加

一般ユーザが見ることのできるパスワードファイル。例えば
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 フィールド (本名を記録するフィールド) も見えなくなる。