进一步阅读

进一步阅读

输入后su当我提示输入密码时:

user@debian:~$ su
Password:

我无法从键盘(同一终端)发送SIGSTOP( ) - 什么也没有发生。ctrl+Z因此退出的唯一方法是输入一些(正确或错误的)密码。为什么我不能以su这种方式暂停?

UPD:似乎正在ctrl+Z排队。因此,当发送时ctrl+Z- 没有任何反应,但在输入Enter信号到达后并su停止。还是无法理解这样的行为。这是所有类 Unix 系统的标准行为还是仅适用于 Linux?

答案1

让我们澄清一些基本错误:

  1. 信号不是排队。当涉及到信号时,排队是一个特定的事情,并且不会发生在这个特定信号上。信号是蒙面的
  2. 这个特殊的信号不是 SIGSTOP。该susp字符导致线路纪律发送SIGTSTP.

login正如许多与 20 世纪 80 年代的和命令观点相矛盾的事情一样su,这里行为的根源是 PAM。

它不是su做这个的。除了使用Linux PAM图书馆。例如,在使用 OpenPAM 库的 BSD 上就不会发生这种情况。

正是 Linux PAM 提供的名为 PAM 的模块pam_unix来做这件事。更具体地说,是在代码misc_conv()内部调用的库提供的默认“对话”函数pam_unix正在执行此操作。SIGTSTP它在提示输入项时专门屏蔽,表面上是为了图书馆可以清理。这就是为什么在输入之前不会传递信号的原因。

OpenPAMpam_unix也提供 PAM 模块。这将调用 OpenPAM 库提供的默认“对话”函数openpam_ttyconv()。后者不屏蔽信号。似乎没有人注意到suFreeBSD 等上可以在密码提示符处暂停。并且终端将关闭回声。这可能是因为 FreeBSD 上操作系统提供的命令行 shell 都有行编辑库,当它们接管提示输入并进行自己的回显时,它们会立即重新调整终端设置。

进一步阅读

相关内容