どんな本?
3つの問い
p.31より。
私たちは、次の3つの問いをくり返し考えながら、Unix システムを学んでいくのである。
3つの問いとは以下の通り。
- それは何をするのか。
- それはどんな仕組みなのか。
- 自分にも試してみることはできるか。
演習
本を元に、自分で作った演習問題と解答。
答えを見る前に自分の頭で考えた答えなので、正しいことを書いている保証は全くない。
鵜呑みにしないように。
ログイン~プログラム実行~ログアウト(p.31)
それは何をするのか?
- ログインプロンプトにユーザ名とパスワードを入れてログインする。
- シェルが起動する。
- シェル上でコマンドを入力すると色々なプログラムが実行される。
- 特別なコマンド(exitとか)を入力すると、シェルが終了しログアウトする。
それはどんな仕組みなのか?
ログインプロセスがいる。
このプロセスがユーザ名とパスワードを受け取ると、しかるべき場所(/etc/passwdとか)と照合する。
(この辺でPAMとか絡んだりするだろうがそれは置いておく)
認証が成功したらシェルを起動(exec)する。
シェルは、与えられたパスについて、存在するかどうか、実行権があるかどうかなどをチェックする。
実行ファイルであることがわかれば、そのファイルをexecする。
exitが与えられた場合はプロセスを終了し、親プロセス(この場合ログインプロセス)に処理を戻す。
自分にも試してみることはできるか?
これを全て実装するのであれば、最低限必要なものは以下の通り。
- ログインプログラム
- シェルプログラム
- シェルが実行するプログラム
パスワードを平文ファイルで保存するとか、セキュリティ完全無視で考えれば無理ではない……と思う。
今のところやり方が全くわからないのは、
- OS起動時にログインプログラムを起動する方法
ぐらいか。
それ以外は今すぐにできなくても、方法はなんとなく検討がつくし、調べ方もわかる。多分。