chmod sempre desabilita bit de setgid nos diretórios se eu não estiver em um grupo

3

Aqui está o cenário: Eu estou usando o Ubuntu Linux (12.10, se isso importa), e eu tenho um diretório cujas permissões são assim:

drwxrws--- paul www-data    myfolder/

Você pode ver que o setgid bit está definido. Se eu alterar qualquer permissão nessa pasta (por exemplo, chmod o+x myfolder ), ela desativa o setgid bit.

De acordo com a manpage de chmod :

chmod preserves a directory's set-user-ID and set-group-ID bits unless you explicitly specify otherwise.

Em outro lugar, ele diz que ele não recupera o setgid bit se o grupo do arquivo não corresponder ao ID do grupo efetivo do usuário, mas apenas em arquivos regulares (ou seja, não pastas). Então, como meu grupo é paul em vez de www-data , espero que o acima aconteça se myfolder/ for um arquivo regular, mas não é - é um diretório.

Então, estou entendendo o manual errado ou chmod não está obedecendo às suas próprias instruções. Alguém sabe qual?

    
por Paul d'Aoust 05.12.2012 / 02:10

1 resposta

0

É explicado na mesma seção que você já citou na página manpage de chmod

SETUID AND SETGID BITS

[...]

This behavior depends on the policy and functionality of the underlying chmod system call. When in doubt, check the underlying system behavior.

Ao rastrear chmod , ele tenta definir o bit setgid, mas a chamada do sistema chmod() subjacente o ignora.

fchmodat(AT_FDCWD, "b", 02755)          = 0

Como você vê, S_ISGID (02000) é definido pelo comando chmod , mas não pelo chmod() [aqui: fchmodat() ] systemcall:

drwxr-xr-x 2 me notmygrp 16 Mar 19 12:37 b

Portanto, a remoção do bit setgid também é verdadeira para diretórios se você não for membro do grupo.

    
por 26.03.2013 / 21:54