PASSWD(5)

名称
passwd, master.passwd - パスワードファイルのフォーマット

解説
passwd ファイルは、ローカルに保持しているパスワード情報の情報源です。 これらは Hesiod ドメインにおける ‘passwd’ と ‘uid’ や、 NIS マップの ‘passwd.byname’, ‘passwd.byuid’, ‘master.passwd.byname’, ‘master.passwd.byuid’ と共に使用され、 nsswitch.conf(5) によって制御されます。

一貫性を保つため、これらのファイルはどれも手で変更を加えるべきではありません。

master.passwd ファイルは root からのみ読み取り可能で、改行で区切られたレコードから成ります。 ユーザごとに 1 レコードが対応し、コロン (``:'') で区切られた 10 個のフィールドが含まれます。 これらのフィールドは以下の通りです:

name
    ユーザのログイン名。

password
    ユーザの 暗号化された パスワード。

uid ユーザの ID。

gid ユーザのログイングループ ID。

class
    ユーザのログインクラス。

change
    パスワードの変更時間。

expire
    アカウントの有効期限。

gecos
    ユーザについての一般的な情報。

home_dir
    ユーザのホームディレクトリ。

shell
    ユーザのログインシェル。

passwd ファイルは、 pwd_mkdb(8) によって master.passwd ファイルから生成されます。 その際に、class, change そして expire フィールドは削除され、 password フィールドは ``*'' に置換されます。

name フィールドはコンピュータアカウントにアクセスするのに用いられるログインであり、 uid フィールドはそれに結び付けられた数字です。 これらはファイルアクセスを制御するので、両方共そのシステム (また、しばしば 1 まとまりの複数のシステム) の中で一意であるべきです。

同じログイン名や同じユーザ ID のエントリを複数持つことは可能ですが、 普通それは誤りです。 これらのファイルを取り扱うルーチンは、しばしばその複数エントリの 1 つだけを返しますし、それはランダムな選択によるものです。

ログイン名は決してハイフン (``-'') で始めてはいけません。 また、メーラを混乱させやすいので、大文字やドット (``.'') も 名前の一部にしないことを強く推奨します。 歴史的にユーザデータベース中でフィールドを区切るのに使われてきたため、 どのフィールドもコロン (``:'') を含んではなりません。

password フィールドはパスワードの 暗号化された 形です。 crypt(3) を参照してください。 password フィールドが空の場合、マシンへのアクセスにはパスワードを要求されません。 このようにすることは、ほとんど常に誤りです。 これらのファイルは暗号化されたユーザパスワードを含んでいるので、 適切な権限の無い人から読み取り可能にしておくべきではないでしょう。

group フィールドは、ユーザがログインした際に位置付けられるグループです。 このシステムではマルチグループ (groups(1) 参照) をサポートしているので、 このフィールドにはほとんど特別な意味はありません。

class フィールドは、ユーザのログインクラスに対するキーです。 ログインクラスは login.conf(5) の中で定義されます。 login.conf(5) は、ユーザの属性、アカウンティング、リソース、環境設定に関する termcap(5) 形式のデータベースです。

change フィールドは UTC における基準時点からの秒数を表したものであり、 この時までにアカウントに対するパスワードを変更する必要があります。 パスワードの時限機能をなくすには、このフィールドを空にしておきます。

expire フィールドは UTC における基準時点からの秒数を表したものであり、 その時にアカウントが失効します。 アカウントの時限機能をなくすには、このフィールドを空にしておきます。

gecos フィールドは、コンマ (``,'') で区切られた以下のようなサブフィールドを 通常含んでいます:

name
    ユーザのフルネーム
office
    ユーザのオフィス番号
wphone
    ユーザの職場の電話番号
hphone
    ユーザの自宅の電話番号

フルネームはアンパサンド (``&'') を含むことができます。 これは、gecos フィールドが表示される時や、 finger(1), sendmail(8) などの様々なプログラムで使用される時に、 キャピタライズは先頭の一文字を大文字にする (訳注: Charlie Root みたいに) ので、ログイン名の先頭一文字を大文字にしたものに置換されます。

オフィスと電話番号フィールドは finger(1) によって使われていますし、 その他のアプリケーションでもおそらく使われています。

ユーザのホームディレクトリは、ログインした時にユーザが置かれる完全な UNIX パス名です。

shell フィールドは、ユーザの好みのコマンドインタプリタです。 shell フィールドになにも無ければ Bourne シェル (/bin/sh) が指定されたものと解釈します。

HESIOD サポート
nsswitch.conf(5) に ‘passwd’ データベースとして ‘dns’ が指定されていた場合、 passwd 検索は ‘passwd’ Hesiod ドメインから開始されます。

NIS サポート
nsswitch.conf(5) に ‘passwd’ データベースとして ‘nis’ が指定されていた場合、 passwd 検索は ‘passwd.byname’, ‘passwd.byuid’, ‘master.passwd.byname’ そして ‘master.passwd.byuid’ NIS マップから開始されます。

COMPAT サポート
nsswitch.conf(5) に ‘passwd’ データベースとして ‘compat’ が指定されており、 ‘passwd_compat’ データベースとして ‘dns’ か ‘nis’ のどちらかが指定されていた場合、 passwd ファイルは、ユーザ名とネットグループに基づいた、 ‘+/-’ による標準的な排除と取り込み機能もサポートします。

``-'' (マイナス符号)によって開始された行は、 それ以降の ``+'' (プラス符号) によってマークされた取り込みからは排除されます。

行の 2 番目の文字が ``@'' (単価記号) の場合、 その操作は name フィールドの残りの文字列で指定されるネットグループ中の すべてのエントリに対して行われます。 そうでない場合、 name フィールドの残りの部分はユーザ名を指定するものと解釈されます。

``+'' トークンは、 name フィールドに単独で現れても構いません。 この場合、Hesiod ドメイン passwd (‘passwd_compat: dns’ を指定した時)、もしくは ‘passwd.byname’ と ‘passwd.byuid’ NIS マップ (‘passwd_compat: nis’ を指定した時) のどちらかから、すべてのユーザが取り込まれます。

エントリの uid や gid フィールドが空でない場合、Hesiod ドメインもしくは NIS マップから取り込まれた情報を、指定された数字で上書きします。 同様にして、 gecos, dir, shell フィールドにテキストが含まれている場合、Hesiod や NIS を介して取り込まれた情報をそのテキストで上書きします。 いくつかのシステムでは、 passwd フィールドも上書きできます。

関連ファイル
/etc/passwd
    パスワードを除いた ASCII パスワードファイル
/etc/pwd.db
    パスワードを除いた db(3) 形式のパスワードデータベース
/etc/master.passwd
    パスワードの入った ASCII パスワードファイル
/etc/spwd.db
    パスワードの入った db(3) 形式のパスワードデータベース

関連項目
chpass(1), login(1), passwd(1), crypt(3), getpwent(3), login.conf(5), netgroup(5), adduser(8), pw(8), pwd_mkdb(8), vipw(8), yp(8)

(O'Reilly & Associates)

バグ
ユーザ情報は他のどこかに入れるべき (そしていつかは入れる) でしょう。

ファイル中で ‘compat’ の排除を取り込みの後に行うことは、予期しない結果をもたらすでしょう。

互換性
パスワードファイル形式は 4.3BSD 以降で変更されました。 以下の awk スクリプトは、古いスタイルの パスワードファイルを新しいスタイルのパスワードファイルに 変換するのに利用できます。 “class”, “change”, “expire” フィールドが追加されましたが、デフォルトでは無効になっています。 現在 class は実装されていませんが、change と expire は実装されています。 これらを設定するには、基準時点から今日までの秒数に、 好きなだけオフセットを秒数にして加えたものを使用してください。

    BEGIN { FS = ":"}
    { print $1 ":" $2 ":" $3 ":" $4 "::0:0:" $5 ":" $6 ":" $7 }

歴史
passwd ファイルは AT&T UNIX で登場しました。

NIS passwd ファイル形式は、SunOS ではじめて登場しました。

Hesiod サポートは、 FreeBSD 4.1 ではじめて登場しました。 これは NetBSD プロジェクトから取り込まれました。 こちらでは、 NetBSD 1.4 ではじめて登場しました。