Linux 2.4.2 セキュア・アテンション・キー (Secure Attention Key; SAK) 操作 2001 年 3 月 18 日 Andrew Morton オペレーティングシステムのセキュア・アテンション・キーは、トロイの木馬型 パスワード捕捉プログラムに対する防護として提供されるセキュリティ・ツール です。ログイン・アプリケーションを装う全てのプログラムを無効にする強力な 方法です。ユーザには、システムにログインする前にキー・シーケンスを入力 するように伝えておく必要があります。 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 翻訳者: 川崎 貴彦