进入后su
当我提示输入密码时:
user@debian:~$ su
Password:
我无法从我的键盘(同一个终端)发送SIGSTOP
( ctrl+Z
) - 没有任何反应。所以退出的唯一方法是输入一些(正确或错误的)密码。为什么我不能su
以这种方式暂停?
UPD:似乎ctrl+Z
已经排队了。因此,在发送时ctrl+Z
- 什么都没有发生,但是在输入Enter
信号到达并su
停止之后。仍然无法理解这种行为。这是所有类 Unix 还是仅适用于 Linux 的标准行为?
让我们清除一些基本错误:
SIGSTOP
。该susp
字符使线路规则发送一个SIGTSTP
.与许多与 1980 年代对
login
andsu
命令的观点相矛盾的事情一样,这里行为的根源是 PAM。它不是
su
这样做的。除了使用Linux PAM库的操作系统之外,它不会发生在操作系统上。例如,在使用 OpenPAM 库的 BSD 上不会发生这种情况。它是 Linux PAM 提供的 PAM 模块,命名为
pam_unix
执行此操作。更具体地说,misc_conv()
在代码内部调用的库提供的默认“对话”函数pam_unix
正在执行此操作。SIGTSTP
它在提示输入项目时专门屏蔽,表面上是为了让库可以清理. 这就是为什么在输入输入之前不传送信号的原因。OpenPAM
pam_unix
也提供了一个 PAM 模块。这将调用 OpenPAM 库提供的默认“对话”函数openpam_ttyconv()
。后者不屏蔽信号。似乎没有人注意到su
在 FreeBSD 等人的密码提示下可以暂停。并且终端将关闭回声。这可能是因为 FreeBSD 上操作系统提供的命令行 shell 都具有行编辑库,当它们接管提示输入并进行自己的回显时,它们会立即重新调整终端设置。进一步阅读