FreeBSD ハンドブック : シリアル通信 : シリアル端末 : 設定
Previous: ケーブルとポート
Next: トラブルシューティング

13.2.3. 設定

ここでは, 端末からのログインを可能にするために必要な FreeBSD 側の設定について解説します. 既に端末を接続するポートが利用できるように kernel の設定をおこない, 端末が接続されているものと考えて, 解説を進め ます.

簡単に言えば, プロセス管理や初期化をおこなっている init プロセス に対して, ログイン名を読み込み login プログラムを起動している getty を実行するように指示します.

これをおこなうには, /etc/ttys の内容を編集する必要があります. まず, su コマンドで root になって, /etc/ttys に以下の 変更を加えてください.

  1. 端末を接続するポートの /dev のエントリが含ま れている行がまだ存在しなければ, これを /etc/ttys に追加してく ださい.
  2. /usr/libexec/getty が対象となるポートに対して 実行されるように指定してください. また, /etc/gettytab ファイ ル内の適切な getty タイプのエントリを指定してください.
  3. デフォルトのターミナルタイプを指定してください.
  4. 対象となるポートを ``on'' に設定してください.
  5. そのポートが ``secure'' であるかどうかを指定してくださ い.
  6. 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) のマニュアルをご覧 ください.

13.2.3.1. /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   

13.2.3.2. getty タイプの指定

次に, 端末からのログインを処理するプログラムの指定をおこな います. FreeBSDでは, 標準的には /usr/libexec/getty をこの目的 で利用しています. login: プロンプトを送り出しているのは, このプロ グラムです.

getty プログラムは, コマンドラインパラメータとして, getty タイプ をとります. ただし, このパラメータは必須ではあ りません. getty タイプは, ボーレートやパリティといった, 接続され た端末の特徴を表すものです. getty プログラムは, 与えられた getty タイプに対応したこれらの特徴を /etc/gettytab から 読み込みます.

ファイル /etc/gettytab には, 新旧の端末に関する多数のエントリ が記述されています. ほとんどの場合, std という文字列で始まる名前 のエントリを使えば, 接続された端末に対してログインセッションを提供す ることができます. これらのエントリを利用した場合, パリティは無視されま す. 110 bps から 115200 bps までのボーレートに対応した std のエン トリがあります. 当然, 新たなエントリを追加することも可能です. gettytab(5) のマニュアルに, さらに詳しく解説されています.

/etc/ttysgetty タイプの設定をする際は, 端末側の通信 パラメータの設定が, 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 のタイプの指定が, つぎのフィールドとして判断されてしまう可 能性があるので, 十分注意することが必要です.

13.2.3.3. デフォルトのターミナルタイプの指定

/etc/ttys の 3番目のフィールドには, そのポートのター ミナルタイプのデフォルトを指定します. ダイアルアップ用のポートの場合 は, ユーザがどのタイプの端末あるいは通信ソフトを利用してダイアルアップ してくるかは分からないので, unknowndialup を記述するの が一般的です. 一方, 直結された端末の場合, ターミナルタイプが変わるこ とはありませんから, このフィールドには実際のターミナルタイプを記述し ます.

一般に, ユーザは .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

13.2.3.4. ポートを利用可能にする

/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

13.2.3.5. ``secure'' なポートの指定

とうとう最後のフィールドの設定です. (実際にはここでは触れ ませんが, オプショナルな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

13.2.3.6. 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です. )

すべての設定が正しくおこなわれ, すべてのケーブルがただしく接続されてい て, かつ端末の電源が入っていれば, 端末にはログインプロンプトが表示され ているはずです. これで, これらの端末からの最初のログインの準備が完了で す!


FreeBSD ハンドブック : シリアル通信 : シリアル端末 : 設定
Previous: ケーブルとポート
Next: トラブルシューティング