Depois de entrar su
quando solicitado a digitar uma senha:
user@debian:~$ su
Password:
Não consigo enviar SIGSTOP
( ctrl+Z
) do meu teclado (o mesmo terminal) - nada acontece. Portanto, a única maneira de sair é digitar alguma senha (certa ou errada). Por que não posso suspender su
assim?
UPD: Parece que ctrl+Z
está na fila. Assim, ao enviar ctrl+Z
- nada acontece, mas depois de digitar Enter
o sinal chega e su
fica parado. Ainda não consigo entender tal comportamento. Esse comportamento padrão é para todos os tipos Unix ou apenas Linux?
Vamos esclarecer alguns erros básicos:
SIGSTOP
. Osusp
personagem faz com que a disciplina de linha envie umSIGTSTP
.Tal como acontece com tantas coisas que contradizem a visão dos anos 80 dos comandos
login
esu
, a raiz do comportamento aqui é o PAM.Não está
su
fazendo isso. E isso não acontece em sistemas operacionais diferentes daqueles que usam a biblioteca Linux PAM . Isso não acontece nos BSDs usando a biblioteca OpenPAM, por exemplo.É o módulo PAM fornecido pelo Linux PAM chamado
pam_unix
fazendo isso. Mais especificamente, é a função de "conversação" padrão fornecida pela bibliotecamisc_conv()
, chamada dentro dopam_unix
código, que está fazendo isso. Ele mascara especificamenteSIGTSTP
enquanto solicita um item de entrada, ostensivamente para que a biblioteca possa limpar arquivos . É por isso que o sinal não é entregue até que a entrada seja inserida.O OpenPAM também fornece um
pam_unix
módulo PAM. Isso chama a função de "conversa" padrão fornecida pela biblioteca OpenPAMopenpam_ttyconv()
. Este último não mascara os sinais . Ninguém parece ter notado que se pode suspendersu
no prompt de senha no FreeBSD et al. e o terminal ficará com o eco desligado. Isso ocorre possivelmente porque os shells de linha de comando fornecidos pelo sistema operacional no FreeBSD têm bibliotecas de edição de linha, que reajustam imediatamente as configurações do terminal quando assumem o comando para solicitar entrada e fazem seu próprio eco de qualquer maneira.Leitura adicional