Почему команда su игнорирует SIGSTOP?

С помощью bash вы бы написали

while read a b rest; do
    printf "%s %-20s %s\n" "$a" "$b" "$rest"
done < info.txt
0
24.01.2020, 18:50
1 ответ

Устраним основные ошибки:

  1. Сигнал не поставлен в очередь. Очереди — это специфическая вещь, когда речь идет о сигналах, и не происходит с этим конкретным сигналом. Сигнал маскируется .
  2. Этот конкретный сигнал не являетсяSIGSTOP. Символ suspзаставляет линейную дисциплину отправлять SIGTSTP.

Как и во многих других вещах, противоречащих представлениям 1980-х годов о командах loginи su, корнем поведения здесь является PAM.

Он suэтого не делает. И этого не происходит в операционных системах, отличных от тех, которые используют библиотеку Linux PAM . Например, на BSD, использующих библиотеку OpenPAM, этого не происходит.

Это делает модуль Linux PAM с именем pam_unix. Точнее, это библиотека -, поставляемая по умолчанию для «разговора» misc_conv(), вызываемая внутри кода pam_unix, которая делает это. Он специально маскирует SIGTSTPво время запроса элемента ввода, якобы для того, чтобы библиотека могла очистить . Вот почему сигнал не доставляется до тех пор, пока ввод не будет введен.

OpenPAM также поставляет модуль pam_unixPAM. Это вызывает функцию «разговора» по умолчанию openpam_ttyconv()из библиотеки OpenPAM -. Последний не маскирует сигналы .Нет -, кажется, никто не заметил, что можно приостановить suпри запросе пароля на FreeBSD и др. и терминал останется с выключенным эхом. Возможно, это связано с тем, что операционная -система -поставляла командные -линейные оболочки во FreeBSD, у всех есть библиотеки редактирования строк, которые сразу -настраивают параметры терминала, когда они берут на себя запрос на ввод и выполняют свое собственное эхо. в любом случае.

Дополнительная литература

1
28.01.2020, 02:38

Теги

Похожие вопросы