Descobri hoje que a tela em execução como um usuário diferente em que eu sudo não funcionará!
ie
ssh bob@server # ssh into server as bob
sudo su "monitor" -
screen # fails: Cannot open your terminal '/dev/pts/0'
Eu tenho um script que é executado como o usuário "monitor". Nós o executamos em uma sessão de tela para ver a saída na tela. O problema é que temos um número de usuários que efetuam login com sua própria conta (ou seja, bob, james, susie, etc ...) e, em seguida, fazem o sudo no usuário "monitor". Dar a eles acesso ao usuário "monitor" está fora de questão.
sudo
gnu-screen
luckytaxi
fonte
fonte
sudo su "user" -
. Por que não usarsudo -u user -s
?sudo su
- acho que é exatamente com o que as pessoas se acostumam (no meu caso, é porque você não precisa conhecer nenhum sinalizador de sudo)sudo su
- acho que nunca li a página de manual do sudo :)Respostas:
Tente executar
script /dev/null
como o usuáriosu
antes de iniciar a tela - é um pequeno truque, mas deve deixar a tela feliz.fonte
script
pode ser usado para iniciarscreen
. Então você só precisa sair duas vezes (uma vez parascreen
, uma vez parasu
). (Isso é algo ascript
página homem pode esclarecer para você, se você tomar o tempo para lê-lo ...)sudo -u bob script -q -c 'screen -dr myscreen' /dev/null
. Então você tem apenas um terminal para sair / desconectar.script
abre seu próprio dispositivo tty, de propriedade do usuário que o executou (veja/dev
e você verá ele aparecer depois de executarscript
).screen
então pega o dispositivo tty (que pertence ao usuário em execução,screen
para que não tenha problemas para acessá-lo). É um trabalho total de hackers, mas funciona. Olhando para algumas de minhas máquinas, parece que novas versões da tela parecem instalar o setuid-root, o que também funciona, mas significa que você tem outro binário do setuid-root flutuando, o que deixa algumas pessoas justificadamente desconfortáveis.Eu estou usando uma função de invólucro
screen
para os usuários que eu devosudo su
. Esta é a função do wrapper que eu adicionei ao (s) usuário (s)~/.bashrc
:Isso me permite usar todas as opções e parâmetros
screen
que eu possa querer usar. Estou pensando em colocar essa função em todo o sistema.fonte
Supondo que eles estejam SSHing no host de qualquer maneira, você pode adicionar as chaves públicas ssh para cada usuário que precisar acessar a conta do monitor no arquivo ~ monitor / .ssh / allowed_keys. Em seguida, na máquina remota de cada usuário, eles podem executar
fonte
Supondo que estamos falando sobre este erro:
Aqui está uma lista (pode ser usada como "alias gobob", por exemplo):
Explicação:
Isso iniciará um shell (como o shell de login) como usuário bob. O usuário bob inicia
script
, que é instruído a chamar um bash (poderia ser dash ou ksh ...) e uma cópia da sessão é descartada.fonte
Provavelmente teria que alterar as permissões no dispositivo em questão ou adicionar monitor a um grupo que tenha permissão para ler esse dispositivo, essa seria minha primeira inclinação. Mas você teria que avaliar as implicações de segurança de fazer isso.
fonte
Você diz que faz:
Eu estou pensando sobre o traço à direita. Eu costumo fazer:
O traço (de acordo com a página de manual do su) diz ao su para "tornar o shell um shell de login". Isso significa que ele fornecerá todos os scripts de inicialização comuns do shell e definirá coisas como PATH e HOME corretamente.
fonte
sudo su - username
esudo su username -
faça a mesma coisa.Acabei de acertar este problema. Resolvido com
chmod +rw $(tty)
antes de executar o sudo. O problema com esta solução é que qualquer pessoa pode se conectar e bisbilhotar seu terminal depois disso.fonte
gpg
por exemplo). E certamente ele nunca vai ser em um sistema com os usuários mal-intencionados que iria assistir aotty
e sniff senhas ...