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

14

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

user226341
fonte

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é permitido apenas root.

Rakib
fonte
19
O proprietário de um arquivo pode alterar a propriedade do grupo, se o usuário for membro do novo grupo.
Kusalananda
7

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

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, adquirindo 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 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, é claro que podemos fazer o que queremos 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 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 original (que renomeamos como "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
Graves
fonte
Você sabe se alguma distribuição Linux suporta recursos de segurança adicionais, como o Windows? Se eu estiver no Windows, posso definir a permissão de exclusão de um arquivo como negada para impedir a exclusão, mesmo quando o diretório é permissivo.
Kevin Li
Muitos sabores atuais do Linux suportam listas de controle de acesso no nível de arquivo ( getfacl / setfacl), que oferecem mais flexibilidade do que as permissões de arquivo no estilo "clássico". A exclusão do arquivo no * nix funciona removendo o link para o arquivo do diretório, para que a remoção do arquivo seja sempre controlada pelas permissões do diretório; as próprias permissões de arquivo não desempenham nenhum papel lá.
Baixo
Muito fiel à filosofia do Unix de “tudo é um arquivo”. Então você está dizendo que isso não pode ser feito no Linux?
Kevin Li
3
@KevinLi Esta resposta não está realmente completa. Você pode definir o bit em um diretório para limitar a capacidade de não proprietários de excluir ou renomear arquivos. Veja esta pergunta e suas respostas: unix.stackexchange.com/questions/79395/… Não há necessidade de usar ACLs ou outros esquemas.
precisa
Os sistemas de arquivos @KevinLi * nix são muito diferentes dos do Windows. Os arquivos existem separadamente da hierarquia de diretórios e podem ter vários "links físicos" apontando para eles nos diretórios. Excluir um arquivo significa remover o link físico, o que é feito no diretório. O arquivo controla quantos links físicos estão apontando para ele e o arquivo real permanecerá no disco enquanto houver pelo menos um link físico apontando para ele. Assim, a eliminação é controlada pelas permissões do diretório, o que fazer tem uma opção especial para permitir que apenas exclui pelo proprietário do arquivo e raiz, como Andrew diz.
Baixo
1

O chmodcomando chama diretamente diretamente a chamada do sistema com o mesmo nome; a página de manual 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: ele deve ter a CAP_FOWNERcapacidade).

Se o processo de chamada não for privilegiado (Linux: não possui CAP_FSETIDcapacidade) e o grupo do arquivo não corresponder ao ID do 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.

Portanto, sim, um processo executando como root pode alterar as permissões de qualquer arquivo se ele não tiver diminuído a CAP_FOWNERcapacidade.


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

Somente um processo privilegiado (Linux: um 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: com CAP_CHOWN) pode alterar o grupo arbitrariamente.

Toby Speight
fonte