chown remove bit setuid: bug ou recurso?

14

Passos para reproduzir:

germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov  2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov  2 20:11 test

Testado com Debian squeeze e Ubuntu 12.04

Germar
fonte
Também faz isso no Fedora 17.
precisa saber é o seguinte
1
feature
mikeserv

Respostas:

17

Não é um bug de acordo com a documentação do chown:

$ info coreutils 'chown invocation'

   The `chown' command sometimes clears the set-user-ID or set-group-ID
permission bits.  This behavior depends on the policy and functionality
of the underlying `chown' system call, which may make system-dependent
file mode modifications outside the control of the `chown' command.
For example, the `chown' command might not affect those bits when
invoked by a user with appropriate privileges, or when the bits signify
some function other than executable permission (e.g., mandatory
locking).  When in doubt, check the underlying system behavior.
jlliagre
fonte
Obrigado jlliagre. Eu não sabia info coreutilsantes. Eu só li a página de manual e procurei na web.
Germar
12

Isso ocorre por design e é um comportamento padrão. Citando o padrão POSIX :

A menos que o chown seja chamado por um processo com privilégios apropriados, os bits set-user-ID e set-group-ID de um arquivo regular serão limpos após a conclusão bem-sucedida; os bits set-user-ID e set-group-ID de outros tipos de arquivos podem ser limpos.

( sé setuid (ou setgid na coluna do grupo), não é pegajoso, a propósito.)

Esse comportamento segue o da chamada de sistema subjacente (exceto que em alguns sistemas, os bits setxid são limpos apenas para arquivos executáveis).

O motivo para remover o bit setuid é que alterar o proprietário também altera qual usuário será o ID do usuário efetivo do processo. Em particular, em sistemas em que um usuário pode doar um arquivo, cp /bin/sh foo; chmod u+s foo; chown joe foocriaria um executável setuid pertencente a joe, um enorme buraco de segurança.

Gilles 'SO- parar de ser mau'
fonte
Voto positivo para o nitpick! SUID / SGID não são os mais "pegajosos"!
21719 Jim
Grande ponto sobre as implicações de segurança da preservação do SUID / SGID. Fiquei incomodado com o comportamento até ler essa frase. Eu acrescentaria, no entanto, nunca vi chown não limpar os bits, mesmo quando executando como root. Estou curioso para saber o que "privilégios apropriados" implicariam.
vastlysuperiorman
1
@vastlysuperiorman Em uma plataforma clássica do Unix, "privilégios apropriados" significa o ID do usuário 0. Mas o POSIX permite que os sistemas definam suas próprias políticas de segurança. Por exemplo, para muitas operações no Linux, “privilégios apropriados” são implementados como um recurso (que somente o root obtém por padrão). Nesse caso em particular, suprime bits setxid no chown, independentemente de privilégios, como a maioria, se não todas as variantes do Unix. Mas uma camada POSIX no Windows pode funcionar de maneira diferente.
Gilles 'SO- stop be evil'