Estou brincando e tentando simplificar / fortalecer meu prompt de login tty para exibir um mínimo de informações do sistema. Modifiquei meu /etc/issue
and /etc/motd
para ficar vazio e toquei ~/.hushlogin
. Isso limpou quase tudo!
Fiquei com o seguinte como uma experiência de login:
hostname login: user
Password:
user@hostname:~$
Eu não gosto que ele mostre o nome do host no prompt de login, e eu o persegui. Isso me levou à página de manual doagetty
, onde modifiquei os arquivos de serviço:
/lib/systemd/system/[email protected]
, e
/lib/systemd/system/[email protected]
,
adicionando a --nohostname
opção à linha ExecStart da seguinte forma:
[Service]
ExecStart=-/sbin/agetty --nohostname --keep-baud 115200,38400,9600 %I $TERM
Isso funciona muito bem, exceto quando o usuário insere uma senha errada. Em seguida, ele reverte para o prompt antigo e mostra o nome do host.
Login realizado com sucesso:
login: user
Password:
user@hostname:~$
Falha no login:
login: user
Password:
Login incorrect
hostname login:
Ainda mais estranho, se eu deixar o console desatendido por ~ 60 segundos após o login incorreto, há uma meia impressão da palavra login, ele faz uma pausa e mostra o prompt de login correto.
login: user
Password:
Login incorrect
hostname login:
Log
login:
Alguma ideia para explicar esse comportamento? Eu olhei para a fonte para agetty e então para shadow (login.c), e posso ver onde a reexibição do prompt de login acontece após uma falha, mas está referenciando PAMs, e eu realmente não entendo essa parte do sistema linux.
O comportamento é simples de explicar e remonta a décadas, desde as primeiras versões do Unix.
getty
imprime o primeiro prompt de login, mas se a autenticação falhar, o segundo prompt e os subseqüentes serão impressos pelologin
programa, quegetty
se sobrepôs até então.O
login
programa tem um limite no número de tentativas de login antes de simplesmente sair e permite que o serviço de login seja restaurado pelo processo #1. Em um sistema com terminais reais que são remotos, isso teria fechado o dispositivo de terminal, fazendo com que ele definisse DTR como zero, fazendo com que um modem conectado interrompesse a conexão. A ideia era dificultar a adivinhação de senhas e contas pela força bruta em uma conexão remota. (Ele dependia de várias chamadas telefônicas, mesmo com tarifas locais, sendo caras para um invasor.) Há também um cronômetro de inatividade que causa a mesma coisa. (A ideia disso é um pouco diferente; para evitar que os circuitos telefônicos sejam alocados indefinidamente por um terminal remoto que ainda não tenha uma sessão de login.)Num terminal virtual, ou num terminal real que seja local , não há modem, nem linha telefónica, nem operadora para largar; e esses mecanismos que repetem o prompt de login e que definem um cão de guarda são em grande parte inúteis.
login
poderia simplesmente esperar indefinidamente sem watchdog e sair e reciclar o serviço de login de forma barata em cada falha de autenticação. Mas eles ainda existem e ainda são empregados, no entanto.Infelizmente para você, enquanto o
agetty
programa do util-linux permite que você configure pelo menos esta parte do prompt, ologin
programa do shadow não. Seu prompt de login está embutido no código do programa.Isso não é universal, observe. Em, digamos, um sistema FreeBSD, o prompt emitido pelo
login
programa é configurável pelalogin_prompt
configuração em/etc/login.conf
.Leitura adicional
login.conf
. Manual de Formatos de Arquivo FreeBSD. 2011-07-08.