Quais permissões afetam a criação de links físicos? A propriedade do arquivo é importante?
Suponha que o usuário alice
deseje criar um link físico para o arquivo target.txt
em um diretório target-dir
.
- Quais permissões
alice
precisam nos doistarget.txt
etarget-dir
? - Se
target.txt
pertence ao usuáriobill
etarget-dir
pertence ao usuáriochad
, isso muda alguma coisa?
Tentei simular essa situação criando a seguinte estrutura de pastas / arquivos em um ext4
sistema de arquivos:
#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct 1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct 1 11:40 target-dir
source-dir:
-r--r--r-- 1 bill bill 0 Oct 1 11:29 target.txt
target-dir:
-rw-rw-r-- 1 alice alice 0 Oct 1 11:40 dummy
Embora alice
possa criar um link virtual para target.txt
, ela não pode criar um link físico:
#> ln source-dir/target.txt target-dir/
ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted
Se alice
possuir target.txt
e nenhuma permissão for alterada, o link físico será bem-sucedido. O que estou perdendo aqui?
linux
permissions
hard-link
gcscaglia
fonte
fonte
target.txt
etarget-dir
permissões, a menos que eusudo
como root.alice
.Eu pode acessar o arquivo original e hard-link a ela (criado comsudo
), mas não pode criar o link como o usuário,alice
apesar de todos concordarmos com essas permissões, deve ser suficiente.Respostas:
Para criar o link físico,
alice
serão necessáriaswrite+execute
permissõestarget-dir
em todos os casos. As permissões necessáriastarget.txt
variam:fs.protected_hardlinks = 1
então,alice
precisar de propriedadetarget.txt
ou pelo menos deread+write
permissões nele.fs.protected_hardlinks = 0
então, qualquer conjunto de permissões será suficiente; Até 000 estão bem.Essa resposta a uma pergunta semelhante tinha a informação que faltava para responder a essa pergunta.
Em http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1 [ênfase minha]:
fonte
alice
precisa de pelo menos permissão de leitura e permissão detarget.txt
gravação + execuçãotarget-dir
.Agora, a estrutura de permissão funciona como um conjunto separado em três partes:
Portanto, a pergunta de propriedade afeta apenas em qual conjunto de permissões as permissões necessárias
alice
estão, sendo:alice
for o usuário proprietário, as permissões necessárias deverão estar na parte "user".alice
parte do grupo que o possui, as permissões necessárias deverão estar na parte "group".alice
não o possui e não faz parte do grupo que o possui, as permissões necessárias devem estar na parte "outra".fonte
target.txt
444 permissões etarget-dir
777, mas não consigo criar um link físico, a menos que eu faça isso como root ou possua o arquivo ao qual estou vinculando. Curiosamente, um link suave funcionará como você descreve.