No OS X Darwin, por que posso interferir na entrada de texto nas sessões do usuário usando cat?

2

OS X Darwin: Interrompendo sessões de terminal em identidades de usuários

Como, em resumo:

com cat < /dev/ttys_ , no terminal.

Minha pergunta

Esse comportamento do OS X 10.9.2 Darwin parece estranho para mim, e eu gostaria de entender por que isso está acontecendo, e se é ou não um bug real do sistema operacional ou do aplicativo.

Etapas para reproduzir o comportamento

  1. abra duas janelas do Terminal.
  2. Anote os caminhos dos dispositivos, por exemplo, " /dev/ttys001 ", " /dev/ttys002 "
  3. Em uma janela do Terminal (ou seja, /dev/ttys001 ), execute sudo -u [some other user] sh .
  4. Na outra janela do Terminal (por exemplo, /dev/ttys002 ), execute cat < /dev/ttys001 (ou seja qual for o caminho do dispositivo).
  5. Voltar na primeira janela, digite o texto.

Comportamento inesperado

Quando eu digito um texto na janela do Terminal relevante, há um atraso perceptível; Além disso, os caracteres não aparecem de forma confiável nas duas janelas. Alguns caracteres são ecoados para a segunda janela, alguns aparecem na primeira janela e alguns parecem desaparecer.

Consequências inesperadas

A razão pela qual isso me preocupa é que parece que um comando simples executado por um usuário não privilegiado pode interromper completamente a sessão de outro usuário.

Possíveis causas antecipadas

  1. Um bug de entrada de texto no Terminal 2.4 (326)
  2. Um bug de privilégios de usuário no OS X 10.9.2 Darwin
por muddletoes 09.03.2014 / 18:44

2 respostas

4

3. Um mal entendido do que está acontecendo.

Você não está interferindo nas sessões de texto nas identidades dos usuários. Apenas um único usuário está executando uma sessão aqui, vamos chamá-la de Alice. Alice está logada no console e executando um monte de aplicativos, incluindo alguns emuladores de terminal.

Em um desses terminais, Alice executa sudo -u bob sh . Agora há um shell rodando sob a conta de Bob, mas o terminal é fornecido por Alice. O processo do emulador de terminal está sendo executado como o usuário alice .

Quando você executa cat /dev/ttys42 como Alice, você está bisbilhotando e até interferindo com o emulador de terminal executado por Alice, não com o shell que é executado por Bob.

Você está vendo um fenômeno estranho quando você digita, porque cada byte é transmitido de forma um tanto aleatória para qualquer um dos processos que estão lendo entrada do terminal. Normalmente, há apenas um único processo de primeiro plano em um terminal: o mecanismo de controle de tarefas e, em particular, o gerenciamento do primeiro plano grupo de processos e o sinal SIGTTIN garantem isso.

Observe que /dev/ttys42 é de propriedade de Alice. Se Bob executar um emulador de terminal, /dev/ttys42 será de propriedade de Bob e não legível ou gravável por Alice, portanto, Alice não poderá interferir nesse nível. No entanto, se esse terminal estiver na sessão GUI de Alice, Alice poderá interferir no nível da GUI (por exemplo, bisbilhotando ou injetando pressionamentos de teclas ou fazendo com que Bob acredite que ele está interagindo com o terminal que ele iniciou quando está interagindo com um aplicativo executado) por Alice).

    
por 10.03.2014 / 01:29
0

Para gravar um arquivo, neste caso, um terminal, você precisa ter permissões de gravação para ele. Por padrão, um arquivo tty é de propriedade (e gravável) pelo usuário que o usa e também pode ser gravado pelo grupo tty , que por padrão contém novamente root . Então, não, não é permitido brincar com as sessões de outras pessoas.

    
por 09.03.2014 / 18:55