“Não é possível definir o grupo de processos do terminal” durante o su para outro usuário como shell de login

16

Nota: Por favor, leia as informações atualizadas começando com "EDIT" perto do meio do caminho deste post - o ambiente e o pano de fundo deste problema mudou

Eu tenho uma instalação padrão do Debian 6.0 aqui que eu decidi me juntar aos repositórios do Debian Testing. Eu fiz isso trocando as referências aos repositórios do Squeeze no meu sources.list para usar os repositórios do Testing.

Após a instalação do pacote e uma reinicialização, recebo o seguinte erro ao tentar su - para outro usuário:

root@skaia:~# su joebloggs -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell

Se eu omitir o -, isso não ocorre.

Observe que os usuários podem se tornar root corretamente, isso só parece acontecer ao mudar de raiz para outra pessoa e usar o - para obter o ambiente do usuário.

O Google é praticamente inútil aqui. As únicas coisas que posso encontrar são referências de 2011 em relação ao pacote sux , que parece ter sido corrigido no tempo médio.

Isso parece e cheira muito como um erro de atualização, corrigível ajustando o pacote correto da maneira correta. Eu só não tenho idéia de onde começar - além disso, meu sistema funciona completamente normalmente e como esperado.

EDITAR

Isso agora está acontecendo comigo em uma máquina Debian stable como descrito acima. Nenhuma atualização ou qualquer coisa desta vez, apenas para cima estável.

Sim, um ano depois. Ainda não tenho ideia do que diabos é o problema.

Aqui está o que parece agora (não mudou muito):

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
terraria@skaianet:~$ tty
/dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/0
crw--w---- 1 root root 136, 0 Oct 10 19:21 /dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/
crw--w---- 1 root root 136, 0 Oct 10 19:21 0
crw--w---- 1 root root 136, 2 Sep 22 17:47 2
crw--w---- 1 root root 136, 3 Sep 26 19:30 3
c--------- 1 root root   5, 2 Sep  7 10:50 ptmx

Um strace gerado assim:

root@skaianet:~$ strace -f -o tracelog su terraria -

.. também revela um comportamento confuso. Essas mensagens são bastante confusas. Algumas linhas escolhidas:

readlink("/proc/self/fd/0", "/dev/pts/0", 4095) = 10
#Error code 10? 
15503 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address)
#Yes there is, and I can interact with it normally
15503 ioctl(255, TIOCGPGRP, [32561])    = -1 ENOTTY (Inappropriate ioctl for device)

Eu vinculei a saída completa desta sessão de strace - tudo o que fiz foi executar o comando su e imediatamente ctrl + d out do terminal.

    
por Mikey T.K. 26.07.2012 / 02:22

2 respostas

32
  • su - username é interpretado pelo seu su para significar shell "run username como um shell de login interativo"
  • su username - é interpretado pelo seu su para significar "execute o seguinte comando não interativo ( - ) como nome de usuário "
  • o último só funcionou porque:
    • seu su transmite argumentos à direita para sh para análise
    • sh usa - para significar "executar como um shell de login (leia /etc/profile , ...)"

Mas o que você está realmente interessado é: por que não-interativo ? O compartilhamento do terminal de controle entre o pai privilegiado e o filho não privilegiado deixa você vulnerável a " escalonamento de privilégios de pushdown TTY ", também conhecido como TIOCSTI bug, então, a menos que você realmente precise dele su se destaca dele . Quando você usou o formulário su username - , su inferiu que você não precisa de um terminal de controle .

Somente processos com um terminal de controle podem ter líderes de sessão que manipulam grupos de processos (fazem o controle de tarefas); o traço que você deu é bash detectando que não pode ser um líder de sessão.

Você menciona:

Where it gets stranger is that both forms work fine on Ubuntu and CentOS 6, however on vanilla Debian, only the first form works without error.

Ignorando variantes como sux e sudo , existem pelo menos três [1] versões de su no Linux: coreutils , util-linux e shadow-utils a partir das quais O Debian vem. A manpage deste último aponta:

This version of su has many compilation options, only some of which may be in use at any particular site.

e o Debian vem com a bandeira old_debian_behavior ; outras versões podem ter opções similares de tempo de compilação / tempo de execução. Outra razão para a variabilidade pode ser que houve algum debate [2 ] para saber se su deve ser usado para eliminar privilégios dessa maneira e se o erro TIOCSTI é, portanto, um bug (Redhat originalmente closed it "WONTFIX" ).

[1]: edite: adicione SimplePAMApps e hardened-shadow a isso.

[2]: O Solar Designer tem algumas (antigas) opiniões que acho que vale a pena ler.

    
por 16.06.2014 / 13:29
1

Eu verificaria a propriedade e as permissões em / dev / pts * ou para uma nova configuração do udev relacionada a dispositivos / dev / pts, que não foi substituída durante o processo de atualização.

Você também pode tentar descobrir qual syscal está gerando o erro executando como root:

strace -f su - username 2>stderr.log
    
por 26.07.2012 / 03:22