Linux 安全注意力键 (SAK) 处理

日期:

2001 年 3 月 18 日

作者:

Andrew Morton

操作系统的安全注意力键 (Secure Attention Key, SAK) 是一种安全工具,用于防御特洛伊木马密码捕获程序。它是一种不可战胜的方式,可以杀死所有可能伪装成登录应用程序的程序。需要教导用户在登录系统之前输入此组合键序列。

在 PC 键盘上,Linux 提供两种相似但不同的 SAK 方式。一种是 ALT-SYSRQ-K 序列。您不应该使用此序列。它仅在内核编译时支持 sysrq 功能时才可用。

生成 SAK 的正确方法是使用 loadkeys 定义组合键序列。无论内核是否编译了 sysrq 支持,此方法都将有效。

当键盘处于原始模式时,SAK 可正常工作。这意味着一旦定义,SAK 将杀死正在运行的 X 服务器。如果系统处于运行级别 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 级别安全系统所要求的“真正 SAK”。本文作者不清楚原因。

  2. 在 PC 键盘上,SAK 会杀死所有打开 /dev/console 的应用程序。

    不幸的是,这包括一些您实际上不希望被杀死的程序。这是因为这些应用程序错误地保持 /dev/console 打开。请务必向您的 Linux 发行商投诉!

    您可以使用以下命令识别将被 SAK 杀死的进程:

    # 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 杀死。这是 gpm 中的一个错误。它应该关闭标准输入。您可以通过找到启动 gpm 的 initscript 并将其更改为如下所示来解决此问题:

    旧版

    daemon gpm
    

    新版

    daemon gpm < /dev/null
    

    Vixie cron 似乎也有这个问题,需要同样的处理。

    此外,一个著名的 Linux 发行版在其 rc.sysinit 和 rc 脚本中包含以下三行:

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

    这些命令导致通过 initscripts 启动的**所有**守护进程的文件描述符 3、4 和 5 都附加到 /dev/console。因此 SAK 会杀死它们全部。一个解决方法是简单地删除这些行,但这可能会导致系统管理应用程序出现故障——请务必充分测试。