login プログラムの動作

login はログイン名(ユーザ名)を引数として agetty により起動されます。設定ファイルは、/etc/login.def です。

/etc/passwd
root:x:0:0::/root:/bin/bash
nobody:x:99:99:nobody:/:
tomoaki:x:100:100:Tomoaki Nishiguchi:/home/tomoaki:/bin/bash

起動された login は、まず /etc/passwd を読み込みます。このファイルには、ユーザ名、パスワード、ユーザ ID、プライマリグループ ID、ユーザのフルネーム、ホームディレクトリ、ログインシェルが記載されています。パスワードフィールドが x となっている場合は、シャドウパスワードの利用を示します。

/etc/shadow
root::9804:0:::::
nobody:*:9797:0:::::
tomoaki::::::::

シャドウパスワードを利用している場合は、次に /etc/shadow を読み込みます。このファイルの第一フィールドにはユーザ名、第二フィールドには暗号化されたパスワードが記載されています。この例では、root と tomoaki にはパスワードが設定されていないことになります。また、パスワードフィールドの先頭文字が "*" あるいは "!" であれば、そのユーザのログインは許可されません。この例では、nobody のログインは許可されません。

パスワードが設定されている場合は、パスワードプロンプトを表示し、パスワードの入力を待ちます。

Password: 

パスワード確認後、ログイン名が root であれば /etc/securetty を調べます。

/etc/securetty
# This file defines which devices root can log in on.

# These are the ttys on the physical console:
console
tty1
tty2
tty3
tty4
tty5
tty6

このファイルに列記されていないデバイスからの root ログインは許可されません。

問題がなければ、カレントディレクトリをホームディレクトリに変更し、環境変数の設定を行います。デフォルトで設定される環境変数は表 1 の通りです。

表 1 設定される環境変数
環境変数名値(ユーザ名 tomoaki)
HOME/home/tomoaki
SHELL/bin/bash
PATH/usr/local/bin:/bin:/usr/bin
USERtomoaki
LOGNAMEtomoaki
MAIL/var/spool/mail/tomoaki

環境変数設定後、ホームディレクトリ内のハッシュファイル .hushlogin の存在を確かめます。また、同時に環境変数 HUSHLOGIN の設定も行われます。ハッシュファイルが存在しなければ、/etc/motd の内容を表示します。ハッシュファイルが存在する場合は、ここでログインシェルを起動します。

Linux 2.4.18.

/var/log/lastlog を読み込み、最後にログインされた日時などを表示します。

Last login: Thu Sep 19 17:41:23 +0900 2002 on tty1.

メールボックスのパスを環境変数 MAIL から所得し、メールボックスの状態を表示します。

No mail.

そして、最後にログインシェルを起動します。

login はログインシェルを起動する際に、fork-and-exec ではなく exec のみを用います。

参考文献


前へ 起動プロセス入門 次へ