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 键。
注意
据说 Linux SAK 并非实现 C2 级别安全系统所要求的“真正 SAK”。本文作者不清楚原因。
在 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 会杀死它们全部。一个解决方法是简单地删除这些行,但这可能会导致系统管理应用程序出现故障——请务必充分测试。