Por que redirecionar 'script' para / dev / null / allow 'screen' para funcionar enquanto é su'ed como outro usuário?

36

Eu fui processado em um usuário para executar um script de longa execução em particular. Eu queria usar a tela, mas recebi a mensagem de erro "Não é possível abrir o seu terminal '/ dev / pts / 4' - por favor, verifique."

Então eu pesquisei no Google e encontrei uma postagem no fórum que instruía a executar $ script '/dev/null/' . Eu fiz isso e então eu pude filtrar.

Por que isso funciona? O que o su está fazendo nessa tela não pode ser executado como o usuário su'ed? Por que redirecionar 'script' para / dev / null fazer isso é impedido de outra forma? Está usando script para escrever um log como o usuário original em algum lugar?

    
por Ichorus 04.04.2011 / 18:07

2 respostas

40

Bem, tecnicamente você não está redirecionando nada aqui.

Chamar script /dev/null faz com que script salve todo o texto datilografado em /dev/null , o que na prática significa descartar o conteúdo.

Veja man script para informações detalhadas e util-linux-ng para implementação ( misc-utils/script.c ).

Isso não tem nada a ver com screen , na verdade. Por que isso funciona é invocar script tem um efeito colateral de criar um pseudo-terminal para você em /dev/pts/X . Dessa forma, você não precisa fazer isso sozinho, e a tela não terá problemas de permissão - se você su do usuário A para o usuário B , invocando diretamente screen você tenta pegar a posse do pseudo-terminal do usuário A . Isso não terá sucesso a menos que você esteja root . É por isso que você vê a mensagem de erro.

    
por 04.04.2011 / 18:34
5

Para enviar diretamente para sua janela de terminal, o programa em execução precisa ser capaz de gravar em seu terminal de controle. Se você estiver usando um xterm ou ssh ou alguma outra conexão virtual (em oposição a um terminal conectado diretamente ao vivo), seu terminal de controle é um pseudo tty (pty).

Seu arquivo é configurado com permissão de gravação apenas para você quando você faz logon, caso contrário, outros usuários podem rabiscar em seu monitor (ou lê-lo). Assim, quando você su para outro usuário (e esse usuário não é root), esse usuário não tem acesso ao arquivo subjacente.

No entanto, uma E / S mais complexa, como a tela, requer acesso direto ao pty para funcionar, é mágico controlar toda a tela. É quando você se depara com problemas com a pessoa que está executando o comando sem acesso adequado ao terminal de controle.

Redirecionar o script para / dev / null faz com que a tela não tente gravar no terminal de controle, para que ele não atinja o problema de permissão.

    
por 04.04.2011 / 18:33