Por que há uma chamada para 'clear_console' em '~ / .bash_logout'?

1

Quando eu faço logon com o mesmo usuário em tty1 e tty2 e inicio uma sessão do servidor X em tty1 - assim que eu saio de tty2 , a sessão do servidor X em tty1 falha .

Este parece ser um bug conhecido:

Como você pode ler nos relatórios de erros, o problema está na chamada para clear_console in ~/.bash_logout . Se eu remover essa linha, tudo funciona bem.

Minha pergunta:

Não notei nenhuma alteração. (Obviamente, além do servidor X não estar mais travando). O console está sendo limpo quando eu saio - independente de eu ter removido a linha. Então, qual é a chamada para clear_console para o primeiro lugar?

    
por Jayjayyy 21.06.2018 / 13:09

4 respostas

2

Acho que isso tem a ver com privacidade e segurança. Não seria sensato deixar aberto aos olhos de ninguém o que você fez na sua sessão final. No meu Debian, a entrada completa em .bash_logout é:

if [ "$SHLVL" = 1 ]; then
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi

$SHLVL é 1 quando é a primeira casca da cadeia. (Você pode iniciar um novo shell a partir de um shell e isso incrementa o SHLVL .) Quando você terminar a primeira sessão e passar o console e avisar a ninguém, o console deve manter o conteúdo da sessão inacessível a olhos não autorizados. e assim acontece.

    
por 21.06.2018 / 13:32
2

Seu tty está sendo limpo devido a uma configuração no sistema init. Hoje em dia, provavelmente systemd .

for systemd set TTYVTDisallocate to no.

to achieve this, run systemctl edit getty@tty1 and enter the code below

[Service]
TTYVTDisallocate=no

link

Um comentário aponta para uma página mais longa que também menciona uma configuração que poderia ser usada sob o sysvinit: a opção --noclear de getty .

link

Finalmente, parece que o recurso claro em getty (e, portanto, a opção --noclear de getty) não existe em todas as versões.

As the system administrator, you can configure the console to always be cleared before showing the login prompt. The easiest way to do that is to use mingetty instead of getty; you lose support for serial consoles but gain a few features such as screen clearing.

- Como limpar o terminal após o logout ? resposta publicada em 2010.

Portanto, bash_logout pode ter sido a única maneira de limpar a tela sem alternar para um getty diferente.

    
por 21.06.2018 / 13:43
2

O mundo quer que você limpe sua tela.

Como eu disse no link e na discussão da lista de discussão indiretamente referenciada ☺…

Querer não limpar um terminal virtual entre o logoff e o logon subseqüente é muito nadar contra a maré, como Greg Wooledge e outros descobriram. A presença de saída sensível de usuários privilegiados, ou chefes, remanescentes após o logoff tem sido um problema de segurança para Unices (e de fato outros sistemas operacionais de acesso remoto) desde a década de 1970, e é preciso muito esforço para desfazer todos as coisas que as pessoas colocaram para evitar esse problema. Como você observou, eles colocaram vários mecanismos sobrepostos que fazem isso.

  • Muitos sistemas têm um comando clear_console em seus scripts de logoff de shell como padrão. (Isto é problemático por si só, já que não funciona bem com programas gráficos rodando no terminal virtual do kernel # 1, e não funciona com nenhum outro tipo de terminal, virtual ou real.)

    Este comando tem para ser removido.

  • O padrão em programas getty destinados a terminais virtuais, como mingetty , é limpar o terminal. (Ele faz isso antes do logon, o que significa que a saída do terminal pode permanecer sem correção se um serviço de login TTY for interrompido. Ironicamente, essa funcionalidade teria sido melhor posicionada em login , o que graças às necessidades do PAM ainda está sendo executado no log -off.)

    A opção --noclear deve ser implantada para desabilitar isso. Nos sistemas operacionais systemd, isso envolve a gravação de um ou mais arquivos de substituição de arquivo de unidade, a alteração da configuração ExecStart ou simplesmente a indicação de [email protected] em um arquivo de unidade local de sua própria criação.

  • A unidade de serviços de modelo [email protected] fornecida pelo systemd define TTYVTDisallocate=yes que instrui o systemd a limpar um terminal virtual do kernel. (Isso novamente não funciona com nenhum outro tipo de terminal, nem mesmo com terminais virtuais do espaço do usuário, como parcialmente refletido em seu nome.)

    Isso também deve ser removido, novamente com um modelo de serviço diferente ou diferente por [email protected] .

Eles não são totalmente sobrepostos, é claro. mingetty não é útil para terminais reais conectados via dispositivos seriais; O clear_console é, estranhamente, parte do pacote shell Bourne Again e não é invocado por pessoas que têm o shell Korn, Z, Almquist, Fish, Watanabe ou outro como o shell de login interativo de sua conta de usuário; e o mecanismo systemd TTYVTDisallocate não tem aplicabilidade para sistemas operacionais não-systemd.

Como eu disse na discussão da lista de discussão há vários anos, console_clear é duplamente desnecessário. Desde 2011, o emulador de terminal integrado do Linux tem suportado a sequência de controle ED 3 para limpar o buffer de rolagem, portanto, a troca de terminais virtuais que têm esses efeitos colaterais prejudiciais não é necessária em primeiro lugar. Eu adicionei um comando console-clear ao conjunto de ferramentas nosh há vários anos, que emite essa seqüência de controle (e é, portanto, utilizável com mais do que apenas o emulador de terminal integrado ao Linux, bem como trabalhando em uma conexão remota). O comando ncurses clear também hoje em dia sabe emitir as seqüências de controle relevantes, se o terminfo assim o disser.

E é claro que console-terminal-emulator limpa seu buffer de exibição no desligamento do terminal como padrão.

Leitura adicional

por 21.06.2018 / 18:28
2

De acordo com dlocate , clear_console é parte do pacote (Debian) bash. Não faz parte das fontes bash a montante. O registro de alterações do pacote informa quando / de onde veio:

 -- Matthias Klose   Thu, 23 Mar 2006 01:16:22 +0100

bash (3.1-3) unstable; urgency=low

...

  Merge from Ubuntu:
  * clear_console: New helper program to clear the console, including
    the scrollback buffer.
  * /etc/skel/.bash_logout: Install it again and use clear_console.
    Ubuntu #29405. Closes: #331504.

Os relatórios de erros mencionados indicam o motivo pelo qual foram adicionados:

  • Ubuntu # 29405 , janeiro de 2006 'claro' não é executado antes de 'sair '

    When logging out of a F1-F6 terminal, all of your existing output of activies are left on the screen even when the next login screen appears. The screen should be cleared before the new login appears, so private output won't be viewed by other users.

  • Debian # 331504 , outubro de 2005 bash: Por favor, forneça um padrão / etc / skel / .bash_logout

    It would be nice if bash would provide a default .bash_logout in /etc/skel for users to use by default to clean up the screen when login through console this is common request, specially in multi-user environments where people don't want others to see what they were working on.

Aliás, isso foi mencionado em conjunto com ncurses aqui:

O primeiro foi resolvido com a adaptação de um recurso do xterm patch # 107 em 1999 (para o console do Linux), enquanto o último não deu em nada devido a incompatibilidades de licença.

    
por 22.06.2018 / 01:10