ここでは, 端末からのログインを可能にするために必要な FreeBSD 側の設定について解説します. 既に端末を接続するポートが利用できるように kernel の設定をおこない, 端末が接続されているものと考えて, 解説を進め ます.
簡単に言えば, プロセス管理や初期化をおこなっている init
プロセス
に対して, ログイン名を読み込み login
プログラムを起動している
getty
を実行するように指示します.
これをおこなうには, /etc/ttys
の内容を編集する必要があります.
まず, su
コマンドで root になって, /etc/ttys
に以下の
変更を加えてください.
/dev
のエントリが含ま
れている行がまだ存在しなければ, これを /etc/ttys
に追加してく
ださい.
/usr/libexec/getty
が対象となるポートに対して
実行されるように指定してください. また, /etc/gettytab
ファイ
ル内の適切な getty
タイプのエントリを指定してください.
init
に /etc/ttys
を読み込みなおさせてく
ださい. また, 必要に応じて /etc/gettytab
を変更し, 上の 2で使用する
getty
のエントリを追加してください. このドキュメントではこの方
法については特に解説しませんので, gettytab(5) および getty(8) のマニュ
アルをご覧ください.
以下では, 上のステップについて詳しく解説します. 実例を用いて, 何をす べきかを解説していきます. Wyse-50 と, 古い IBM の 286 マシン上で通信 ソフト Procomm を使って VT-100 エミュレーションをおこなっているものを端 末の例として紹介します. また, Wyse は 2番目のポートに, 286マシンは 6 番目のポート (マルチポートのシリアルカード上のポート) に接続します.
/etc/ttys
について, より詳しくは, ttys(5) のマニュアルをご覧
ください.
/etc/ttys
へのエントリの追加既にエントリがある場合を除いて, まず初めに
/etc/ttys
にエントリを追加しなければいけません.
/etc/ttys
には, FreeBSDシステム上のログインを許可するすべての
ポートを記述します. たとえば, 一つ目の仮想コンソール ttyv0
のエン
トリもこのファイルにあります. このエントリのおかげで, コンソールからの
ログインが可能になっています. このファイルには, 他の仮想コンソール, シ
リアルポートおよび仮想端末のエントリも含まれています. 端末を接続する
場合は, そのポートの /dev
のエントリを, /dev
の部分
を省略して記述します.
FreeBSD のインストール当初の状態では, ttyd0
から ttyd3
までの,
初めの四つのシリアルポートのエントリが /etc/ttys
に記述され
ています. これらのポートのいずれかに端末を接続する場合は, 新たなエント
リを追加する必要はありません.
ここで紹介している例では, 既にファイルにエントリが存在する 2番目のシリ
アルポート, ttyd0
に Wyse-50 を接続しています. 一方, 6番目のシ
リアルポートに接続する 286マシン用のエントリは, 新たに追加してやらな
ければなりません. 以下に, エントリを追加した後の /etc/ttys
か
ら抜粋して示します.
ttyd1 "/usr/libexec/getty std.9600" unknown off secure
ttyd5
getty
タイプの指定次に, 端末からのログインを処理するプログラムの指定をおこな
います. FreeBSDでは, 標準的には /usr/libexec/getty
をこの目的
で利用しています. login:
プロンプトを送り出しているのは, このプロ
グラムです.
getty
プログラムは, コマンドラインパラメータとして,
getty
タイプ をとります. ただし, このパラメータは必須ではあ
りません. getty
タイプは, ボーレートやパリティといった, 接続され
た端末の特徴を表すものです. getty
プログラムは, 与えられた
getty
タイプに対応したこれらの特徴を /etc/gettytab
から
読み込みます.
ファイル /etc/gettytab
には, 新旧の端末に関する多数のエントリ
が記述されています. ほとんどの場合, std
という文字列で始まる名前
のエントリを使えば, 接続された端末に対してログインセッションを提供す
ることができます. これらのエントリを利用した場合, パリティは無視されま
す. 110 bps から 115200 bps までのボーレートに対応した std
のエン
トリがあります. 当然, 新たなエントリを追加することも可能です.
gettytab(5) のマニュアルに, さらに詳しく解説されています.
/etc/ttys
の getty
タイプの設定をする際は, 端末側の通信
パラメータの設定が, getty
タイプのものと一致していることを確認し
てください.
紹介している実例では, Wyse50 はパリティなし 38400 bps で接続していま
す. また, 286 マシンの方は, パリティなし 19200 bps の接続です. 以下は,
この段階でのこの二つの端末に関する /etc/ttys
の設定です.
ttyd1 "/usr/libexec/getty std.38400" unknown off secure
ttyd5 "/usr/libexec/getty std.19200"
ここで, 実行するプログラムを指定している 2番目のフィールドが, ダブルクォー
テーションに囲まれていることに注意してください. こうしないと,
getty
のタイプの指定が, つぎのフィールドとして判断されてしまう可
能性があるので, 十分注意することが必要です.
/etc/ttys
の 3番目のフィールドには, そのポートのター
ミナルタイプのデフォルトを指定します. ダイアルアップ用のポートの場合
は, ユーザがどのタイプの端末あるいは通信ソフトを利用してダイアルアップ
してくるかは分からないので, unknown
や dialup
を記述するの
が一般的です. 一方, 直結された端末の場合, ターミナルタイプが変わるこ
とはありませんから, このフィールドには実際のターミナルタイプを記述し
ます.
一般に, ユーザは .login
や .profile
などのファイル内で
tset
コマンドを使って, ターミナルタイプをチェックし, 必要ならば
ターミナルタイプの入力を求めるプロンプトを表示するようにします. この
とき, /etc/ttys
の中でターミナルタイプが指定されていれば,
このプロンプトを表示せずに先に進むことが可能です.
FreeBSD 上で, どのターミナルタイプを利用できるかは,
/usr/share/misc/termcap
をご覧ください. このファイルには, お
よそ 600 のターミナルタイプが定義されています. 必要ならば, 新たなエン
トリを追加することも可能です. 詳しくは termcap(5) のマニュアルをご覧く
ださい.
紹介している例では, Wyse-50 のターミナルタイプは Wyse-50 です (もっ
とも他のタイプをエミュレートすることも可能ですが, ここでは Wyse-50 モー
ドで使用します. ). また, 286マシン上では Procomm が VT-100 エミュレー
ションをおこなうように設定されています. 以下が, まだ未完成の
/etc/ttys
の関連部分です.
ttyd1 "/usr/libexec/getty std.38400" wy50 off secure
ttyd5 "/usr/libexec/getty std.19200" vt100
/etc/ttys
のつぎのフィールド, つまり 4番目のフィー
ルドは, そのポートをアクティブにするかどうかの設定です. このフィールド
に ``on'' を指定すると, init
プロセスが2番目のフィールドに書かれ
たプログラム, getty
を実行し, ログインのためのプロンプトを送り出
すようになります. このフィールドに ``off'' を記述すると, getty
は起動されず, よってこのポートからのログインもできなくなります.
ということで, 当然このフィールドには on
を指定します. 以下が
/etc/ttys
です. それぞれのポートを on
にしました.
ttyd1 "/usr/libexec/getty std.38400" wy50 on secure
ttyd5 "/usr/libexec/getty std.19200" vt100 on
とうとう最後のフィールドの設定です. (実際にはここでは触れ
ませんが, オプショナルなwindow
の設定のフィールドも存在するので,
ほぼ最後のフィールドといった方が正確かもしれません. ) 最後のフィールド
では, そのポートが安全かどうかを指定します.
ここで, 「安全」なポートとはどういうポートのことでしょう?
これは, root のアカウント (または, ユーザ ID が 0 のアカウント) がロ グインしてもよいポートということです. 安全でないポートでは, root のロ グインは許可されません.
では, どのように安全なポートとそうでないポートを使えばよいでしょう?
ポートを安全ではないとすることで, そのポートに接続された端末からは,
root のログインを禁止することができます. FreeBSDシステムの root のパス
ワードを知っている人は, まず一般ユーザとしてログインしなければなりませ
ん. スーパユーザの特権を得るためには, そのうえで su
コマンドを
利用しなければいけません.
これによって, root アカウントが不正に利用された場合に, その経過を調査
する上で二つの記録を利用できるようになります. ユーザのログインと
su
コマンドは, 共にシステムのログに記録を残します (また, ログイン
は wtmp にも記録を残します. ).
ポートを安全なものとして指定すると, その端末からの root のログインが可
能になります. root のパスワードを知っている人は, 単に root としてログ
インできます. この場合は, 当然ログインの記録や su
コマンドのログ
は残りません.
では, どちらを使うべきでしょうか?
単純に ``insecure'' を使うのがよいでしょう. 公共の場所にある訳ではな
い端末や, 鍵のかかったドアの内側にある端末にも ``insecure'' を指
定する方がよいでしょう. スーパユーザの特権が必要な場合でも, ログイ
ンして su
を実行するのは, ごく簡単なことなんですから.
以下に, ようやく完成した /etc/ttys
のエントリに端末の場所を表
すコメントを追加したものを示します.
ttyd1 "/usr/libexec/getty std.38400" wy50 on insecure # Kitchen
ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure # Guest bathroom
init
にファイル /etc/ttys
の再読み込みをさせる
FreeBSD をブートすると, 最初に起動されるプロセス, init
が
/etc/ttys
を読み込んで, 記述されているプログラムを利用可能な
ポートに対して実行し, ログインプロンプトを送り出させます.
/etc/ttys
の編集が終わった後, init
に変更を認識させるた
めに, わざわざ FreeBSD をブートしなおしたくはないでしょう. このような
場合のために, init
は, SIGHUP (hangup) シグナルを受信すると,
/etc/ttys
を読み込みなおすようになっています.
/etc/ttys
の変更を保存したら, 以下のようなコマンドを実行して,
init
に対して SIGHUP を送信します.
kill -HUP 1
(init
プロセスのプロセス ID は 常に 1です. )
すべての設定が正しくおこなわれ, すべてのケーブルがただしく接続されてい て, かつ端末の電源が入っていれば, 端末にはログインプロンプトが表示され ているはずです. これで, これらの端末からの最初のログインの準備が完了で す!