passwd(5) FreeBSD 一般コマンドマニュアル

passwd

前のページ 上に戻る 次のページ

passwd


     コードが対応し、コロン (`:') で区切られた 10 個の欄が含まれます。これらの
     欄は以下の通りです:

           name      ユーザのログイン名。

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

           uid       ユーザのid。

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

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

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

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

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

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

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

     最初の空白文字でない文字がポンド記号 (#) であるような行は注釈であり、無視
     されます。スペース、タブ、改行だけからなる空行もまた無視されます。

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

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

     ログイン名は決してハイフン (`-') で始めてはいけません。また、メーラを混乱
     させる傾向にあるので、大文字やドット (`.') も絶対に名前の一部にしないこと
     を強く推奨します。

     password 欄はパスワードの 暗号化された形です。 password 欄が空ならば、そ
     のマシンへアクセスするのに何のパスワードも必要としないでしょう。これはほ
     とんど恒常的に誤りです。これらのファイルは暗号化されたユーザパスワードを
     含んでいるので、適当な権利無しにはいかなる人によっても可読であってはいけ
     ません。管理上のアカウントは 1 個のアスタリスク `*' を含むパスワード欄を
     有しており、これは通常のログインを許しません。

     group 欄はユーザがログインした上で位置付けられるグループです。このシステ
     ムはマルチグループ( groups(1) 参照) をサポートしますが、この欄はユーザの
     1 次グループを指名します。 2 次グループのメンバは /etc/group の中で選ばれ
     ます。

     class 欄はユーザのログインクラスに対するキーです。ログインクラスは

           o   ユーザのフルネーム
           o   ユーザの職場の位置
           o   ユーザの職場の電話番号
           o   ユーザの自宅の電話番号

     この情報はフィンガープログラム finger(1) によって利用され、最初の欄はシス
     テムのメーラによって使われます。fullname 欄内にアンパサンド文字 (`&') が
     現われると、この欄を使うプログラムはそれをそのアカウントのログイン名の大
     文字版に置き換えます。

     ユーザのホームディレクトリは、ユーザがログインして位置付けられる完全な
     UNIX パス名です。

     shell 欄はユーザの好むインタプリタです。 shell 欄になにも無ければ Bourne
     シェル (/bin/sh) が仮定されます。セキュリティ上の理由により、シェルがシス
     テムへのアクセスを許さないスクリプト (例えば nologin(8) スクリプト) に設
     定されている場合、いかなる環境変数も渡されないように配慮されるべきです。
     sh(1) については、これは -p フラグを指定することで可能です。これが他の
     シェルでどのように行なわれるかは、特定のシェルの文書を調べてください。


YP/NIS との相互作用

   NIS B>パB>スB>ワB>ーB>ドB>デB>ーB>タB>へB>のB>アB>クB>セB>スB>をB>可B>能B>にB>すB>る
     システム管理者は /etc/master.passwd ファイルに特別なレコードを付け加える
     ことによって、パスワード情報について NIS/YP を用いるように FreeBSD を設定
     できます。ハッシュされたパスワードデータベースおよび /etc/passwd ファイル
     ( /etc/passwd は絶対に手動で編集してはいけません) に変更が適切にマージさ
     れるように、エントリは vipw(8) で付加するべきです。別の方法としては、なん
     らかの方法で /etc/master.passwd を修正した後、 pwd_mkdb(8) を用いてパスワ
     ードデータベースを手動で更新することができます。

     NIS を活性化するための最も簡単な方法は、名前欄にプラス符号 (`+') だけを持
     つ、以下のような空のレコードを付け加えることです。

           +:::::::::

     `+' は、 FreeBSD の標準 C ライブラリの getpwent(3) ルーチンに対し、検索に
     おいて NIS パスワードマップを使用開始するよう指示します。

     上記のエントリは ワイルドカードエントリとして知られていることに注意してく
     ださい。なぜなら、それはすべてのユーザと一致し (他に情報を持たない `+'
     は、全員に一致します)、全 NIS パスワードデータを無変更にて引き出すことを
     許します。一方、 NIS エントリで `+' の次にユーザ名やネットグループ名を指
     定することによって、どのようなデータが NIS パスワードマップから展開される
     のか、およびそれがどのように解釈されるのかについて、管理者が影響を与える
     ことができます。この特徴を示す、少数のレコード例を挙げます (1 つの
     master.passwd ファイル中には複数の NIS エントリを持つことが可能であること
     に注意):

           -mitnick:::::::::
           +@staff:::::::::
           +@permitted-users:::::::::

     いかも知れません。なぜなら、政治的あるいは技術的な理由でクライアントマシ
     ンにインストールされていない別のシェルを、彼の NIS パスワードエントリに指
     定されているかもしれないためです。他方、 ``rejected-users'' ネットグルー
     プのユーザは、その UID、 GID、シェルが不正な値で上書きされているのでログ
     インできなくなります。

     ユーザ ``mitnick'' は、そのエントリが `+' ではなく `-' で指定されているの
     で、完全に無視されることになります。マイナスエントリは、ある NIS エントリ
     を完全に遮断するために用いることができます。このような方法でパスワードデ
     ータが除外されたユーザは、システムから全く認識されません。(マイナスエント
     リで指定された上書き情報は無視されます。なぜなら、システムが最初に認識し
     ないことにしたユーザの上書き情報を処理することは無駄だからです。) 一般に
     マイナスエントリは、ある権限のあるネットグループのメンバとなってアクセス
     を許されるかもしれないユーザを特別に除外するために使用します。例えば
     ``mitnick'' が ``permitted-users'' ネットグループのメンバであり、いかなる
     理由があってもそのネットグループ内に留まることを許す必要がある場合 (おそ
     らくそのドメイン内の他のマシンにアクセスすることを保証するため)、管理者は
     マイナスエントリを使用することにより、特定のシステムへのアクセスを拒否し
     続けることができます。また、アクセスを許されたユーザおよびその残りを削除
     したようなよくありそうな混み入ったユーザのリストを生成するよりは、むしろ
     アクセスを許されないユーザを明示的にリストする方が容易なことが多いです。

     プラスおよびマイナスエントリは、先行一致優先で最初から最後の順で評価され
     ます。これはシステムが特定のユーザに一致する最初のエントリだけを使用する
     ことを意味します。同じ例を使用すると、 ``staff'' ネットグループと
     ``rejected-users'' ネットグループの両方のメンバとなっているようなユーザ
     ``foo'' は、上の例では ``rejected-users'' のエントリの前に ``staff'' のエ
     ントリがありますので、システムに許可されます。もし順序が逆なら、今度はユ
     ーザ ``foo'' は ``rejected-users'' として認識され、アクセスは拒否されま
     す。

     最後に、 /etc/master.passwd ファイルの NIS アクセスエントリで指定されたユ
     ーザまたはネットグループのどれとも一致しない NIS パスワードデータベースレ
     コードは、(マイナスエントリを使って指定したすべてのユーザと共に) すべて無
     視されます。先に示した例ではリストの最後にワイルドカードエントリが無いの
     で、 ``ken'' と ``dennis'' と ``staff'' ネットグループと
     ``permitted-users'' ネットグループとを除くすべてのユーザを、システムは権
     限があるユーザとして認識しないでしょう。 ``rejected-users'' ネットグルー
     プは認識されますが、全メンバのシェルは再マップされますので、アクセスは拒
     否されるでしょう。他のすべての NIS パスワードレコードは無視されるでしょ
     う。 管理者は以下のようなワイルドカードエントリをリストの最後に付けても良
     いでしょう。

           +:::::::::/sbin/nologin

     このエントリは他のすべてのエントリと一致しないすべてのユーザを一挙にとら
     える働きをします。必ずしもログインアクセスを許可せずに、特定の NIS ドメイ
     ン内の全ユーザをシステムが認識可能であることが望ましいときには、このテク
     ニックが有効なことがあります。ログインシェルとシェルスクリプトを使用する
     ときのセキュリティに関する事柄について、シェル欄の記述を参照してくださ
     い。

     プログラムに通すことにより、ユーザが他のユーザアカウントに対して不正アク
     セスすることを防ぐためです。 NIS にはパスワード隠蔽のための標準的な方法が
     ありません。これは、パスワードデータをすべて NIS パスワードマップに置き換
     えることは、 FreeBSD のパスワード隠蔽システムのセキュリティを無効にしてし
     まうことを意味します。

     FreeBSD にはこの問題を回避するのに役立つ少数の特別な特徴が備わっていま
     す。 FreeBSD NIS クライアントと FreeBSD NIS サーバとの間でパスワード隠蔽
     を実装することは可能です。 getpwent(3) ルーチンは /etc/master.passwd と同
     じデータを含む master.passwd.bynamemaster.passwd.byuid マップを検索し
     ます。マップが存在すれば FreeBSD は標準の passwd.byname および
     passwd.byuid マップの代りにそれらをユーザ認証に利用しようとします。
     FreeBSD の ypserv(8) はまたクライアントの要求をチェックして、クライアント
     の要求が特権ポートから来たことを確認します。スーパユーザのみが特権ポート
     にアクセスすることが許されるので、要求しているユーザがスーパユーザである
     か否か判断可能です。 master.passwd マップにアクセスする権限の無いユーザか
     らのすべての要求は拒否されるでしょう。すべてのユーザ認証プログラムはスー
     パユーザの権限で実行されるので、ユーザの暗号化されたパスワードデータへの
     必要なアクセスを持ちますが、通常ユーザはパスワード情報を含まない標準
     passwd マップへのアクセスのみ許されます。

     この特徴は FreeBSD 以外のシステムがある環境では利用できないことに注意して
     ください。また、ネットワークに無制限にアクセスできる真に限定されたユーザ
     は依然 master.passwd マップを危うくすることにも注意してください。

   NIS B>のB>上B>書B>きB>にB>伴B>なB>う UID B>おB>よB>び GID B>のB>再B>マB>ッB>プ
     SunOS や Sun の NIS コードを利用しているオペレーティングシステムとは異な
     り、 FreeBSD ではユーザが NIS passwd エントリ中の すべての欄を上書きする
     ことを許しています。例えば以下のような /etc/master.passwd エントリを考え
     てみましょう。

           +@foo-users:???:666:666:0:0:0:Bogus user:/home/bogus:/bin/bogus

     このエントリにより、`foo-users' ネットグループ中のすべてのユーザは、
     UID、GID、パスワードを含めて すべてのパスワード情報を上書きされます。この
     結果、彼等のパスワードは不正な値に再マップされるので、すべての `foo-
     users' はシステムから締め出されることになるでしょう。

     以下のように NIS ワイルドカードエントリを使う習慣のある人が多いので、この
     ことは覚えておくべき重要なことです。

           +:*:0:0:::

     これはしばしば新米の FreeBSD 管理者が以下のように master.passwd ファイル
     の NIS エントリを選んでしまうことにつながります。

           +:*:0:0::::::

     更に悪く、以下のようにしてしまうこともあります。

           +::0:0::::::

     マップの全体の内容がパスワードファイルの中央にコピーされたかのように現わ
     れるでしょう。管理者が `+::::::' エントリを /etc/passwd の中央と最後の両
     方に置けば NIS パスワードマップは 2 度現われることになるでしょう。すなわ
     ち 1 度目はそのファイルの中央に現れ、もう 1 度は最後に現れます (単純なワ
     イルドカードの代りに上書きエントリを用いることで、他の組み合わせが可能で
     す)。

     これに対し FreeBSD では単一の ASCII パスワードファイルを持つというわけで
     はありません。 FreeBSD ではハッシュ化されたパスワードデータベースを持ちま
     す。このデータベースでは最初や中央や最後を容易に定義できませんので、
     SunOS に 100% 互換の手法を設計することは非常に困難です。例えば FreeBSD の
     getpwnam() 関数と getpwuid() 関数は、線形検索ではなくハッシュデータベース
     に直接問い合わせするように設計されています。パスワードデータベースが大き
     いシステムでは、このアプローチの方が高速です。しかしデータベースへ直接問
     い合わせを利用するとき、システムは元のパスワードファイルの順序を知り得ま
     せんし気にしませんので、 SunOS が使用するものと同じ上書き論理は容易に適用
     できません。

     代りに FreeBSD ではすべての NIS 上書きエントリを一緒のグループにまとめ、
     それらから 1 つのフィルタを作ります。各 NIS パスワードエントリはちょうど
     1 回上書きフィルタに対して比較され、それに応じて取り扱われます。フィルタ
     がエントリを変更せずに通すことを許すならエントリは変更されないものとして
     取り扱われ、フィルタが欄の再マップを要求するなら欄は再マップされ、フィル
     タが明白な除外を要求するなら(すなわちエントリが `-' 上書きと一致するなら)
     エントリは無視され、エントリがフィルタ指定のどれとも一致しないならエント
     リは捨てられます。

     また、NIS の `+' および `-' エントリ自身は、 /etc/master.passwd の中で指
     定された順序で取り扱われることに再度注意してください。それ以外の方法で取
     り扱うと、予測不可能な振舞いとなってしまうからです。

     結局のところ、データベースのパラダイムを保ちつつ FreeBSD では SunOS と非
     常によく似た動作を行いますが、 getpwent(3) 関数は SunOS のものとはいくぶ
     ん異なった振舞いをします。主な違いは以下の通りです。

           o   NIS パスワードマップの各々のレコードは、ローカルパスワード空間
               のパスワードに 1 度だけマップすることができます。

           o   NIS の `+' および `-' のエントリの位置は、 NIS パスワードレコー
               ドがパスワード空間にマップされる場所に必ずしも影響を与えませ
               ん。

     あらゆる FreeBSD の構成のうち 99% においては NIS クライアントの振舞いは
     SunOS や他の同種のシステムのそれと区別できないものとなるでしょう。それで
     もこれらのアーキテクチャ的な違いを知っておくことは必要です。

   NIS B>上B>書B>きB>にB>関B>しB>ネB>ッB>トB>グB>ルB>ーB>プB>のB>代B>りB>にB>グB>ルB>ーB>プB>をB>用B>いB>る
     FreeBSD はネットグループではなくユーザグループに基づいた上書き照合を行な
     う能力を提供します。例えば NIS エントリが以下のように指定されたとき、

           +@operator:::::::::

                getpwent(3) 関数に適用することで解決されました。

           2.   FreeBSD 2.0.5 以前では、ネットグループの上書きは全く動作しませ
                んでした。これは主に FreeBSD が NIS を通してネットグループを読
                むことをサポートしなかったことが原因です。これもまた修正され、
                SunOS や同種の NIS を使用可能なシステムと全く同様に、ネットグ
                ループを指定可能となりました。

           3.   FreeBSD は現在 NIS サーバの能力を持っており、標準第 6 版形式の
                passwd マップに加え master.passwd NIS マップの使用もサポートし
                ています。このことは、NIS サーバとして FreeBSD システムを利用
                するなら、変更情報、有効期限の情報、クラス情報を指定可能である
                ということを意味しています。


関連ファイル

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


関連項目

     chpass(1), login(1), passwd(1), getpwent(3), login_getclass(3), yp(4),
     login.conf(5), adduser(8), pw(8), pwd_mkdb(8), vipw(8)


バグ

     ユーザ情報は他のどこか に入れるべき (そして結局は入れることになる) でしょ
     う。

     YP/NIS パスワードデータベースでは、普通のユーザには暗号化されたパスワード
     が見えてしまいます。したがって master.passwd マップのシャドウパスワードお
     よび FreeBSD の ypserv(8) サーバを利用しないと、簡単にパスワードクラッキ
     ングを許してしまうことになります。

     master.passwd タイプのマップの使用をサポートする FreeBSD の ypserv(8) を
     使用しないと、 YP/NIS パスワードデータベースは古いスタイル (第 6 版) の
     フォーマットになります。これは、 FreeBSD システムを標準 NIS サーバのクラ
     イアントとして利用するとき、ユーザのログインクラスやパスワード期限等の現
     在のフォーマットにある欄の値についてはサイトワイドな値が利用できなくなる
     ことを意味します。


互換性

     パスワードファイル形式は 4.3BSD 以降で変更されました。以下の awk スクリプ
     トは、古いスタイルのパスワードファイルを新しいスタイルのパスワードファイ
     ルに変換するのに利用できます。 ``class'', ``change'', ``expire'' 欄が追加
     されましたが、デフォルトでは無効になっています。これらの欄を設定するには
     vipw(8) もしくは pw(8) を使用してください。

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


歴史

     passwd ファイルは Version 6 AT&T UNIX で現われました。YP/NIS の機能は

ABELNET VPSサービス