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.