Como as permissões do diretório r - devem funcionar no Linux?


11

Criei um diretório criado com essas permissões - o outro usuário possui

drwxr - r-- 5 usuário usuário 4096 15-09-2012 19:30 sites

Quando um ls -l no diretório é outro usuário

ls -l / home / usuário / sites

esta é a saída do diretório. Eu pensei que, sem o bit x definido nesse diretório, os nomes de arquivos não seriam exibidos.

d????????? ? ? ? ?                ? dev.user.com  
-????????? ? ? ? ?                ? user.20120914_082804.sql.gz   
d????????? ? ? ? ?                ? shared  
-????????? ? ? ? ?                ? shared.tar.gz  
-????????? ? ? ? ?                ? www.20120914_083256.tar.gz
d????????? ? ? ? ?                ? www.user.com

Existe alguma inconsistência aqui?

Respostas:


16

xdá a você permissão para realmente estar no diretório e acessar os arquivos no diretório, rpermite ver o conteúdo do diretório.

Se você reverter a situação, fornecendo o xbit ao diretório e removendo o rbit, o usuário poderá abrir shared.tar.gz(assumindo as devidas permissões no próprio arquivo), mas apenas se ele souber o nome do arquivo com antecedência, pois lsnão poderá listar os arquivos no diretório .


1
Vou testar isso e voltar para você. Eu sempre achei esse aspecto do compartilhamento de arquivos Linux confuso.
vfclists

Esse comportamento não é exclusivo do Linux; remonta aos primeiros dias do UNIX - o Linux, sendo um sistema compatível com UNIX, funciona dessa maneira - e as entradas ACL do Windows NT têm bits de permissão semelhantes.

2

Essa interpretação das permissões remonta aos primeiros sistemas de arquivos Unix. No começo, havia apenas arquivos. (Bem, e dispositivos, e tubos, e ... mas estou tentando contar uma história aqui, não seja 100% estritamente preciso; além disso, tudo é verdade para dispositivos e tubos e tudo mais, porque tudo é um arquivo, até diretórios).

Diretórios são apenas arquivos que o sistema de arquivos usa para armazenar os metadados que descrevem a árvore de diretórios e os arquivos que ela contém. Cada arquivo em um diretório foi descrito por uma estrutura de dados simples que continha espaço para um nome de arquivo (originalmente 14 caracteres, IIRC), juntamente com o número do inode em que os dados foram armazenados, o tamanho do arquivo, carimbos de data e hora e a palavra permissões . Todo diretório começou com duas entradas nomeadas .e .., a primeira apontando para o inode desse diretório e a segunda para o inode do diretório pai.

A palavra permissões tinha nove bits para descrever o tratamento do proprietário, de outros membros do mesmo grupo e do mundo. Os três bits para cada sinalizador, independentemente de o usuário relevante poder ler, gravar ou executar o arquivo. (Você pode notar que há mais cinco bits na palavra de permissões de 16 bits que estou ignorando. Esses acabaram recebendo significados atribuídos, mas que não são relevantes para esta parte da história.) (Além disso, essa interpretação dos nove bits permaneceu praticamente o mesmo em todos os descendentes do início do Unix, incluindo o Linux.)

Portanto, se um diretório é realmente apenas um tipo especial de arquivo e descrito por uma entrada em algum diretório, obviamente também possui bits de permissão, e esses bits provavelmente significam algo. Mas a questão é exatamente. A maneira mais fácil de atribuir significado a esses bits é não mudar o que eles significam em primeiro lugar. E isso é essencialmente o que foi feito.

Portanto, o bit de leitura significa que o usuário pode ler o próprio diretório. Classicamente, isso dá ao leitor acesso ao nome do arquivo, carimbos de data e hora, tamanho e número de inode dos dados de cada arquivo. Especificamente, com rset você pode usar lspara ver os nomes de todos os arquivos no diretório, mas isso não é suficiente para abrir (ou usar de qualquer forma) qualquer um dos arquivos listados.

O bit de execução significa que o usuário pode "executar" o diretório. Como os diretórios são especiais, executar realmente significa procurar uma entrada pelo nome e usá-la. Isso significa que você pode tentar abrir os arquivos se xestiver definido, mas sem rvocê não poderá descobrir os nomes deles. Obviamente, as permissões do arquivo solicitado também afetam o acesso, portanto, mesmo xno diretório, você não poderá ler um arquivo, a menos que ele também ofereça r.

O bit de gravação significa que o usuário pode gravar no diretório, mas naturalmente apenas mediado pelo próprio sistema de arquivos. Isso significa que, com o wconjunto, você pode criar novos arquivos nesse diretório ou editar as entradas de diretório dos arquivos existentes. Mas, sem o xconjunto, você não pode usar nenhum arquivo e sem rvê-lo também.

À medida que modelos mais complicados de identidade do usuário evoluíram no Unix e seus descendentes, essas mesmas descrições básicas conseguiram permanecer notavelmente inalteradas.

Em resumo, rsignifica que você pode ver o conteúdo, xpode usá-lo e wpode modificá-lo mesmo para diretórios.


Eu suponho que você pode explicar mode_tcoisa um pouco mais (esp parte onde permissões e tipo de arquivo são armazenados no mesmo campo de 32 bits.)
SaveTheRbtz

1
Eu era ativamente um usuário e desenvolvedor unix nos anos 80. Eu não estava tentando contar a história completa sobre o que é verdade hoje, mas colocá-la em contexto histórico, e expor minha diversão que o mesmo enigma que eu enfrentei quando aprendi o unix pode ser perguntado hoje e respondido substancialmente pelo mesma explicação que eu tenho de gurus locais em cerca de 1983. a mudança mais coisas, mais elas permanecem as mesmas ....
RBerteig
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.