PW(8)

名称
pw - システムユーザ、グループの作成、削除、変更、表示

書式
pw useradd [name|uid] [-C config] [-q] [-n name] [-u uid] [-c comment] [-d dir] [-e date] [-p date] [-g group] [-G grouplist] [-m] [-k dir] [-s shell] [-o] [-L class] [-h fd] [-N] [-P] [-Y] pw useradd [name|uid] -D [-C config] [-q] [-b dir] [-e days] [-p days] [-g group] [-G grouplist] [-k dir] [-u min,max] [-i min,max] [-w method] [-s shell] [-y path] pw userdel [name|uid] [-n name] [-u uid] [-r] [-Y] pw usermod [name|uid] [-C config] [-q] [-n name] [-u uid] [-c comment] [-d dir] [-e date] [-p date] [-g group] [-G grouplist] [-l name] [-m] [-k dir] [-w method] [-s shell] [-L class] [-h fd] [-N] [-P] [-Y] pw usershow [name|uid] [-n name] [-u uid] [-F] [-P] [-a] pw usernext [-C config] [-q] pw groupadd [group|gid] [-C config] [-q] [-n group] [-g gid] [-M members] [-o] [-h fd] [-N] [-P] [-Y] pw groupdel [group|gid] [-n name] [-g gid] [-Y] pw groupmod [group|gid] [-C config] [-q] [-F] [-n name] [-g gid] [-l name] [-M members] [-m newmembers] [-h fd] [-N] [-P] [-Y] pw groupshow [group|gid] [-n name] [-g gid] [-F] [-P] [-a] pw groupnext [-C config] [-q]

解説
pw は、システムの user 、 group ファイルのユーザ、グループを簡単に、標準的な方法で追加、変更、削除 することができるようにするコマンドライン版のエディタです。 pw は、ローカルな user ファイルと group ファイルを操作することができるだ けだということに注意して下さい。 NIS のユーザ、グループは NIS サーバ上 で管理しなければなりません。 pw は passwd, master.passwd, group ファイルや、安全なまたは安全でないパスワードデータベースファイル の更新作業を行いますので、 root で実行されなければなりません。

pw のコマンドラインにかかれている最初の一つか二つのキーワードは、引数の残り を解釈する際の文脈を指定します。 user と group のキーワードはどちらも、 add, del, mod, show, next と組み合わせて用いることができ、どのような順序 (例えば showuser, usershow, show user, user show はすべて同じこととみなされます) で指定してもかまいません。 この柔軟性は、ユーザ、グループデータベース操作のために pw を呼び出す対話的なスクリプトには便利です。 -n name, -u uid, -g gid オプションを使う代わりに、 これらのキーワードに続けてユーザ名、グループ名、数字の ID のうち一つ を指定することができます。

以下のフラグは操作のほとんどのモードで共通です。

-C config
    pw は新しいユーザアカウントとグループはどのように作られるべきかという 方針の情報を得るために、デフォルトではファイル /etc/pw.conf を読み込みます。 -C オプションで異なる設定ファイルを指定できます。 設定ファイルのほとんどの内容は、コマンドライン オプションにより上書きされますが、新しいアカウントを追加するための標準 的な情報を設定ファイルに設定しておいた方が 便利かもしれません。

-q  このオプションを使うと pw はエラーメッセージを抑制します。 これは、注意深くフォーマットされたディスプレイへのメッセージ表示よりも、 pw から返された戻り値を解釈する方が好まれるような対話的な環境では 便利かもしれません。

-N  このオプションは add と modify 操作で使います。 pw は、ユーザ/グループデータベースを更新せずに、操作の結果だけを出力します。 -P オプションを使うと、標準 passwd フォーマットと可読なフォーマットの 切り替えができます。

-Y  更新モードのいずれかと、このオプションとをいっしょに使うことで、 pw は、 /var/yp にカレントディレクトリを移動させてから make(1) を実行します。これは、NIS データベースファイルの自動更新を可能とする ためのものです。NIS が別のパスワードファイル、グループファイルを 使っている場合、 -y path オプションを使い、NIS パスワードデータベースの位置を指定すると よいでしょう。これにより、 pw は、システムパスワードデータベースと並行してこれらのデータベースも 同時に更新します。

ユーザオプション
以下のオプションは useradd と usermod コマンドに付けます:

-n name
    ユーザ名/アカウント名を指定します。

-u uid
    ユーザ ID / アカウント ID を数字で指定します。

    アカウント名は uid を含み、逆も同様であるため、通常これらのオプション のどちらか片方しか必要ではありません。 しかし、両方を指定しなければならないこともしばしばあります。 例えば、すでに存在するユーザの uid を usermod で変えたり、新しいアカウントを作るときにデフォルトの uid を上書きした りするときです。 pw で useradd を使って新しいユーザに uid を自動的に割り当てたい場合は、 ‘-u’ オプションを使っては いけません 。 コマンドライン上で useradd, userdel, usermod, usershow キーワードの直後なら、アカウントとユーザIDのどちらかを ‘-n’ や ‘-u’ を使わずにそのまま続けて書くことができます。

-c comment
    このオプションは passwd の GECOS フィールドの内容をセットします。 このフィールドは、コンマで区切られた 4 つのサブフィールドで、一般的には ユーザの姓名、勤務先または地区、職場と自宅の電話番号を含みます。 これらのサブフィールドは慣習的に使われるだけであり、省略可能です。 このフィールドが空白を含む場合、コメント自身をダブルクォート ‘"’ でくくらなければなりません。 コンマはサブフィールドの区切りとして使われるので、フィールド内での使用は 避けて下さい。そして、コロン ‘’: キャラクタも passwd ファイルのフィールド区切りであるため使えません。

-d dir
    このオプションは、アカウントのホームディレクトリを設定します。 通常、これはホームディレクトリが /etc/pw.conf から決まるデフォルト (ふつうは /home の下でアカウント名をサブディレクトリとしたもの) と異なる場合にだけ使うことになるでしょう。

-e date
    アカウントが破棄される日付をセットします。 この日付のフォーマットは、 10 進の UNIX 時間か ‘dd-mmm-yy[yy]’ フォーマットの日付のどちらかになり、後者は dd が日、mmmが月で、数字と アルファベット('Jan', 'Feb' 等)のどちらでもよく、年は 2 または 4 桁の 数字からなります。 このオプションは、 ‘+n[mhdwoy]’ の形の相対的な日付も受け付けます。 ‘n’ は 10 進数、 8 進数 (0 から始まる) 、 16 進数 (0x で始まる) の数字で、 その後に現在の日付時刻から破棄される日までの分(m)、時(h)、日(d)、 曜日(w)、月(o)、年(y)の数がセットされます。

-p date
    アカウントのパスワードが破棄される日付をセットします。 このフィールドは、パスワードの強制的な変更に対して適用されることを除けば、 アカウント破棄日付指定オプションと似ています。 これは、 ‘-e’ オプションと同様にしてセットされます。

-g group
    与えられた group をアカウントのプライマリグループにセットします。 group は、グループ名またはグループ ID 番号で定義されます。

-G grouplist
    そのアカウントの追加グループをセットします。 grouplist は、コンマで区切られた、グループ名またはグループ ID 番号のリストです。 /etc/group の、グループリストで指定されたグループにそのユーザ名が追加され、 グループリストで指定されないグループからそのユーザ名が削除されます。 注意: ユーザは /etc/group のプライマリグループには加えられるべきではありません。 また、グループのメンバの変更は現在のログインにはすぐには影響されず、変 更後のログインにだけ影響します。

-L class
    このオプションは生成されたユーザのログインクラスをセットします。 ユーザログインクラスに関する情報は login.conf(5) を参照して下さい。

-m  このオプションは、ユーザのホームディレクトリの作成を試みるように pw に指示します。 もちろんこれは useradd で新しいアカウントを加えるときにも役に立ちますが、 すでに存在するユーザのホームディレクトリを、ファイルシステムの別の場所に 移動するという使い方もできます。 新しいホームディレクトリには、 雛型(skeleton) ディレクトリの内容が置かれます。 ここには、普通、ユーザが個人的に使うシェルの設定ファイル一式 が含まれています。 usermod にアカウントを指定して ‘-m’ を用いる際には、そのユーザのホームディレクトリにある 設定ファイルは、雛型ディレクトリのファイルで 上書きされません 。

    ユーザのホームディレクトリが作成されるとき、デフォルトでは、 ‘-b dir’ オプション (下記参照) で指定された basehome ディレクトリのサブディレクトリとして作られ、アカウント名と同じ名前が付 けられます。 コマンドラインに ‘-d dir’ オプションを付けると、上書きするようにすることもできます。

-k dir
    このオプションは、 雛型 ディレクトリをセットします。ユーザのホームディレクトリが作成 されるとき、そこから基本の起動時ファイル、設定ファイル がコピーされます。 このオプションは、 ‘-d’ (下記参照) や ‘-m’ とともに使ったときにのみ意味があります。

-s shell
    ユーザのログインシェルを shell にセットまたは変更します。 シェルプログラムへのパスが省略されると、 pw は /etc/pw.conf で指定された shellpath を探し、それを適切に補います。 パスを指定するのは、特別な理由があるのでなければ、避けるべきだ ということを覚えておきましょう。 指定しないことで、プログラムが存在し、かつ実行可能であることを pw に確認させることができるからです。 フルパスを指定する (または空のままの "" シェルにしておく) と このチェックをせず、対話的なログインをさせないアカウントを 設定しなければならないときに設定される /nonexistent のようなエントリを作ることができます。

-L class
    ユーザの passwd レコード内の class フィールドをセットします。 このフィールドは現在使われていませんが、将来は termcap エントリのようなタグ (詳細は passwd(5) を参照のこと) を指定するために使われるでしょう。

-h fd
    このオプションは、 pw が対話的なスクリプトを使ってアカウントパスワードを 設定できるような特別のインタフェースを用意します。 コマンドラインと環境は、プログラムが情報を受け取るしくみとしては 基本的に安全ではないため、 pw はファイル記述子 (通常対話的スクリプトとプログラム間のパイプ) を通してのみ、アカウントとグループのパスワードの設定を許可します。 sh, bash, ksh, perl は皆、これができるしくみを持っています。 ‘-h 0’ が指定されると、代わりに pw はユーザのパスワード入力を求めるプロンプトを出し、 stdin をパスワードを読み込むファイル記述子とします。 パスワードは一度しか入力されません。対話的な使用よりも スクリプト向きにできていることに注意して下さい。 passwd(1) の行に合わせて新しいパスワードの確認をしたい場合、この機能は、 pw を呼び出す対話的なスクリプトの一部として実装する必要があります。

    引数 fd として ‘-’ が与えられると、パスワードとして ‘*’ がセットされ、そのアカウントにはパスワードを使ってログインすることが できないようになります。

useradd を使うことで、存在するユーザ ID と重複する新しいアカウントを作成するこ とができるようになります。 これは普通エラーになって拒否されますが、 ‘-o’ オプションにより、重複チェックを上書きしユーザ ID の重複を 許すことになります。 これは、同一のユーザが異なるコンテキスト(異なるグループ割り当てや 異なるホームディレクトリ、異なるシェル)でログインするのを許可する 場合に、各アカウントに基本的に同一のアクセス権を与える場合に 使用できます。

useradd コマンドは ‘-D’ オプションを使うことで新しいユーザとグループのデフォルトも設定できます。 新しいユーザを付け加える代わりに、 pw は設定ファイル /etc/pw.conf に新しいデフォルトのセットを書き込みます。 ‘-D’ オプションを使う場合、 ‘-n name’ や ‘-u uid’ を使ってはいけません。そうでないとエラーになります。 ‘-D’ を使うと、 useradd コマンドのいくつかのコマンドラインスイッチの意味が変わります。 それは:

-D  設定ファイル /etc/pw.conf ( もしくは ‘-C config’ オプションが使われたときは異なる名前の設定ファイル ) の中でのデフォルトの値をセットします。

-b dir
    ユーザホームディレクトリが作成されるルートディレクトリをセットします。 このオプションのデフォルトの値は /home ですが、他の好きなディレクトリにセットできます。

-e days
    デフォルトのアカウントの有効期間を日数でセットします。 ‘-D’ を付けずに使われる場合と異なり、引数はアカウントが作成されてから無効に なるまでの日数を指定する数字でなければなりません。 0 という値は、破棄する日付の自動算出を抑制します。

-p days
    デフォルトのパスワードの有効期間を日数でセットします。

-g group
    新しいユーザのデフォルトのグループをセットします。 ‘-g ""’ を使って空のグループを指定すると、新しいユーザは自分自身の私的なプライマリ グループ (ログイン名と同じ名前の新しいグループが作成されます) に 割り当てられます。 グループの指定には、名前または uid を引数として与えることができます。

-G grouplist
    新しいユーザが所属するデフォルトのグループ群を指定します。 これはプライマリグループとは別のグループの集合で、一つの グループをプライマリグループとこの別グループ群の両方に指定することは 避けなければなりません。 言い替えると、これらの別グループ群ではプライマリグループ 以外の グループの構成メンバが決められます。 grouplist はコンマ区切りのグループ名もしくは ID で、 /etc/pw.conf の中にシンボル名で保存されます。

-L class
    このオプションは、新しいユーザのためのデフォルトのログインクラスを セットします。

-k dir
    デフォルトの 雛型 ディレクトリをセットし、 pw がユーザのホームディレクトリを作成するときに、 そこからシェルなどの初期化ファイルのプロトタイプがコピーされます。

-u min,max, -i min,max
    これらのオプションは、 pw により作成された新しいアカウントとグループのために割り当てるユーザと グループの最小の ID と最大の ID をセットします。 デフォルト値はどちらも最小 1000 で最大 32000 です。 min と max はどちらも数字で、 max は min より大きく、両方とも 0 から 32767 の範囲 内でなければなりません。 一般に 100 未満のユーザ ID とグループ ID はシステムに予約されており、 32000 より大きな数も (システム daemon が使う) 特殊な目的に 予約されています。

-w method
    ‘-w’ オプションは新しく作成されたユーザアカウントのパスワードをセットするの に使われるデフォルトの方法を指定します。 method は以下のうちの一つです:

    no  新しく作成されたアカウントでのログインを不可とします。
    yes アカウント名をパスワードにします。
    none
        パスワードを空欄にします。
    random
        ランダムパスワードを生成します。

    ‘random’ や ‘no’ method は、最も安全です。前者の場合、 pw はパスワードを生成し、標準出力に出力します。 このパスワードは、ユーザがそのアカウントにアクセスするパスワードとして あなたが発行しますが、ユーザ自身が自分のパスワードを指定 (多分ひどい選択です) するものより適切です。 ‘no’ method にした場合、パスワードでアクセスできるアカウントを与えるために スーパユーザが passwd(1) を使わなければなりません。

-y path
    /etc/master.passwd からの情報を直接 NIS と共有しない場合、 このオプションは、NIS が使うデータベースのパス名を設定します。 NIS サーバに対してのみこのオプションを指定するべきでしょう。

userdel コマンドには指定可能なオプションは 3 つしかありません。 ‘-n name’ と ‘-u uid’ オプションは、既に説明したとおりです。 追加のオプションは以下のものです。

-r  このオプションで、 pw はユーザのホームディレクトリとその内容のすべてを削除します。 pw はシステムからファイルを削除するとき、慎重すぎるやり方をとります。 まず、削除されるアカウントの uid がシステムの別のアカウントでも使われ ていて、パスワードファイルの 'ホーム' ディレクトリが文字 ‘/’ で始まる正しいパスであった場合にはファイルは削除されません。 次に、ファイルやディレクトリが実際にそのユーザのものであるか、 誰かの所有であるシンボリックリンクがユーザのホームディレクトリ下にある 場合にだけ削除されます。 最後に、そのユーザの所有であるすべての中身を削除した後、 空のディレクトリだけが削除されます。 更に別の一掃が必要なときは、管理者に任されます。

メールスプールファイルと crontab は、ユーザ名に無条件に付属しているもの なので、アカウントが削除されたとき常に削除されます。 at コマンドによって処理待ちのキューに入っているジョブも、ユーザの uid がユニークであり、かつ、そのシステムの別のアカウントに使われていない場合は 削除されます。

usershow コマンドは、二種類のフォーマットでアカウントを閲覧できます。 フォーマットは、デフォルトで /etc/master.passwd で使われているものと同じで、パスワードフィールドは ‘*’ に置き換えられています。 ‘-P’ オプションが使われると、 pw はより人間に読みやすい形でアカウントの詳細を出力します。 ‘-a’ オプションは、現在ファイルにあるすべてのユーザをリストします。

usernext コマンドは、利用可能な次のユーザ ID とグループ ID を コロン区切りで返します。 これは、通常 pw を使う対話的なスクリプトやフロントエンド用です。

グループオプション
グループを操作するコマンドには、 ‘-’ と ‘-q’ オプション (前セクションの始めに説明があります) が使えます。 他のグループ関係のコマンド:

-n name
    グループ名を指定します。

-g gid
    グループの ID を数字で指定します。

    グループ名は uid を意味し、逆も同様なので、アカウント名 と ID フィールドとして、普通どちらか一つを付ければよいのです。 両方を指定する必要があるのは、新しいグループに指定したグループ ID を 設定するとき、または存在するグループの uid を変えたいときだけです。

-M memberlist
    このオプションは、存在するユーザを新しいグループに (groupaddで) 加えたり、存在するメンバリストを (groupmodで) 新しいものに取り換える もうひとつの方法です。 memberlist は正当で、存在するユーザ名または uid のコンマ区切りのリストです。

-m newmembers
    ‘-M’ オプションと同様、このオプションは最初に存在するメンバのリストを 入れ換えることなく、グループに存在するユーザを 追加 します。 ログイン名またはユーザ ID を使うことができ、重複するユーザは警告無く 削除されます。

groupadd にも、存在するグループ ID を新しいグループに割り当てる ‘-o’ オプションがあります。 デフォルトの動作は、グループ追加の試みを拒否することになっており、この オプションはグループ ID の重複チェックを上書きします。 グループ ID を重複させる必要は滅多にありません。

groupmod コマンドには、一つの追加オプションがあります:

-l name
    このオプションで、存在するグループ名を ‘name’ に変更することができます。 新しい名前は存在しないものでなければならず、存在するグループ名と 重複させようとすると拒否されます。

groupshow へのオプションは ‘-u uid’ の代わりにグループ ID を指定する ‘-g gid’ を付けた usershow と同じです。

groupnext コマンドは、次に使用できるグループ ID を標準出力に返します。

診断
pw は、操作に成功すると EXIT_SUCCESS を返し、そうでなければ sysexits(3) により定義された以下の戻り値のうちどれかひとつを返します:

EX_USAGE
    •   コマンドラインのシンタックスエラー (不適切なキーワード、未定義オプション)。

EX_NOPERM
    •   root でないユーザとして、何らかの更新を実行しようとした。

EX_OSERR
    •   メモリアロケーションエラー。
    •   パスワードファイル記述子の読み出しエラー

EX_DATAERR
    •   コマンドライン上やパスワードファイル記述子の、間違った、または正しくな いデータや欠落データ。
    •   root アカウントの名前や uid の変更、削除をしようとした。

EX_OSFILE
    •   雛型ディレクトリが適切でない、または存在しない。
    •   基本ホームディレクトリが適切でない、または存在しない。
    •   指定したシェルが適切でない、または存在しない。

EX_NOUSER
    •   指定されたユーザ、ユーザ ID 、グループ、グループ ID が存在しない。
    •   記録、追加、または更新されたユーザ、グループが予期せず無くなった。

EX_SOFTWARE
    •   指定した範囲には未使用グループ ID 、ユーザ ID が残っていない。

EX_IOERR
    •   設定ファイルの書き換えができない。
    •   グループやユーザデータベースファイルの更新時エラー。
    •   パスワードまたはグループデータベースファイルの更新時エラー。

EX_CONFIG
    •   基本ホームディレクトリが設定されていない。

注釈
各コマンドに使用可能なオプションの要約として、
    pw [command] help
が使えます。例えば、
    pw useradd help
は useradd 操作に使用できるすべてのオプションをリストします。

Pw は、passwd ファイルの GECOS フィールド(ユーザの姓名、オフィス、業務用 電話番号、自宅電話番号のサブフィールドがあります)に 8 ビット文字を 使うことができます。しかし、8 ビット文字をユーザログイン名やグループ 名に使うことはできません。8 ビット文字の使用に際して、以下の点に注意して ください。 インターネットとの接続に際しては、メール配送プログラムが 8BITMIME を サポートしていることが要求されており、8 ビット文字を含むヘッダは 7 ビットの quoted-printable フォーマットに変換されてしまいます。 sendmail(8) はこの機能をサポートしています。 GECOS フィールドに 8 ビット文字を 置く際は、ユーザのデフォルトロケールとデフォルト文字集合といっしょに 使用するべきで、これらを使用せずに実装してはいけません。 8 ビット文字の使用は、 fingerd(8) のように、インターネット経由で GECOS フィールドの内容を やりとりする他のプログラムにも影響を及ぼす可能性があります。 TCP/IP クライアントの中には、IRC のように、少数ながらもパスワード ファイルに指定されたフルネームをデフォルトで使用するものも あります。

関連ファイル
/etc/master.passwd
    ユーザデータベース
/etc/passwd
    Version 7 フォーマットのパスワードファイル
/etc/login.conf
    ユーザケーパビリティデータベース (user capability database)
/etc/group
    グループデータベース
/etc/master.passwd.new
    マスタパスワードファイルの一時コピー
/etc/passwd.new
    Version 7 パスワードファイルの一時コピー
/etc/group.new
    グループファイルの一時コピー
/etc/pw.conf
    pw コマンドのデフォルトオプションファイル

関連ファイル
chpass(1), passwd(1), group(5), login.conf(5), passwd(5), pw.conf(5), pwd_mkdb(8), vipw(8)

歴史
pw は、 SYSV の shadow サポートで使われていた多くのオプションを模倣して書かれましたが、 4.4BSD オペレーティングシステムに特有のパスワードフィールド、 グループフィールドに合わせて変更されています。また、ほとんどの要素が 一つのコマンドにまとめられています。