Linux 2.4.2 セキュア・アテンション・キー (Secure Attention Key; SAK) 操作
2001 年 3 月 18 日   Andrew Morton <andrewm@uow.edu.au>


オペレーティングシステムのセキュア・アテンション・キーは、トロイの木馬型
パスワード捕捉プログラムに対する防護として提供されるセキュリティ・ツール
です。ログイン・アプリケーションを装う全てのプログラムを無効にする強力な
方法です。ユーザには、システムにログインする前にキー・シーケンスを入力
するように伝えておく必要があります。

PC キーボードからの場合、Linux には、SAK を提供する二つの似たような、しかし
異なる方法があります。一つは ALT-SYSRQ-K シーケンスです。このシーケンスは
使うべきではありません。これは、SYSRQ サポート付きでカーネルがコンパイル
されている場合にのみ利用できます。

SAK を生成する適切な方法は、`loadkeys' を使用してキー・シーケンスを定義
することです。これは、SYSRQ サポートがカーネルに組み込まれているか否かに
関係なく機能します。

SAK は、キーボードが RAW モードのとき正しく動作します。これは、ひとたび
定義されると、SAK が動作中の X サーバを kill しにいくことを意味します。
システムのランレベルが 5 の場合、X サーバは再起動します。これは、あなたが
望む動作でしょう。

どのようなキー・シーケンスを使うべきでしょうか？ えー、CTRL-ALT-DEL は
マシンをリブートするのに使われています。CTRL-ALT-BACKSPACE は X サーバに
対する魔法です。CTRL-ALT-PAUSE を使うことにしましょう。

rc.sysinit (もしくは rc.local) ファイルに、コマンドを追加してください。

        echo "control alt keycode 101 = SAK" | /bin/loadkeys

これだけです！ SAK キーを再プログラムできるのは、スーパーユーザだけです。


メモ
====

1: Linux SAK は、C2 レベルセキュリティを実装するシステムに要求される
   "true SAK" であるとは言われません。理由は分かりません。

2: PC キーボードでは、SAK は /dev/console をオープンしている全てのアプリ
   ケーションを kill します。

   残念ながら、これには、実際には kill されてほしくないアプリケーションが
   多く含まれてしまいます。なぜかというと、これらは、誤って /dev/console
   をオープンしたまま保持しているからです。これについては、あなたの Linux
   ディストリビュータに文句を言いましょう！

   次のコマンドで、SAK により kill されることになるプロセスを調べることが
   できます。

        # ls -l /proc/[0-9]*/fd/* | grep console
        l-wx------    1 root     root           64 Mar 18 00:46 /proc/579/fd/0 -> /dev/console

   次に、

        # ps aux|grep 579
        root       579  0.0  0.1  1088  436 ?        S    00:43   0:00 gpm -t ps/2

   これにより、`gpm' は SAK により kill されます。これは gpm のバグです。
   標準入力を閉じておくべきなのです。gpm を起動する初期化スクリプトを
   見つけ、次のように変更すれば、この問題を回避できます。
   
   変更前:

        daemon gpm

   変更後:

        daemon gpm < /dev/null

   Vixie cron もこの問題を抱えているようです。同じように対処する必要が
   あります。

   また、ある有名な Linux ディストリビューションの rc.sysinit と rc
   スクリプトには、次の三行が含まれています。

        exec 3<&0
        exec 4>&1
        exec 5>&2

   これらのコマンドにより、初期化スクリプトから起動される全てのデーモンが、
   /dev/console に接続されたファイル記述子 3, 4, 5 を持つことになります。
   このため、SAK はそれらを全て kill してしまいます。回避策は、単にこれら
   の行を削除することですが、これにより、システム管理アプリケーションが
   誤動作してしまうかもしれません。問題がないか全てテストしてください。

------------------------------------------------------------
翻訳団体： JF プロジェクト < http://www.linux.or.jp/JF/ >
翻訳日：   2004/03/31
翻訳者：   川崎 貴彦 <takahiko(a)hakubi.co.jp>
