パスワード - みる会図書館


検索対象: UNIX MAGAZINE 1998年11月号
18件見つかりました。

1. UNIX MAGAZINE 1998年11月号

連載 / UN Ⅸの玉手箱ー⑨ 図 4 rmuser の実彳デ列 mypc# rmuser 」土て 0 Matching password entry : Updating group file : wheel done . Updating password file , updating databases , done . Remove user's home directory (/home/jiro)? y ls this the entry you wish tO remove? y jiro : $1$dZJh14YU$aHqwC61QRp6//fmxF3Xq31 : 1001 : 100 : : 0 : 0:A0ki Jiro : /home/j iro: /bin/csh Removing files belonging t0 jiro from /var/tmp/vi . recover: done. Removing files belonging t0 jiro from /var/tmp: done. Removing files belonging tO Jiro from /tmp: done. Removing user ' s home directory (/home/j iro) : done. mypc# ロ ーはほかのユーサーの情報を変更することはできません。 (/usr/bin/)passwd コマンドはユーサーのパスワー ドを変更するためのもので、基本的に引数なしで実行し ます。一般ューサーが変更できるのは自分のパスワード だけですが、スーパーユーサーは引数としてユーサー名を 新しいパスワードを入力 もう 1 度、 新しいパスワードを入力 ←旧いパスワードを入力 for Ⅱ u11. えることで、すべてのユーザーのパスワードを変更でき - Retype new password : ← New password : 01d password : Changing 10Ca1 password mypc$ passwd ます。 BSD/OS の passwd コマンドの場合、不適切なパスワー チェックをおこなうものが多いようです。 FreeBSD や なお、去も丘の passwd コマンドは、簡単なパスワード・ ド・ファイルか更新さパスワード変史か完了します。 力した新しいパスワードが一致すれは、自重加勺にパスワー 意味で再度新しいパスワードの入力を促されます。 2 回入 しいパスワードを求められます。入力を終えると、石忍の スワードがパスワード・ファイルのものとーー・・致す川ま、新 たパスワードは画面に表示されません。 こで入力したパ 使っているパスワードを訊かれるので入力します。入力し ー信己はユーザー null が実行した例です。最初に、現在 mypc$ ロ passwd : done passwd : updating the database. UNIX MAGAZINE 1998.11 すべてアルファベットの小文字からなるパスワード ・ 5 文字以ードのパスワード ド、つまり、 のいすれかに該当するものを指定すると、別のパスワード にするよう促されます ( 図 5 ) 。この場合、 6 文字以 .E で、 かつアルファベットの小文字以、タ ) 文字を交ぜたパスワー ドを入力するまで先に進めません。 一方、スーノヾーユーサーが passwd コマンドを実行す 171 独立しています。 9 chsh と chfn の実体は chpass と同しになり、 passwd コマンドから 実行します。すると、工竟変数 EDITOR で指定した工 ー殳ューサーが chpass を利用する場合は、引数なしで chsh や chfn を使っても同じ結果になります。 降ではコマンド名として chpass を使いますが、代わりに chfn は、機能的にはすべて同しものになっています。以 は chpass コマンドに吸収されました 9 。 chpass 、 chsh 、 コマンドが登場してからは、 chsh および chfn コマンド ィールドのみを変更するために使われていました。 chpass が同じで、機能もそれぞれログインシェルや GECOS フ の chfn がありますが、以前は passwd コマンドと実体 るための chsh と GECOS フィールドを変更するため 似たようなコマンドとして、ログインシェルを変更す れた情報を操作するためのものです。 /usr/bin/)chpass はパスワード・ファイルに ( 求さ chpass スワードとして認められます。 ハネられますが、もう 1 度同しものを入力すると新しいパ 字のパスワード ) を入力すると、いったんは図 5 とい犲兼に ード ( 5 文字以下、あるいはすべてアルファベットの小文 ワードを入力するよう促されます。また、不適切なパスワ ると、旧いパスワードは求められす、いきなり新しいパス

2. UNIX MAGAZINE 1998年11月号

U N Ⅸの玉手箱 null ユーサ情報 ( 2 ) 前回は、 UNIX で用いられているユーサ、一とグループ の念について述べその利用例としてファイル操作に対 するハ ミッションを挙げました。さらに、パスワード・ ファイルのフォーマットと、ユーサーのクラスの設疋ファ イルについて紹介しました。 今月は、前呂介しきれなかったグループファイルにつ いて触れたあと、パスワード・ファイルの情報を変更する ためのコマンドを中心に解説します。さらに、さまざまな 情報をネットワーク上て集中管理するための仕組みである NIS の概要を簡単に説明し、 NIS 環境におけるユーザー 情報の設定についても紹介します。 なお、先日 FreeBSD のバージョンが一 E がり、 2.2.7- RELEASE になりました。 FreeBSD に関する設定や実 行例などはこのバージョンを対象とします。基本的な部分 での大きな変史はありませんが、 2.2.6-RELEASE とく らべて変わった点があ川ま、今後はその旨を明記します。 グループ情報の設定ファイル 前回お話ししたように、 UNIX では、、ユーザー " に加え て、、グループ " という概念があり、複数のユーサーをグル ープにまとめることができます。ファイルやプロセスに対 するアクセス制御を、、ユーサー " 、、グループ " 、、それ以外 " という 3 つの単位でおこなうことにより、アクセスの可否 をより細かくコントロールできます。 あるユーザーには、おもに人間か識別するための、、ユ ーサー名 " と、マシン内部で識別するための、、ユーサー ID"(UID) か割り当てられます。 UNIX におけるパス ワード・ファイル (/etc/passwd および /etc/master. passwd) はユーサー名と UID の対応づけを管理するため 166 図 1 グループファイルのフォーマット パスワードユーザーのリスト ↓ ↓ wheel : * : 0 : て 00 し′ null ↑ グループ名 GID のファイルで、そのほかにもパスワードやホーム・ディレ クトリ、ログインシェルなどの情報か取められています。 グループについても同様で、各グループには、、グルーフ 名 " と、、グループ ID"(GID) か割り当てられます。グル ープ情報には、グループ名と GID の対応づけだけでなく、 グループに属するユーザーに関する情報なども必要です。 グループに関する設疋ファイルは /etc/group で、フ ァイルのフォーマットは図 1 のようになっています。 スワード・ファイルと同様に、各グループに関するエント リを 1 行すっ言当します。パスワード・ファイルは 7 つ のフィールドから構成されていました 1 が、グループファ イルの各工ントリは 4 つのフィールドからなり、それぞ れのフィールドはコロンで区切ります。 各フィールドがもつ意味は以下のとおりです。 ・グループ名 ューサー名と同様に、人間か識別するためのグループ名 を指定します。 ・ / 、スワード パスワード・ファイルと同しく暗号化されたパスワード 1 BSD/OS や FreeBSD など、 4.4BSD をベースにした OS の場合 は、、ログインクラス " 、パスワードの更新期限 " 、アカウントの有刻期 限 " という 3 つのフィールドが追加さイ t で 10 個のフィールドか ら橢及されています。 UNIX MAGAZINE 1998.11

3. UNIX MAGAZINE 1998年11月号

連載 / UN Ⅸの玉手箱 この NIS クライアントに限り、 / b ⅲ / csh がログインシェ ルとして使われます。 設定されています。 ーサー情報とグルーフ請報に対応する部分は以下のように OS をインストールした状態では、 /etc/irs. conf のユ やグループファイルを修正する必要はありません。 したがって、 BSD/OS の場合はパスワード・ファイル /etc/nsswitch. conf ファイルて指定します ) 。 でまとめて言置できるようになっています (SoIaris では、 の不頁や優先頂位などを、 /etc/irs. conf というファイル する情報原 ( ローカルな設定ファイルや NIS 、 DNS など ) BSD/OS では、ユーサーやグループ、ホストなどに関 NIS のユーサー情報の設定 (BSD/OS) YPChpaSS(1) や yppasswd(l) などを参照してください。 限がいくつかあるので、詳しくはオンライン・マニュアル や passwd コマンドとはは 1 司じですが、これらとは違う制 スワードを変更することができます 21 。使い方は chpass 自分のログインシェルと GECOS 情報、後者は自分のノ、 ることが可能です。ー引殳ューサーか実行した場合、前者は ( マスターサーバー ) に登録されたユーサー情報を変更す chpass および passwd コマンドと同しで、 NIS サー 属していません ) 。これらのプログラムの実体はそれぞれ ています (BSD/OS にはこれらに相当するコマンドは付 bin/)ypchpass と (/usr/bin)yppasswd か用意され されている情報を操作するためのコマンドとして、 (/usr/ なお、 FreeBSD では NIS の passwd マップに登録 passwd(5) や group(5) にも詳しく書かれています。 ファイルの設定については、オンライン・マニュアル NIS 環境におけるパスワード・ファイルやグルーフ フ。の情幸ゞマージされます。 ルな /etc/group ファイルの情報に NIS の group マッ 末尾に、、十 " だけの行を追加します。これにより、ローカ イルを修正します。具イ勺には、 /etc/group ファイルの トで利用するには、 NIS クライアントの /etc/group ファ 一方、 NIS の group マッフ。の情報を NIS クライアン #passwd group #group nIS 10Ca1 continue ,merge nxs passwd 10Ca1 continue 21 ただし、これらのコマンドを利用するには、 NIS サーバー上で rpc ・ yppasswdd というデーモン・プログラムが走斷力されていなければな りません。 180 NIS を参照する設定も用意されていますが、デフォルト ではコメントアウトされています。 NIS の passwd マッ フ。や group マップを利用する場合は、それぞれの行頭の 、、 # " を削除するだけです。 ただし、 FreeBSD の場合と異なり、パスワード・ファ イルに、、十 " や、、一 " て始まるエントリを作成しても無見さ れてしまい、 passwd マップに登録されオ寺定のユーサー に対するログインの許可 / 不許可を制御することはできな いようです。つまり、 /etc/irs. conf で passwd nis" と いうエントリを有効にすると、 NIS サー ノヾーの passwd マップに登録されたすべてのユーサーがログインできるこ とになります。 ☆ 前回から 2 回にわたり、 UNIX におけるユーサーとグ ループについて、関連する設定ファイルを交えながら紹介 しました。 パスワード・ファイルを更新するためのコマンドとして は、 vipw や adduser などをとりあげました。後発のコマ ンドはそれなりに親切で多機能なのですが、昔から UNIX を使っている人にとっては vipw のはうがてっとり早く感 しられるでしよう。 vipw ではエデイタを使ってパスワー ド・ファイルを編集するので、ほかのマシンと同しユー ザーを追加する場合は、リモートログインしてエントリの 行をカット & ペーストできるというメリットもあります。 NIS クライアントのセットアッブ去も解説しました。 NIS サーバーの設定や、 NIS で提供されるユーサー / グ ループ以汐 ) 情報の利用ガ去については、機会をあらため て紹介するつもりです。 次回は、ネットワークにマシンを接続するときに必要な ホスト情報に関する話題をとりあげる予定です。 UNIX MAGAZINE 1998.11

4. UNIX MAGAZINE 1998年11月号

ロプロクラミンク・テクニック 多治見寿和 ファイルのロック 前回は ls コマンドを紹介しました。 ls はもっとも初期 の UNIX から存在しているコマンドで、いまでは 26 も のオプションをもった複雑なものとなっています。その ソースコードを眺めると、ファイルフラグという概念や、 ファイルシステム内のヨ冓造を巡回するための fts 関委羊 などが目を引きます。 今回は、ファイルのロックをとりあげます。ある資源を 複数のものが使う可能性があるとき、そのイ吏用に関して調 整をおこなわなければなりません。そのための財冓がロッ クです。 いうまでもなく、 UNIX はマルチューサー、マルチプ ロセスのオペレーティング・システムです。このような オペレーティング・システムでは、つねに複数のユーサー か 1 司ーの作業をおこなうかもしれないという可能生を考え なければなりません。たとえば、 UNIX ではパスワード・ ファイルはたいへん重要です。このファイルを編集する場 合には、複数のユーザー ( 管理者 ) か 1 司時に変更しておか しくなってしまわないように、専用のプログラムを使うこ とになっています。 ます、 2 人の管理者か 1 司時に修正しようとするとどんな 間題か起こるかを考えてみましよう。最初の状態では、ユ ーサー A 、 B の 2 人がパスワード・ファイルに書かれて いたとします。ここで 1 人目の管理者が、新たなユーサー C を加えるためにパスワード・ファイルを編集し始めまし た。この段階で、別の管理者がもう 1 人の新たなユーサー D を追加しようとパスワード・ファイルの編集を始めた とします。このとき、ファイルシステム上のパスワード・ バスワード・ファイルの編集 116 ファイルにはまだューサー C が追加されていないため、 2 人目の管理者は A 、 B の 2 人のユーザーだけか書かれた 状態から編集を始めます。 そして、最初の管理者カ扁集を終了して、 A 、 B 、 C の 3 人のユーサーか書かれたパスワード・ファイルを保存しま す。この点では、ファイルシステム上にはたしかに A 、 B 、 C か書かれたファイルが存在しています。ところが、 このあとで 2 人目の管理者がユーサー D を追加したファ イルを保存すると、パスワード・ファイルは置き換わって しまい、 A 、 B 、 D の 3 人か書かれたファイルとなりま す。つまり、ユーサー C に関する作業は無効となってし まうのです。 1 人目の管理者がパスワード・ファイルを修正して保存 し、そのあとで 2 人目の管理者がその、、修正された " パス ワード・ファイルに対してイ 1 喋をして保存すれは、このよ うな問題は発生しないのは明らかです。 そこで UNIX では、パスワード・ファイルを編集する ための専用のコマンド vipw が用意されています。 vipw を使えは、はかの管理者がパスワード・ファイルを編集し ているあいだは、新たにパスワード・ファイルの編集がで きないようになっています。さきはどの例では、 2 人目の 管理者はパスワード・ファイルの編集を始められなくなる のです。こうすることで、 2 回の編集竹喋を ( 同時ではな く ) 順番におこなうことになり、かならす変更か有効とな ルという共有データに対して読み書きをおこない、 パスワードの例は、 2 人の管理者かパスワード・ファイ 排他制御と危険領域 ります。 どのよ UNIX MAGAZINE 1998.11

5. UNIX MAGAZINE 1998年11月号

連載 / UN Ⅸの玉手箱ー⑨ 図 5 パスワードのチェックに引っ掛かる場合 Changing 10Ca1 password fo て null . mypc$ passwd ・パスワードが 5 文字以下の場合 01d password : New password : ←旧いパスワードを入力 新しいパスワード ( たとえは、 nu 『 ) を入力 P1ease enter a password at 1east 6 characters in length. New password : ロ ・パスワードがアルファベットの小文字だけの場合 mypc$ passwd Changing 10Ca1 password 01d password: New password : P1ease don't use an a11 Unusua1 capitalization, New password : ■ for null . ←旧いパスワードを入力 新しいパスワード ( たとえば、 nullnull " ) を入力 —lower case password. control characters or digits are suggested. デイタか起動され 10 、ログインシェルと GECOS に関す る現在の設定が表示されます。たとえば、ユーサー null が chpass を実行した場合、エデイタの画面には以下のよ うに表示されます。 #Changxng user database information for ⅡⅡ 11. ・ログインシェル ( Shell) 変更できるのは以下の 5 項目です 11 この例からも分かるように、一イ殳ユーサーが chpass で Home Phone : 045 ー 9876 ー 5432 Office Phone: 03 ー 0123 ー 4568 Location: GI ー 312 Fu11 Name : Nu11 She11 : /bin/csh 172 11 もちろん、自ろオ帯にしか変更できません。 10 竟変数 EDITOR カ甘定されていなしは昜合はⅵカイ叫つれます。 デイタを起動世す、バッチ的に処理をおこないます。た 付けると、ログインシェルを変更できます。この場合は工 chpass コマンドの引数として、、一 s シェルのパス名 " を すると、パスワード・ファイルが自重加勺に更新されます。 れるので、変史したい部分を修正します。工デイタを終了 それぞフィールド名の右側に現在の設定値が表示さ ・ GECOS フィールドの自宅の電話番号 (Home Phone) Phone) ・ GECOS フィールドのオフィスの電話番号 (Office ・ GECOS フィールドの部屋番号 (Location ・ GECOS フィールドのフルネーム (FuII Name) だし、一ヨ殳ューサーがログインシェルとして選べるのは、 /etc/shells に当求されているものだけです 12 mypc$ chpass —s /bin/bash chpass : updating the database. chpass : done mypc$ ■ 一方、スーパーユーザーの場合、 chpass の引数にユー サー名を指定して実行します。たとえば、、 chpass null" と 実行すると、起動したエデイタに表示される情報は以下の ようになります。 #Changing user database information for Ⅱ u11. Login : null Password : $ 1 $ 0.00c131McF5ZVkxkIqpgRX7eKR. Uid [ # ] : 1000 Gid [ # or name] : 100 Change [month day y e ar] : Expire [month day year] : C1ass : Home directory : /home/null S e11 : /bin/csh Fu11 Name : Nu11 Location: GI ー 312 Office Phone : 03 ー 0123 ー 4568 Home Phone : 045 ー 9876 ー 5432 ーイ殳ューザーと違い、パスワード・ファイルのすべての フィールドを修正できることが分かります。ただし、パス ワード・フィールドには暗号化されたパスワードを指定し なけれはならないため、パスワードに関しては p swd コ マンドを使って変更したはうかいいでしよう。 12 スーパーユーサーにはこの制限はありません。 UNIX MAGAZINE 1998.11

6. UNIX MAGAZINE 1998年11月号

上記刎列を見ると、 chpass はパスワード・ファイルを vipw などで変更するのとあまり変わりません。唯一漣う のは、パスワードの更新期限 (Change) とアカウントの 有効期限 (Expire) を 1970 年 1 月 1 日から起算した秒 数ではなく、期限となる年月日で指定できる点です。これ らのフィールドには、以下の形式で期限を指定します。 月の名前日年 月の名前には、、 January" や、、 March" のように、その 月の英語名を指定します儼初の 3 文字カ陏効 ) 。日や年に は数字を指定します。たとえば、パスワードの有月限を 1998 年 12 月 31 日に設定したい場合、、℃ hange" フィー ルドの値を、、 Dec 31 1998 " のように指定します。 1970 年から 1999 年までは、年に関して 2 桁の数字が使えま すが、それ以降はかならす 4 桁 ( たとえば、、 2001 " など ) て表さなくてはなりません。ただし、現在の FreeBSD や BSD/OS においては、秒数を表す変数は 64 ビットて表 現されるため、期限として 2038 年 1 月 19 日 ( より正確 には、この日の午後 12 時 14 分過ぎ ) よりもあとは指定 できないようになっています。 FreeBSD や BSD/OS 以 外でも、ほとんどの UNIX にこの制限があります。 chp s コマンドは、パスワード・ファイルのエントリ 間に対するチェックはおこないません。このため、たとえ ばスーパーユーサーが、、 chpass null" を実行し、ユーザー 名だけを変更して chpass を終了すると、ユーザー名以外 はすべて同し工ントリかパスワード・ファイルに作成され ます。 UID などが重複したユーザーを不用意に作らない よう注意しましよう。 また、スーパーユーザーが chpass を実行する際に、 オプションに続けてパスワード・ファイルと同し形式の工 ントリを指定すると、パスワード・ファイルの変更やユー ザーの追加をバッチ的におこなうことができます。詳しい 利用法については、オンライン・マニュアル chpass ( 1 ) な どをご覧ください。 連載 UN Ⅸの玉手箱ー⑨ その他のコマンド ューザー情報やグルーフヨ辭にを操作するためのものでは ありませんが、知っていると便利なコマンドをまとめて紹 介しておきます。 UNIX MAGAZINE 1998.11 ・ id コマンド ューサーの UID や GID などの↑帯長を知ることができ ます。引数なしで実行すると次のようになります。 mypc$ は uid = 1000 ( Ⅱ u11 ) gid=100(user) groups=100(user) , 0(whee1) mypc$ ロ UID ( ューサー名 ) と GID ( グルーフ。名 ) 、そのユーザ ーが所属するグルーフ。のリストか読けて表示されます。 引数にユーサー名を与・えた場合は、指定したユーサーに 関する情幸られます。 -p オプションを付けて実行すると、 UID や GID は表 示されす、名前 ( ューザー名 / グループ名 ) だけの表示 になります。 mypc$ id -p uid Ⅱ u11 groups user wheel mypc$ 目 ほかにもいくつかオプションがありますが、詳しくはオ ンライン・マニュアル id ( 1 ) などを参照してください。 ・ whoami コ・マンド 現在のユーザー名を表示します。プログラムの実体は id コマンドと同しで、、、 id ー un " を実行するのと同じ結 果になります。 su などを使い、別のユーサーになって 作業していると、ときどき自分がいまどのユーサーとし て作業しているのかが分からなくなることもあります。 このようなとき、 whoami を使うと簡単にユーサー名 を知ることができます。 mypc$ whoami Ⅱ u11 mypc$ 目 ・ groups コマンド ューザーが所属しているグループの一覧が表示されま す。たとえは、ユーザー null が、 user" と、、 wheel" と いう 2 つのグループに属している場合、 groups コマン ドの出力は次のようになります。 mypc$ groups user wheel mypc$ 目 引数としてユーサー名を指定すると、そのユーザーか所 属するグループの一覧か表示されます。 groups コマン 173

7. UNIX MAGAZINE 1998年11月号

連載 / UN Ⅸの玉手箱ー⑨ 図 2 インストール直後のグループファイル wheel : * : 0 : root daemon : * : 1 : daemon kmem:*:2:root sys : * : 3 : root tty : * : 4 : root operator: * : 5 : て 00t mail : * : 6 : bin : * : 7 : news : * : 8 : man : * : 9 : games:*:13: staff:*:20:root guest:*:31:root uucp : * : 66 : xten:*:67:xten dia1er:*:68: network: * : 69 : nogroup: * : 65533 : nobody: * : 65534 : を指定できますが、実質的には使えないので 2 、 しておきます。 ・ GID * に グループをマシン内部で識別するための番号を指定しま す。図 2 は FreeBSD をインストールした直後の / etc /group ですが、 wheel グループ 3 のはか、 daemon や krnem など、システムか利用するいくつかのグループ があらかしめ求されています。これらのグループには 1 桁あるいは 2 桁の小さな番号が使われています。独自 にグループを追加する場合は、これよりも大きな番号を 使うといいでしよう。 ・ユーサーのリスト グループに所属するユーサーを、カンマで区切って列挙 します。たとえは、 wheel グループに最初に登録されて いるのは root だけですが、ユーザー null を追加した wheel: * : 0 : て 00t ,nu11 い場合は以下のように指定します。 UNIX MAGAZINE 1998.11 アカウント操作のコマンド群 パーユーサーになれるユーサーのグループ」を未します。 3 wheel グループの GID は 0 で、「 ()u コマンドなどを使って ) スー 2 たとえば、グループのパスワードを作るためのコマンドはありません。 中身を見ることもできません。スーパーユーザーがパスワ す。ー殳ユーザーは、 /etc/master. passwd ファイルの ファイルを直接変更できるのは、スーパーユーサーだけで これまでに紹介したパスワード・ファイルとグルーフ ード・ファイルにエントリを追加したり、変更する場合、 人間にとって分かりやすいフォーマットではないため、工 更が反映されないなどのトラブルが生します。 イルに対する変史を同時におこなおうとすると、一方の変 ーパーユーザーになれるような場合は、パスワード・ファ シンがネットワークに接続されていて複数のユーサーがス デイタなどで妾扱うとミスを犯しがちです 4 。 また、マ 167 ド・ファイルを変史しただけでは効果がありません。 イルから生成さオけこデータベース・ファイルを使うため、たん : ン、スワー 4 さらに、 FreeBSD や BSD/OS ではテキスト形式のパスワード・ファ vipw: rebuilding the database. /etc/pw. NE1043 : 14 lines, 962 characters ( ェデイタを終了 ) り返しています。以ー司様 ) 。 編集するかどうかを訊いてきます ( 誌面の都合 - E 、て折 ていると、 vipw は以下のようなメッセージを表示して再 タベース・ファイルを作成します。フォーマットか間違っ ルを /etc/master. passwd ファイルにコピーして、デー チェックし、フォーマットに間違いがなけれは一時ファイ pwd ー rnkdb コマンドを使ってファイルのフォーマットを 編集作業が終ってエデイタを終了すると、 vipw は 名 ) を設定しておくと、好みのエデイタで編集できます。 ⅵですが、環境変数 EDITOR に別のエデイタ ( のパス いった名前になります。デフォルトて起重丿けるエデイタは イルを開きます。ー引ファイルは、 /etc/pw.xxxx:rx" と を一時ファイルにコピーし、エデイタを起動して一 - 印ファ vipw を実行すると、 /etc/master. passwd ファイノレ ルを回避できます。 同時にパスワード・ファイルを変更することによるトラブ あいだは、はかのユーザーは vipw を起動できないため、 す。 vipw を使ってパスワード・ファイルを編集している FreeBSD や BSD/OS では /usr/sbin に置かれていま 加えるためのコマンドで、上如勺古くからあるものです。 vipw はパスワード・ファイルに追加あるいは修正を VIPVvr できるコマンド群を紹介します。 そのあとでスーパーユーサーと一ヨ殳ューサーの両方が利用 す。まずスーパーユーサーだけか利用できるコマンドを、 除き、これから紹介するコマンドを利用したはうが無難で したがって、やむをえす直接ファイルを編集する場合を

8. UNIX MAGAZINE 1998年11月号

連載 / IJN Ⅸの玉手箱ー⑨ pwd—mkdb : corrupted entry pwd—mkdb : at line # 14 pwd—mkdb : /etc/pw. ZE1043 : lnappropriate file type or format re—edit the password file? [y] : ■ こで、、 y " と答えるとふたたびェデイタか起動するの で、間違えた部分を修正することができます。一方、、、 n " を入力すると、それまでにおこなった変更を破棄してコマ ンドを終了します。 vipw がおこなうチェック 5 はフォーマットが正しいか どうかだけであり、エントリの内容まではチェックされな い点に注意してください。 adduser と rmuser vipw はパスワード・ファイルのロックやフォーマット のチェックはおこないますが、基本的にはエデイタでファ イルを変更するのと大差ありません。初めて使う人にとっ ては、お世辞にも親切なコマンドとはいえないでしよう。 FreeBSD や BSD/OS では (/usr/sbin/)adduser および (/usr/sbin/)rmuser を用いて、パスワード・フ ァイルに耐妾変更を加えすにユーサーの追加と削除ができ ます (Solaris 2. x では、 useradd 、 userdel 、 usermod などのコマンドが用意されています ) 。 いくつかオプションがありますが、 adduser を引数な しで実行すると、パスワード・ファイルのフィールドを それぞれ対言乱勺に指定することかできます。 FreeBSD で adduser を実行した様子を図 3 に示します。 adduser は、ますパスワード・ファイルやグループファ イル、 /etc/shells ファイルをチェックし、〕尺可能なグ ルーフ。やログインシェルなどを調べます。 次に、実際に個々のユーサーに関する情報を訊く前に これから追加するすべてのユーサーに共通するデフォルト 設定を u ュてきます。これに相当するのが 7 ~ 13 行目で、 それぞオ IJ 以下のような未をもちます 6 。 ・ログインシェル ( 7 行目 ) デフォルトで設定するログインシェルを入力します。図 5 より正確には、 vipw が pwd-mkdb -c" を実行することによってお こなわれるチェックてす。 6 adduser はパラメータを盟る際に、テフォルト直を、、ロ " のなかに 六します。テフォルト以タ P ) 値を指定する場は適切直をキーポード から入力する必要がありますが、デフォルト刎直をそのまま使うのであれ ばたんにリターンを入力します。 168 の例ではデフォルトは sh (/bin/sh) になっているの で、変更したけれは表示されている候補のなかから 1 つ を選んて指定します。 ・ホーム・ディレクトリ ( 9 行目 ) ューサーのホーム・ディレクトリを作成するディレクト リを指定します。図刎列ではデフォルト値の /home を そのまま使っているので、ユーサーのホーム・ディレ クトリは、、 / h 。 me / ユーサー名 " となります。 ・設疋ファイルの雛型 ( 10 行目 ) シェルの不鶤頁に応じた設疋ファイルの雛型 (skeleton) が置かれているディレクトリを指定します。デフォル トは /usr/share/skel で、これを指定すると、そのディ レクトリにあるすべての雛型ファイルがユーサーのホー ム・ディレクトリにコピーされます。、、 n 。 " を指定した 場合は、芻豐ファイルのコピーはおこなわれません。 雛型ファイルか置かれているディレクトリには、シェル にかぎらすさまざまな設定ファイルを、、 d 。 t. 設疋ファ イル名 " という名前 (dot. cshrc など ) で置くことがで きます。雛型ファイルは、ファイル名から、、 d 。 t " とい う文字列を削除した名前でコピーされます。 たとえば、 bash の雛型ファイルを新しく作った場合、 dot. bashrc という名前でここに置いておけば、新たに 追加したユーザーのホーム・ディレクトリに . bashrc と いう名前で自重加勺にコピーされます。 ・メッセージ・ファイル ( 11 行目 ) アカウントの作成後、そのユーザーに対してメッセー ジを送るかどうかを指定します。メッセージか書かれた ファイルを指定すると、新たに追加したユーザーに対し てメッセージがメールとして送られます。マシンを利用 するうえてせひ知っておいてもらいたい注意事項などが あれは、メッセージ・ファイルをあらかし乍ってお n 。 " を指定した場合、メッセージ くといいでしよう。 は送られません。 ・パスワード ( 13 行目 ) y を指定すると、ユーザーを追加する際にパスワード を訊かれます。 n と答えた場合、パスワードは設定 されす、 /etc/master. passwd のノヾスワード・フィ ル・ドは闌のままになります。 上記の質問に答えると、いよいよ各ューザーの j 助日作業 UNIX MAGAZINE 1998.11

9. UNIX MAGAZINE 1998年11月号

プログラミング・テクニック 図 1 割込みの禁止によるお也制胸 割込み割込み禁止 割込み許可 プロセス 1 プロセスの休眠 プロセスの切替え プロセス 2 割込み 時間 プロセスの切替え うなタイミングで作業をおこなったのかによって、最終 結果が正しくなったりおかしくなったりしました。このよ うな事態を競合状態と呼びます。それでは、パスワード・ ファイルの例では、本質的に何が問題の原因であったのか を考えてみましよう。 ます、、、管理者が 2 人いた " ことカげられます。管理 者が 3 人以 - E いても間題が複雑になるだけですから、、、管 理者が 2 人以 - E いた " ことと言い換えてもいいでしよう。 しかし、たんに管理者が複数いるだけでは間題は起きませ ん。パスワード・ファイルを編集する担当者を決めるな ど、いくっかの方法で可壁することができます。本当の問 題は、たんに管理者が複数いたことではなく、その複数の 管理者が同時に共有資源であるパスワード・ファイルをア クセスしたことです。これさえ分かればあとは簡単です。 複数の管理者か共有資源であるパスワード・ファイルに同 時にアクセスしないように排他制御をおこなえばよいので す。つまり、ある管理者がパスワード・ファイルにアクセ スしているときには、はかの管理者がアクセスできないよ うに制御するのです。 この排他制御の対象となる共有資源にアクセスする部分 のことを、オペレーティング・システムの世界では危険 領域と呼んでいます。また、さきほどの例における管理者 はプロセスに対応します。つまり、競合状態を回避するに は、、、複数のプロセスが同時に危険領域内に存在しない " ことか重要になります。そのためには、排他制御を実現す る方法がきわめて重要です。 排他制御の実現 それでは、排他制御を寒見するいくつかの去を調べて みましよう。 UNIX MAGAZINE 1998.11 オペレーティング・システムについて考えます。あるプ ロセスから別のプロセスへと制御が移るのは、割込み ( ク ロック割込みなど ) によってオペレーティング・システム かフ。ロセスを切り替えるためです。そこで、あるプロセス が危ド剱頁域に入るときに割込みを禁止してしまえば、事実 上ほかのプロセスが実行されることはないので排他的に処 理をおこなえます。このプロセスが危ド頁域を離れる場合 には再度割込みを許可することで、オペレーティング・シ ステムカワ。ロセスの切替えをできるようにしなけれはなり ません ( 図 1 ) 。 しかし、この方法にも間題はあります。割込みを禁止し たプロセスか再隻許可するのを忘れると、システムが正し く重川しなくなってしまう可能匪があります。割込みを禁 止するなどという危険な命令を普通のフログラムに許して しまうのは、オペレーティング・システムとしては失格で しよう。 それでは、ロック変数を用いるのはどうでしようか。 れは、プロセスが共有領域にアクセスできると仮定して、 この共有領域に変数を 1 っ準備し、危険領域に入るときに はこの変数に 1 を設定し、危険領域から出るときには変数 に 0 を設定するのです。こうしておけば、変数を見るだけ で危険領域に別のプロセスが入っているかどうかがすぐに 分かるので、複数のプロセスか 1 司じ危ド貞域に入ってしま うことを防げます。 この方法は、一見うまくいきそうに思えます。しかし、 タイミングによっては複数のプロセスが危険領域に入って しまうことがあります。 ます、最初のプロセスがロック変数の値を読み込みま す。この段階では変数の値は 0 です ( 図 2-1 ) 。 変数に 1 を設定する前にフロセスの切替えカ起こり、別の フロセスカ躾行されたとします。この別のプロセスは同様 117

10. UNIX MAGAZINE 1998年11月号

連載 / UN Ⅸの玉手箱 - ⑨ 図 3 adduser の実彳デ列 mypc# adduser —silent 冖 if you don't want see a11 warnings & questions. Use option Check /etc/shells Check /etc/master. passwd Check /etc/group Enter your default shell : bash csh date no sh [sh] : csh Your default sheII is : csh ー > /bin/csh Enter your default HOME partition : [/home] : Copy dotfiles from: /usr/share/skel Ⅱ 0 [/usr/share/skel] : Send message from file: /etc/adduser. message no [ Ⅱ 0 ] : ←デフォルトのログインシェル ←ホーム・ディレクトリ ←設定ファイノレの雛型 ←メッセージ・ファイル DO not send message Use passwords (y/n) [y] . Ok, let's go ・ ←パスワードを使用するか Don ' t worry about mistakes . 工 wi11 give you the Enter username [a—zO—9——] : jiro Enter fu11 name ロ : A0ki Jiro Enter sheII bash csh date Ⅱ 0 sh [csh] : csh Uid [ 1001 ] : Enter login class: default ロ : Login group jiro [jiro] : user Login group is ) ' . lnvite Jiro into other chance later tO correct any input ・ ←ューサー名 ←フルネーム ←ログインシェノレ ←ューサー ID ←クラス ←グループ groups : guest Ⅱ 0 [ Ⅱ 0 ] . ・クラス ( 21 行目 ) wheel ←その他のグループ Enter password ロ : ←パスワードを入力 Enter password again ロ : に入ります ( 17 行目以降 ) 。追加するユーサーごとに訊ね られる質問は以下のとおりです。 ・ユーサー名 ( 17 行目 ) UNIX MAGAZINE 1998.11 フォルト刎直として表示されています。 ューサー null に割り当てられているため、 1001 がデ とも小さな番号が表示されます。図の例では 1000 は ルトの値は 1000 から始まり、まだ使われていないもっ ューサー ID を指定します。 adduser か表示するデフォ ・ユーサー ID ( 20 行目 ) の値として、 7 行目で指定したシェルか表示されます。 ューサーのログインシェルを指定します。デフォルト ・ログインシェル ( 19 行目 ) 情報をカンマで区切って指定します。 力する場合は、 GECOS フィールドの書き方に従って を入力します。オフィスの場所や電話番号もあわせて入 GECOS フィールドに登録するユーサーのフルネーム ・フルネーム ( 18 行目 ) う促されます。 名として利用できる文字以外を使うと、入力しなおすよ 追加するユーサーのユーサー名を入力します。ューサー ューザーのクラスを指定します。 ・グループ ( 22 行目 ) ようにまとめて表示されます。 これらの作業カ鮗ると、設定したユーサー情幸ゞ以下の ューザーのパスワードを 2 回入力します。 ・パスワード ( 24 ~ 25 行目 ) ルーフ。がない場合は、、 n 。 " を入力してください。 を wheel グループに追加しています。追加登録するグ ューサー名が j 助日されます。図の例では、ユーサー jiro /group のなかで対応するグループのユーザーリストに 名を指定します 7 。ここでグループを指定すると、 /etc ー屬己のグルーフ以外で、ユーサーか所属すべきグループ ・その他のグループ ( 23 行目 ) ループ ID をグループ名で指定します。 パスワード・ファイルの GID フィールドに相当するグ Name : 」 1r0 Password: * * * * * * 7 複数のグループを指定する場偬は、グループ名をスペースてな切って入力 します。 169