CHPASS(1)

名称
chpass, chfn, chsh, ypchpass, ypchfn, ypchsh - ユーザデータベース内の情報を編集する

書式
chpass [-a list] [-p encpass] [-e expiretime] [-s newshell] [user] chpass [-oly] [-a list] [-p encpass] [-e expiretime] [-s newshell] [-d domain] [-h host] [user]

解説
chpass ユーティリティは user もしくはデフォルトでは実行したユーザのユーザデータベースの情報を変更します。

chfn, chsh, ypchpass, ypchfn, ypchsh ユーティリティは、 chpass と同じように動作します (プログラムはひとつだけなのです)。

情報はフォーマットされ、必要な部分をエディタで変更します。

ユーザが変更することができる情報だけが表示されます。

オプションとしては、次のものがあります:

-a  スーパユーザは、ユーザデータベースのエントリを passwd(5) で定義されたフォーマットで引数として直接指定できます。 この引数はコロン (“”): で区切られたリストであり、 空きの部分があっても許されますが、 すべてのフィールドをリストにしなければなりません。

-p  スーパユーザは、暗号化されたパスワードフィールドを crypt(3) で用いられているフォーマットで引数として直接指定することができます。

-e expiretime
    アカウントが無効となる時を変更します。 対話エディタからのようにスクリプトから、 無効となる時を変更するために、本オプションを使用します。

-s newshell
    ユーザのシェルを newshell に変更しようとします。

表示されるエントリには以下のものがあります:

Login:
    ユーザのログイン名
Password:
    ユーザの暗号化されたパスワード
Uid:
    ユーザの ID
Gid:
    ユーザのグループ ID
Class:
    ユーザの一般的な分類
Change:
    パスワードの変更時間
Expire:
    アカウントの有効期限
Full Name:
    ユーザの実際の名前
Office Location:
    ユーザのオフィスの場所 (1)
Office Phone:
    ユーザのオフィスの電話番号 (1)
Home Phone:
    ユーザの自宅の電話番号 (1)
Other Information:
    ユーザに関するローカル定義情報 (1)
Home Directory:
    ユーザのホームディレクトリ
Shell:
    ユーザのログインシェル

注 (1) -
    実際の master.passwd ファイルでは、 これらのフィールドはコンマで区切られたフィールドとして FullName フィールドに埋め込まれます。

login フィールドは計算機にアクセスするときに使われるユーザ名です。

password フィールドはユーザの暗号化されたパスワードが収められています。

uid フィールドは login フィールドと関連した番号です。ファイルのアクセスを制御するために、 どちらのフィールドもシステム (しばしば、複数のシステム) の中で 一意である必要があります。

複数のエントリが同一のログイン名や同一のユーザ ID を持つことは可能ですが、 そのようにすることは通常誤りです。 これらのファイルを操作する手順では、 それらの複数のエントリ内から無作為に選んだものの一つだけを返すでしょう。

group フィールドはユーザがログイン時に所属するグループです。 BSD が複数の グループを採用してから ( groups(1) 参照) このフィールドはほとんど意味がありません。 このフィールドは番号やグループ名 ( group(5) 参照) のどちらかが記述されます。

class フィールドは /etc/login.conf のクラスに関する記述を参照します。 典型的には、ユーザのログイン時に、 ユーザのシステムリソースを制限するために使用されます。

change フィールドはパスワードが変更されているべき日付です。

expire フィールドはアカウントの満了する日付です。

change と expire の両方のフィールドは “month day year” の形式で入力し、 month は、英語の月の名前 (はじめの 3 文字でも十分です) で、 day は、その月の中の日で、 year は、その年です。

5 つのフィールドは、ユーザの 実際の名前 、 オフィスの場所 、 職場 と 家で使う電話 番号、そして その他の情報 を保管しています。 その他の情報 は、コンマで区切った単一文字列であり、追加の gecos フィールドを表現します (典型的にはサイト固有のユーザ情報のために使用します)。 finger(1) が、 Office: というヘッダの下に オフィスの場所と電話番号をともに表示することに注意してください。

ユーザの home directory はユーザがログイン時にいる場所への絶対 UNIX パス名です。

shell フィールドはユーザの好むコマンドインタプリタです。 もし shell フィールドが空であれば、Bourne シェル /bin/sh であると仮定します。 ログインシェルを変更するときに、スーパユーザではないユーザは、 非標準シェルから、または非標準シェルへの変更は許されていません。 非標準シェルとは /etc/shells で見つけられないシェルのことです。

一度情報が確認されたら chpass はユーザデータベースを更新するために pwd_mkdb(8) を用います。

環境変数
環境変数 EDITOR を設定して他のエディタを指定している場合を除き、 vi(1) エディタが使われます。エディタが終了すると、その情報は再度読み込まれ、 ユーザデータベースを変更するための情報とします。 ユーザの情報を変更できるのは、そのユーザかスーパユーザのみです。

PW_SCAN_BIG_IDS 環境変数の設定のインパクトについては、 pwd_mkdb(8) の説明を参照してください。

NIS との相互作用
いくつかの制限が適用されますが、 chpass ユーティリティを NIS と同時に使うこともできます。現在 chpass が rpc.yppasswdd(8) を通じて NIS のパスワードマップ中で変更できるのは、 通常はユーザのパスワード、シェル、GECOS フィールドだけです。 NIS マスタサーバ上でスーパユーザによって起動された場合を除き、 chpass (同様に passwd(1)) は、ユーザ情報の変更および新レコードの追加のために rpc.yppasswdd(8) サーバを使用出来ません。 なお、 rpc.yppasswdd(8) は、どのような変更を行う前にもパスワード認証を要求します。 パスワード無しで変更要求できるユーザは NIS マスタサーバ上のスーパユーザだけです; 他の全てのユーザはパスワードを入力する必要があります。 他の全てのユーザには NIS クライアント (および NIS スレーブサーバ) 上の root 権限を持つユーザも含まれます。 (NIS マスタサーバ上のスーパユーザがこの制約をバイパスできる理由は、 主に簡便さのためです: NIS マスタサーバへの root アクセス権限をもつユーザは 既に NIS マップを更新するための権限を持っています。 それにもかかわらずマップソースファイルを手で編集することは面倒です。

注: これらの例外が適用されるのは NIS マスタサーバが FreeBSD システムの時だけです。)

その結果として、上述の例外を除き、NIS 環境で chpass を使う場合には以下の制限が適用されます:

1.  シェルと GECOS 情報だけを変更できます。 たとえ chpass がスーパユーザによって起動された場合であってもです。 他のフィールドの変更がサポートされるようになっても、 他の NIS システムとの互換性の問題を引き起こすでしょう。 スーパユーザがあるエントリを編集している時に、 他のフィールドにデータを書いても、余分な情報として (パスワードは例外 -- 以下を参照してください) だまって廃棄されるでしょう。

    例外: NIS マスタサーバ上のスーパユーザは、 任意のフィールドの変更が許されています。

2.  パスワード認証が要求されます。 どのような変更を行う前にも chpass ユーティリティはユーザの NIS パスワードを要求します。 もしパスワードが間違っていたら、 どのような変更も行われません。

    例外: NIS マスタサーバ上のスーパユーザはパスワード無しに変更要求できます (スーパユーザは、後述するように -o フラグを指定する事によりこの仕様を無効にする事が選択できます)。

3.  新しいレコードのローカルパスワードデータベースへの追加は勧められません。 NIS が動作しているときに、管理者が chpass ユーティリティによって 新しいレコードをローカルのパスワードデータベースに追加可能です。 しかし、新しいレコードがマスタパスワードファイルの最後、 通常は NIS の特別な '+' エントリの後に追加されるため、 いくつかの混乱を招きかねません。 vipw(8) を使ってローカルのパスワードファイルを変更するべきです。

    NIS マスタサーバ上のスーパユーザによる NIS パスワードマップへの新レコードの追加が許可されるのは、 rpc.yppasswdd(8) サーバが -a フラグ付で起動された場合、すなわち追加を許可して起動された場合のみです (通常は追加を拒否します)。 chpass ユーティリティは デフォルトではローカルのパスワードデータベースを更新しようとします; NIS マップを変更する場合には chpass を -y フラグ付で起動してください。

4.  パスワードの変更は許可されていません。 ユーザが、自分の NIS のパスワードを変更するときには passwd(1) か yppasswd(1) を使うべきです。スーパユーザは新しいパスワードを指定することを許され ています (たとえ、 “Password:” フィールドがエディタのテンプレートに あらわれていなくても、スーパユーザは手動で加えることができます)。 しかしながら、スーパユーザであってもユーザの元のパスワードがなければ rpc.yppasswdd(8) が NIS マップの更新を拒否するでしょう。

    例外: NIS マスタサーバ上のスーパユーザは chpass を使用して、ユーザの NIS パスワードを変更する事が許されています。

chpass が NIS をサポートしてコンパイルされたときに、数個の特別なフラグが有効 になります:

-l  ローカルと NIS の両方のデータベースにユーザが存在していても、 ユーザのパスワード情報のローカルのコピーを修正することを chpass に強制します。

-y  -l と反対の効果があります。もし NIS が動作していれば、 デフォルトでは chpass は NIS のエントリを操作するので、 このフラグはまったく冗長です。

-d domain
    NIS ドメインを指定します。 chpass ユーティリティはデフォルトではシステムのドメイン名を使用します。 これは domainname(1) ユーティリティにて設定されています。 -d オプションは、 このデフォルトを上書きするため、 もしくはドメイン名が設定されていない場合にドメイン名を指定するために 使用できます。

-h host
    問い合わせるべき NIS サーバの名前もしくはアドレスを指定します。 通常 chpass は master.passwd もしくは passwd マップにて指定される NIS マスタホストと通信します。 NIS クライアントとして構成されていないホスト上では、 この情報を決定するための方法がプログラムにはありませんので、 ユーザがサーバのホスト名を指定します。 指定するホスト名は NIS マスタサーバである必要が無い事に注意してください; NIS ドメイン内のマスタサーバ名でもスレーブサーバ名でも良いのです。

    -d オプション使用時には、ホスト名のデフォルトは “localhost” です。 -h オプションを -d とともに使用し、ユーザが指定するホスト名でこのデフォルトを上書きできます。

-o  rpc.yppasswdd(8) に RPC ベースの更新を強制します (“旧モード”) 。 NIS マスタサーバ上でスーパユーザにより起動された場合、 chpass は専用の非 RPC ベースの機構を使用し、 NIS パスワードマップに対する無制限の変更を許可します (この場合 UNIX ドメインソケットを使用します)。 -o フラグを使用する事により chpass に標準の更新メカニズムを使用させる事が出来ます。 このオプションは主にテスト目的のために提供されています。

関連ファイル
/etc/master.passwd
    ユーザデータベース
/etc/passwd
    Version 7 フォーマットのパスワードファイル
/etc/chpass.XXXXXX
    パスワードファイルのテンポラリ用コピー
/etc/shells
    利用できるシェルのリスト

関連項目
finger(1), login(1), passwd(1), getusershell(3), login.conf(5), passwd(5), pwd_mkdb(8), vipw(8) and Robert Morris, Ken Thompson, UNIX Password security.

バグ
ユーザ情報の保存はどこか他の場所にするべきです (し、いつかはそうなるでしょう)。

歴史
chpass ユーティリティは 4.3BSD Reno から登場しました。