Por que o FreeBSD requer que programas de terminal sejam iniciados como root?

2

No FreeBSD, todos os programas gráficos de terminal (por exemplo, xterm, rxvt) parecem estar instalados com o setuid root, ou com setuid root wrappers.

No Linux, esse não é o caso de nenhuma distribuição que já usei.

Por que o FreeBSD requer executáveis ou wrappers setuid para programas de terminal? Essa parece ser uma ótima maneira de introduzir brechas de escalonamento de privilégios.

    
por DanL4096 18.09.2014 / 22:37

3 respostas

3

O% original xterm era um programa set-uid. Uma razão pela qual é necessário poder gravar no arquivo utmp para registrar quem estava usando o dispositivo. Outro motivo foi que xterm precisa obter a propriedade do dispositivo pseudo-tty usado como entrada / saída padrão e o erro para definir essa propriedade para o usuário que o acessa.

Enquanto a maioria dos sistemas operacionais Unix / Unix não usam mais os bits setuid ou setgid para atingir o mesmo objetivo, mas métodos diferentes e mais seguros, o FreeBSD parece ter mantido a solução original.

    
por 19.09.2014 / 01:20
1

Com exceção de algum relatório / correção de bug temporário (não encontrado no changelog da porta), o FreeBSD não requer que o xterm seja setuid, e não usou isso com o xterm desde 2011 . O comentário do mantenedor da porta disse

- Don't set suid bit. In our implementation, grantpt() and unlockpt() don't
  actually have any use, because PTY's are created on the fly and already have
  proper permissions upon creation (see src/lib/libc/stdlib/ptsname.c) [1]

Refere-se às alterações feitas em 2008 :

  The pts(4) driver also implements this feature, which means
  posix_openpt() will now return PTY's that are created on the fly.

Dada essa pergunta em 2014 , parece que o OP estava olhando para um sistema antigo. Ou (isso acontece), o sistema do OP pode ter sido modificado por alguém, adicionando o bit setuid.

Dependendo da plataforma (e sua idade), o xterm usaria setuid ou setgid para essas operações:

  • abrindo o pseudo terminal
  • atualizando o utmp (ou utmpx)

Originalmente, as implementações do pseudo-terminal do BSD (e outras) exigiam que o aplicativo localizasse o dispositivo especial e, em seguida, abria-o usando os direitos setuid root . O Unix98 acabou com a primeira parte (encontrando o dispositivo especial), começando com em 1999 . A maioria das implementações pseudo-terminais por volta de 2005 eliminou a necessidade de a aplicação ser instalada usando setuid . Foi esquecido no FreeBSD por qualquer motivo.

Da mesma forma, os aplicativos podem precisar de permissões de grupo (via setgid ) para atualizar o arquivo utmp (ou utmpx) que é usado por last e who . xterm forneceu o uso da biblioteca utempter para este propósito desde 2000 . A porta do FreeBSD para o xterm usa esse recurso, então ele não requer o setgid.

Outros programas podem ser instalados como setuid ou setgid para as mesmas operações, mas até 2014 era improvável que qualquer programa de terminal precisasse do permissões setuid para o usuário root . Quando usado em outros programas (como o urxvt), provavelmente foi negligenciado por seus mantenedores.

    
por 21.05.2016 / 22:21
0

Bom ponto, eu não notei que este ainda era o caso, mas no entanto. Existem maneiras de limitar o dano que ele pode causar, talvez com este novo capsicum em que estão trabalhando. Mas para todos os aplicativos X (Xorg) eu diria, primeiro Wayland tem que entrar e então podemos falar sobre segurança em um computador que está rodando X de verdade. Esses pequenos problemas, como o xterm sendo capaz de anunciar um terminal, podem ser resolvidos em cinco minutos. O Xorg é um grande buraco de segurança.

    
por 11.10.2014 / 21:50