por que o chvt funciona bem como um usuário comum em um terminal virtual, mas não sob o X?

7

Quando eu estou logado como usuário "paul" em um terminal virtual (/ dev / tty2 por exemplo) e eu digito "chvt 4" eu mudo para o terminal virtual para / dev / tty4 bem.

Quando, como usuário "paul" eu digite "chvt 7", eu mudo para o sistema X window. Muito bem.

No entanto, dentro de um xterm, se como usuário "paul" eu digite "chvt 2" eu recebo o seguinte erro: "Não foi possível obter um descritor de arquivo referente ao console"

O comando chvt só funciona dentro de um xterm quando eu o executo como "root", nesse caso, ele fica feliz em me mudar para um terminal virtual.

Isso parece muito quebrado para mim. Alguém sabe por que isso é assim?

    
por pbr 13.11.2009 / 00:04

1 resposta

11

De um ponto de vista de segurança, lembre-se de que o X foi projetado para ser usado na rede e no console físico. Terminais virtuais não são, então um login no VT físico é um animal de segurança diferente do X.

De este relatório de erros do Debian sobre o mesmo erro em fgconsole . Aqui está a análise de por que chvt e amigos não podem acessá-lo pelo X:

It doesn’t only affect fgconsole, but also chvt, openvt and any other kbd utility which tries to get a console file descriptor. These programs do their job by trying to open/ioctl these files (in this order):

/proc/self/fd/0         (is a pseudo tty in your case)
/dev/tty                (also PTY)
/dev/tty0               (only accessible to root)
/dev/vc/0               (doesn’t exist nowadays)
/dev/console            (root)
std{in,out,err}         (PTY)

As none of these is able to respond to a VT_GETSTATE ioctl, fgconsole and friends fail.

A solução preferida para o problema é usar sudo . Existem outras opções, mas elas são menos preferíveis no caso geral devido a problemas de segurança - você pode decidir que sua situação pode tolerar uma ou outra (ênfase minha):

So there is no real solution, if I don't use sudo?

     

Você não pode alterar as permissões de /dev/tty0 ou /dev/console sem   abrindo um buraco de segurança gigante . Definir os programas desejados suid é um   opção, mas eu ficaria longe disso. sudo é muito mais seguro e pode ser   controlado com mais detalhes.

    
por 19.11.2009 / 18:14