A permissão somente de gravação para um diretório não permite renomear (mover) arquivos dentro dele?

6

Na verdade, gostaria de fazer uma pergunta mais geral - "o que a permissão de gravação de um diretório permite que você faça exatamente?" - mas vamos abordar isso com um exemplo concreto.

É uma pergunta longa, se você está com pressa leia o negrito - deve cobrir a parte principal.

Diferentes fontes ( pergunta agradável , mais um , grymoire's ) dizem algo semelhante ao seguinte sobre as permissões do diretório:

r, read -- reading of the directory's content (filenames inside)

w, write -- changing the directory's attributes (e.g. modification time) and creating/renaming/removing entries inside

x, search -- accessing files inside, you have access to the inode of the file, hence you can reach it's actual content

Meu problema é com a descrição de w . Quais atributos do diretório ele te dá acesso? Não consigo criar / renomear / remover um arquivo dentro de um diretório com apenas permissão de gravação : Eu faço um diretório ( tdir/ ) e um arquivo dentro ( afile ), chmod -x-r tdir/ , mv tdir/afile tdir/af , rm tdir/afile , touch tdir/newfile - todos falham com negação de permissão, a menos que eu defina x permissão para o diretório também.

E x sozinho não lhe dá permissão para criar / renomear / remover arquivos dentro do diretório.

Para fazer isso, você precisa dos dois x e w .

Mas touch tdir altera o horário de modificação do diretório com w .

Eu reformularia as fontes acima dessa forma para a conformidade com o problema: o r de um diretório permite que você veja os nomes dos arquivos dentro, mas nenhum acesso ao arquivo real (ao inode); x dá acesso aos inodes dos arquivos (o que significa que você pode ver as permissões deles e, de acordo com ele, ter acesso ao conteúdo), mas ainda não é possível alterar nada no diretório; O diretório é, na verdade, algum tipo de arquivo e, para alterar algo, você precisa da permissão w .

Assim, quando você está alterando algo no diretório, você precisa de w permission. Se a sua alteração requer inodes dos arquivos no diretório - você também precisa de x .

Explica porque você não pode remover um arquivo dentro de um diretório com w apenas: ao remover um arquivo você precisa reduzir a contagem de links do inode em 1 - você precisa conhecer o inode - assim você precisa de x para o diretório .

Mas por que você precisa de x para criar (você poderia pedir ao sistema para criar um arquivo sem expor o inode?) e renomear / mover o arquivo (quando você move um arquivo você não o altera) de alguma forma, você só muda os registros dentro dos diretórios e suas contagens de inode?)?

Talvez seja apenas uma coisa de implementação? Ou seja de fato você não precisa do inode para renomear / criar arquivos - você precisa apenas de nomes de arquivos e w permission; mas inode e filename constituem um registro no diretório; mudando assim os nomes dos arquivos = alterando os registros = acessando os inodes.

E também quais atributos os diretórios têm além do tempo de modificação, permissões e registros de arquivos? O que mais no diretório você pode alterar com w apenas?

    
por xealits 12.06.2014 / 21:50

1 resposta

5

x gives you access to the inodes of the files (which means you can see their permissions and, according to it, have access to the contents), but you still cannot change anything in the directory; directory is actually some sort of a file and to change something in it you need the w permission.

Sim.

But why do you need x for creating (you could ask the system to create a file without exposing the inode?) and renaming/moving the file (when you move a file you don't change it in any way, you only change the records inside the directories and their inode counts?)?

Sem x , você só pode afetar o diretório em si - está vendo o diretório de fora. Sem x , as entradas de diretório estão fora dos limites para você. Se você quiser adicionar, remover ou modificar (por exemplo, renomear) uma entrada no diretório, será necessário acessar essa entrada.

As permissões em um arquivo determinam o que você pode fazer com o conteúdo do arquivo. As permissões no diretório determinam o que você pode fazer com a entrada de diretório do arquivo, já que as entradas do diretório são o conteúdo do diretório.

A permissão de gravação em um diretório permite criar e remover entradas. A renomeação conta como atomicamente criando uma entrada e removendo outra. Além disso, os diretórios possuem os mesmos metadados dos arquivos regulares. A permissão de gravação também permite alterar a última modificação do diretório e o último registro de data e hora de acesso. Para alterar as permissões de um diretório, a propriedade de grupo ou as listas de controle de acesso (onde houver suporte), você precisa ser o proprietário. Para alterar a propriedade do usuário, a maioria das variantes unix exige raiz.

    
por 13.06.2014 / 03:03