4. ログインしたときに何が起こるのか?

ログインするというのは、(getty にある名前を教える ことで) 自分が誰なのかをコンピュータに認識させることです。その際、 (分かり易い名前の) login と呼ばれるプログラムが 起動され、これがパスワードを受け取り、そのマシンを使う権限を持ったユーザである かどうかの認証を行います。もし使う権限がなければ、ログインしようとしても 拒否されます。権限があれば、login プログラムはいくつかの前提処理を 済ましたうえで、シェル (shell) というコマンド インタープリタ (command interpreter) をスタートさせます。(もちろん、 gettylogin をひとつの プログラムとすることも可能ではあります。両者が別々に分かれているのは、 歴史的な理由からであり、ここでは特に取り上げるようなものではありません。)

ここでは、シェルが表示されるまでに、システム上で起こる事柄について もう少し詳しく説明します(後ほど、ファイルシステムのパーミッションについて 解説する際に、この章の知識が必要になります)。ユーザは、ログイン名と パスワードによって同定されます。ログイン名は、/etc/passwd というファイルを見て、確認されます。このファイルは、 一行ごとにそれぞれのユーザアカウントの情報が記述されたファイルです。

行ごとに複数あるフィールドのうち、アカウントパスワードの欄は、 暗号化されています(場合によっては、この暗号化されたフィールドは、 /etc/shadow という別のファイルに保存され、より 厳しいパーミッション設定がされることがあります。これによって、パスワード のクラッキングをより困難にするのです)。アカウントパスワードとして入力した 文字も、まったく同じ方法で暗号化され、login プログラム により正当なパスワードかどうかの確認がなされます。この方法が安全である といえるのは、平文パスワードを暗号化するのは簡単でも、その逆は難しいと いう事実によっています。それゆえ、誰かが暗号化された後のパスワードを 見たとしても、それによってそのアカウントを使えるようにはなりません。 (逆に、自分のパスワードを忘れてしまったら、それをもう一度確認することも できなくなります。何か別のパスワードに変更する以外にありません。)

ログインに成功したら、利用している自分のアカウントに関連付けられた すべての権限を利用できるようになります。また、そのアカウントは、 なんらかの グループ (group) に属していると認識される場合もあります。 グループとは、一定の名前を付けられたユーザの集団であり、システム管理者に よって設定されます。グループには、その個々のメンバーの権限とは別に、 グループ独自の権限を設定することができます。また、ユーザは、複数のグループ のメンバーとなることもできます。(Unix の権限の仕組みの詳細については、 パーミッションの章をご覧ください。)

(注意すべきなのは、通常はユーザ名やグループ名というのは名前で呼んでいます が、実際には、数字の ID として内部に保存されているということです。 passwd ファイルには、アカウント名とそのユーザ ID と の対応関係が書かれていて、/etc/group ファイルには、グループ名とその数字からなる グループ ID との対応関係が書かれています。アカウント名やグループ名を処理する コマンドは、この両者の変換を自動的に行っています。)

アカウントの情報欄には、そのユーザの ホームディレクトリ (home directory) に関する情報も含まれています。ホームディレクトリとは、 Unix ファイルシステム上でそのユーザ個人のファイルが保管されている 場所のことです。最後に、アカウントの情報欄には、そのユーザの シェル (shell) に関する情報もあります。シェルとは、コマンドインタープリタのことであり、 login プログラムがユーザからのコマンドを受け取るために 起動するものです。