xref: /linux/Documentation/translations/zh_CN/security/sak.rst (revision 1260ed77798502de9c98020040d2995008de10cc)
1*a2f80991Szhangwei.. SPDX-License-Identifier: GPL-2.0
2*a2f80991Szhangwei.. include:: ../disclaimer-zh_CN.rst
3*a2f80991Szhangwei
4*a2f80991Szhangwei:Original: Documentation/security/sak.rst
5*a2f80991Szhangwei
6*a2f80991Szhangwei:翻译:
7*a2f80991Szhangwei
8*a2f80991Szhangwei 张巍 zhangwei <zhangwei@cqsoftware.com.cn>
9*a2f80991Szhangwei
10*a2f80991Szhangwei===========================
11*a2f80991SzhangweiLinux 安全注意键(SAK)处理
12*a2f80991Szhangwei===========================
13*a2f80991Szhangwei
14*a2f80991Szhangwei:日期: 2001年3月18日
15*a2f80991Szhangwei:作者: Andrew Morton
16*a2f80991Szhangwei
17*a2f80991Szhangwei操作系统的安全注意键是一种安全工具,用于防止系统上存在特洛伊
18*a2f80991Szhangwei木马密码捕获程序。它提供了一种无法规避的方式,用于终止所有可
19*a2f80991Szhangwei能伪装成登录应用程序的程序。用户需要在登录系统之前输入这个安
20*a2f80991Szhangwei全键。
21*a2f80991Szhangwei
22*a2f80991Szhangwei从键盘输入的方式生成安全注意键,Linux提供了两种相似但不同的
23*a2f80991Szhangwei方式。一种是按下ALT-SYSRQ-K组合键,但你不应该使用这种方式,
24*a2f80991Szhangwei因为它只有在内核启用了SYSRQ支持的情况下才能使用。
25*a2f80991Szhangwei
26*a2f80991Szhangwei正确生成SAK的方式是使用``loadkeys``来定义键序列。无论内核是否
27*a2f80991Szhangwei编译了sysrq支持,这种方式都能够正常工作。
28*a2f80991Szhangwei
29*a2f80991Szhangwei当键盘处于原始模式时,SAK 能够正常工作。这意味着,一旦定义,
30*a2f80991SzhangweiSAK 将终止正在运行的 X 服务器。如果系统处于运行级别 5,X 服
31*a2f80991Szhangwei务器将重新启动,这正是你希望发生的情况。
32*a2f80991Szhangwei
33*a2f80991Szhangwei你应该使用什么键序列? CTRL-ALT-DEL用于重启机器,CTRL-ALT-
34*a2f80991SzhangweiBACKSPACE对X服务器有特殊作用。我们将选择CTRL-ALT-PAUSE。
35*a2f80991Szhangwei
36*a2f80991Szhangwei在你的rc.sysinit(或rc.local)文件中,添加以下命令::
37*a2f80991Szhangwei
38*a2f80991Szhangwei    echo "Control Alt keycode 101 = SAK" | /bin/loadkeys
39*a2f80991Szhangwei
40*a2f80991Szhangwei就这样!只有超级用户才能重新编程SAK键。
41*a2f80991Szhangwei
42*a2f80991Szhangwei.. note::
43*a2f80991Szhangwei
44*a2f80991Szhangwei  1. Linux SAK据说并不是C2级安全性的系统所要求的"真正的SAK"。
45*a2f80991Szhangwei     该原因作者也不知道
46*a2f80991Szhangwei
47*a2f80991Szhangwei  2. 在键盘输入的模式下,SAK会终止所有打开了/dev/console的应用
48*a2f80991Szhangwei     程序。
49*a2f80991Szhangwei
50*a2f80991Szhangwei     但是不幸的是,这也包括一些你实际上不希望被终止的程序。原因是
51*a2f80991Szhangwei     这些程序错误的保持了/dev/console的打开状态。务必确保向你的
52*a2f80991Szhangwei     Linux发行版提供商投诉这个问题。
53*a2f80991Szhangwei
54*a2f80991Szhangwei     你可以用以下的命令来识别将被SAK终止的程序::
55*a2f80991Szhangwei
56*a2f80991Szhangwei        # ls -l /proc/[0-9]*/fd/* | grep console
57*a2f80991Szhangwei        l-wx------    1 root     root           64 Mar 18 00:46 /proc/579/fd/0 -> /dev/console
58*a2f80991Szhangwei
59*a2f80991Szhangwei     然后::
60*a2f80991Szhangwei
61*a2f80991Szhangwei        # ps aux|grep 579
62*a2f80991Szhangwei        root       579  0.0  0.1  1088  436 ?        S    00:43   0:00 gpm -t ps/2
63*a2f80991Szhangwei
64*a2f80991Szhangwei     所以``gpm``会被SAK杀死。这应该gpm中的bug。它应该正在关闭标准输入,
65*a2f80991Szhangwei     你可以通过查找initscript来启动gpm并更改它:
66*a2f80991Szhangwei
67*a2f80991Szhangwei     老的::
68*a2f80991Szhangwei
69*a2f80991Szhangwei        daemon gpm
70*a2f80991Szhangwei
71*a2f80991Szhangwei     新的::
72*a2f80991Szhangwei
73*a2f80991Szhangwei        daemon gpm < /dev/null
74*a2f80991Szhangwei
75*a2f80991Szhangwei     Vixie cron似乎也有这个问题,并且需要采取相同的处理方式。
76*a2f80991Szhangwei
77*a2f80991Szhangwei     此外,某个著名的Linux发行版在它的rc.sysinit和rc scripts的脚本中
78*a2f80991Szhangwei     包含了以下三行代码::
79*a2f80991Szhangwei
80*a2f80991Szhangwei        exec 3<&0
81*a2f80991Szhangwei        exec 4>&1
82*a2f80991Szhangwei        exec 5>&2
83*a2f80991Szhangwei
84*a2f80991Szhangwei     这些代码会导致所有的守护进程将文件描述符3、4和5关联到/dev/console85*a2f80991Szhangwei     所以SAK会将他们所有都终止。一个简单的解决办法就是删掉这些代码,但是
86*a2f80991Szhangwei     这样做会导致系统管理应用程序出现异常 - 要对所有的情况进行充分测试。
87