tela GNU: ‘Não é possível abrir seu terminal '/ dev / pts / 3' - por favor, verifique’

2

Existe um daemon no meu sistema, ele é executado dentro de uma instância de tela e tudo o que é feito de um usuário não-oficial. Eu adicionei-me ao grupo de sudo especial permitindo-me executar a tela deste usuário, mas quando eu tento usá-lo, por exemplo,

sudo -u that_user -H /usr/bin/screen -R

Eu entendi o assunto deste post.

Pesquisando, descobri que esta mensagem significa que a tela não pode capturar ou fazer a saída para o arquivo que eu realmente uso ao chamá-la. Uma resposta comum para isso é chmod my / dev / pts / N para ser rw para os outros, mas lembro que de alguma forma consegui evitar isso antes. Talvez eu tenha perdido algum ambiente para o sudo?

Em particular, estou tentando conectar ao daemon rtorrent em execução na tela de um usuário comum via sudo, o SO é o Gentoo amd64. Aqui está como a tela é chamada a partir do script rc:

    start-stop-daemon \
        --start \
        --make-pidfile \
        --pidfile /var/run/rtorrentd.pid \
        --background \
        --user $USER \
        --env HOME="${PWHOME:-/home/$USER}" \
        --name rtorrent \
        --exec /usr/bin/screen -- -D -m -S rtorrentd /usr/bin/rtorrent

Finalmente resolvemos a solução real:

alias rtorrent="urxvt -hold -e /bin/bash -c \"chmod o+rw \\'tty\\' && sudo -u rtorrent -H screen -r rtorrentd\""
    
por tijagi 04.02.2013 / 18:53

2 respostas

5

Como você está executando screen como usuário especial, o usuário especial precisa acessar o seu conteúdo. A única maneira de conseguir isso é alterar as permissões no dispositivo.

Uma abordagem melhor é usar o recurso multiusuário da tela, que permite que os usuários se conectem à sessão de tela de outro usuário sem usar o sudo. Isso requer a configuração da raiz binária do setuid screen :

sudo chmod u+s /usr/bin/screen

Em seguida, crie uma nova sessão de tela, dando ao soquete um nome significativo:

screen -S torrent

Dentro desta sessão de tela, ative o modo multiusuário e autorize os outros usuários:

^A: multiuser on
^A: acladd tijagi

Você deve então poder anexar a sessão de tela como você mesmo:

screen -x that_user/torrent
    
por 04.02.2013 / 19:11
1

A propriedade do dispositivo terminal não é alterada ao usar o sudo, mas a alteração de suas permissões não é a única solução (não é uma ótima solução, porque abre uma brecha na segurança).

A abordagem comum é iniciar uma sessão de "script" (mas não salvar a saída, enviá-la para a lixeira), o que funciona porque ela usa outro dispositivo de terminal.

sudo -su USER script -c bash /dev/null
# new terminal with sufficient permissions for screen
screen -R

Ou tudo em um comando, por exemplo, como alias em seu .bashrc :

alias user-screen-attach='sudo -su USER script -c "screen -x" /dev/null'
    
por 27.06.2016 / 09:42