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

13

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

    
por user226341 11.04.2017 / 06:42

3 respostas

19

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 (usuário / grupo) de arquivos e diretórios com os comandos chown / chgrp só é permitido para root .

    
por 11.04.2017 / 07:25
6

Para fins de operação normal, somente root e o proprietário podem chmod . Além disso, o root pode chown e chgrp e, além disso, o proprietário pode chgrp , desde que o proprietário seja um membro do grupo-alvo.

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

Assim:

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 a raiz é proprietária do arquivo, não podemos escrevê-lo, 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, para que possamos substituir o arquivo para obter a 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 o proprietário, podemos, claro, 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 para qualquer diretório qualquer no caminho completo que leva ao arquivo pode substituir a estrutura de diretório daquele ponto em diante, ganhando assim a propriedade do arquivo com o nome fornecido. A propriedade ou as permissões do arquivo original real (que renomeamos para "yourfile2") 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
    
por 11.04.2017 / 13:39
1

O comando chmod invoca diretamente a chamada do sistema com o mesmo nome; a man page para a chamada do sistema chmod(2) (no Linux 4.10) diz:

The effective UID of the calling process must match the owner of the file, or the process must be privileged (Linux: it must have the CAP_FOWNER capability).

If the calling process is not privileged (Linux: does not have the CAP_FSETID capability), and the group of the file does not match the effective group ID of the process or one of its supplementary group IDs, the S_ISGID bit will be turned off, but this will not cause an error to be returned.

Então, sim, um processo executado como root pode alterar as permissões de qualquer arquivo se ele não tiver perdido o recurso CAP_FOWNER .

Também de interesse é chown ; a man page de chown(2) diz:

Only a privileged process (Linux: one with the CAP_CHOWN capability) may change the owner of a file. The owner of a file may change the group of the file to any group of which that owner is a member. A privileged process (Linux: with CAP_CHOWN) may change the group arbitrarily.

    
por 11.04.2017 / 16:50