PWD_MKDB(8)

名称
pwd_mkdb - パスワードデータベースを構築する

書式
pwd_mkdb [-C] [-N] [-p] [-d directory] [-s cachesize] [-u username] file

解説
pwd_mkdb は、指定されたファイルから db(3) スタイルの、セキュリティのしっかりしたデータベースと そうでないデータベースの 2 つを構築します。 そして、これらのデータベースは、それぞれ /etc/spwd.db と /etc/pwd.db にインストールされます。 このファイルは、 /etc/master.passwd にインストールされます。このファイルは 正しいフォーマットでなければなりません ( passwd(5) を参照)。このシステムで使われるフォーマットは、旧来の バージョン 7 スタイルのフォーマットとは異なるので注意を要します。

オプションは以下の通りです。

-C  パスワードファイルが正しいフォーマットかどうかをチェックします。 どのファイルも変更、追加、削除を行ないません。

-N  ファイルに対するロックを取得できない場合にはエラー状態で終了するように、 pwd_mkdb に指示します。 デフォルトでは、ソースファイルに対するロックを、ブロックして待ちます。 データベースの再構築中、このロックは保持されます。

-p  バージョン 7 スタイルのパスワードファイルを作成し、 /etc/passwd にインストールします。

-d directory
    /etc の代わりに、指定された先のディレクトリにデータベースを保存します。

-u username
    指定したユーザのレコードだけ更新します。 単一ユーザに対してのみ作用するユーティリティは、このオプションを使用し、 データベース全体を再構築するオーバヘッドを避けることが出来ます。

-s cachesize
    ハッシングライブラリが使用するメモリキャッシュの大きさを、 メガバイト単位で指定します。 ユーザ数が多いシステムでキャッシュを小さくすると、 データベースファイルの再構築に耐えがたいほどの長時間を要します、 おおざっぱな目安では、 pwd_mkdb の使用メモリ量はここで指定した大きさの 2 倍をちょっと越えたものになります。 デフォルト値は 2 メガバイトです。

2 つのデータベースの違いは、安全なバージョンでは、ユーザのパスワードが 暗号化されて入っており、安全でないバージョンでは、パスワードが ``*'' と なっていることです。

このデータベースは、 C ライブラリパスワードルーチンに使われます ( getpwent(3) を参照)。

pwd_mkdb は成功したときは 0 を返し、失敗したときは 0 以外を返します。

環境変数
PW_SCAN_BIG_IDS 環境変数が設定されると、 大きなユーザ ID およびグループ ID に対して通常生成される警告メッセージを、 pwd_mkdb は抑制します。 ID 値を仮定するプログラムでこのような ID を使用すると、 深刻な問題の原因となります。

関連ファイル
/etc/pwd.db
    セキュリティのないパスワードデータベースファイル
/etc/pwd.db.tmp
    一時ファイル。
/etc/spwd.db
    セキュリティのあるパスワードデータベースファイル。
/etc/spwd.db.tmp
    一時ファイル。
/etc/master.passwd
    現在のパスワードファイル。
/etc/passwd
    バージョン 7 フォーマットのパスワードファイル。

バグ
パスワードファイルのアトミック (atomic; 不可分) な更新が必要なので、 pwd_mkdb は、インストールに rename(2) を使います。 しかし、コマンドラインで指定されたファイルが /etc ディレクトリと同じファイルシステム上に存在しなければなりません。

複数の人が、 pwd_mkdb を同時に異なるパスワードファイルに対して走らせると、 明らかにレース (race; 競合) になってしまいます。 pwd_mkdb のフロントエンドである chpass(1), passwd(1), vipw(8) では、この問題を避けるために必要なロック操作を行います。

可搬性
以前のバージョンのシステムは、 pwd_mkdb 同様のプログラムである mkpasswd(8) を持っており、それはパスワードファイルに対して dbm(3) スタイルのデータベースを構築しましたが、 これをインストールするために呼ぶプログラムに依存していました。 このプログラムは、以前のプログラムのユーザが機能の変化で 驚かないように名前が変えられました。

関連項目
chpass(1), passwd(1), db(3), getpwent(3), passwd(5), vipw(8)