Quem pode alterar as permissões de um arquivo/diretório?

Quem pode alterar as permissões de um arquivo/diretório?

Acredito (não tenho certeza) que o proprietário de um arquivo/diretório e o usuário root são os únicos usuários que têm permissão para alterar as permissões de um arquivo/diretório. Estou correto ou há outros usuários que também têm permissão para alterar as permissões?

Responder1

Somente o proprietário e root(superusuário) têm permissão para alterar a permissão de um arquivo ou diretório. Isso significa que o proprietário e o superusuário podem definir as permissões de leitura ( r), gravação ( w) e execução ( x). Mas alterar a propriedade do usuário de arquivos e diretórios com o comando chownsó é permitido root. A alteração da propriedade do grupo chgrpé permitida rootao proprietário do arquivo, se o usuário for membro do novo grupo.

Responder2

Para fins de operação normal, apenas o root e o proprietário podem chmod. Além disso, root pode chowne chgrpe, além disso, o proprietário pode, chgrpdesde que seja membro do grupo-alvo.

Por motivos de segurança, há outro caso: qualquer usuário com permissão de gravação no diretório que contém o arquivo pode substituir o arquivo por uma cópia e, assim, tornar-se o proprietário, ganhando a capacidade de modificar as permissões e o conteúdo.

Igual a:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

Criamos um diretório e escrevemos um arquivo como root. Como o root possui o arquivo, não podemos escrever nele, nem podemos chmod:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

No entanto, temos permissão de gravação no diretório, então podemos substituir o arquivo para obter propriedade:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

E agora que somos os proprietários, podemos fazer o que quisermos com esse arquivo:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

Da mesma forma, qualquer usuário com permissão de gravação paraqualquerdiretório no caminho completo que leva ao arquivo pode substituir a estrutura de diretórios a partir desse ponto, ganhando assim a propriedade do arquivo com o nome fornecido. A propriedade ou as permissões do arquivo original real (que renomeamos para "seuarquivo2") não são alteradas, é claro.

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

Responder3

O chmodcomando invoca diretamente a chamada do sistema de mesmo nome; a página man da chmod(2)chamada do sistema (no Linux 4.10) diz:

O UID efetivo do processo de chamada deve corresponder ao proprietário do arquivo ou o processo deve ser privilegiado (Linux: deve ter a CAP_FOWNERcapacidade).

Se o processo de chamada não for privilegiado (Linux: não tem capacidade CAP_FSETID), e o grupo do arquivo não corresponder ao ID de grupo efetivo do processo ou a um de seus IDs de grupo suplementares, o S_ISGIDbit será desativado, mas isso não fará com que um erro seja retornado.

Então, sim, um processo executado como root pode alterar as permissões de qualquer arquivo se não tiver eliminado a CAP_FOWNERcapacidade.


Também é interessante chown; a página de manual chown(2)diz:

Somente um processo privilegiado (Linux: aquele com CAP_CHOWNcapacidade) pode alterar o proprietário de um arquivo. O proprietário de um arquivo pode alterar o grupo do arquivo para qualquer grupo do qual esse proprietário seja membro. Um processo privilegiado (Linux: with CAP_CHOWN) pode alterar o grupo arbitrariamente.

informação relacionada