Como as permissões de r - directory devem funcionar no Linux?

11

Eu criei o diretório que um criado tem essas permissões - o outro usuário tem

drwxr--r-- 5 user user 4096 2012-09-15 19:30 sites

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

ls -l /home/user/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?

    
por vfclists 16.09.2012 / 16:06

2 respostas

16

x lhe dá permissão para realmente estar no diretório e acessar os arquivos no diretório, r lhe dá permissão para ver o conteúdo do diretório.

Se você revertesse a situação dando ao diretório o x bit e removendo o r bit, o usuário poderia abrir shared.tar.gz (assumindo permissões adequadas no próprio arquivo), mas somente se ele soubesse o nome do arquivo em avanço desde ls seria incapaz de listar os arquivos no diretório.

    
por 16.09.2012 / 16:15
2

Esta interpretação de permissões remonta aos primeiros sistemas de arquivos Unix. No começo, havia apenas arquivos. (Bem, e dispositivos, e pipes, e ... mas eu estou tentando contar uma história aqui, não ser 100% estritamente preciso; além disso, é tudo verdade para dispositivos e pipes e tudo mais porque tudo é um arquivo, mesmo 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 nela contidos. 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) junto com o número de inode onde os dados foram armazenados, o tamanho do arquivo, carimbos de data e hora. . Todos os diretórios começaram com duas entradas denominadas . e .. , a primeira apontando para o inode deste mesmo diretório e a segunda para o inode de seu diretório pai.

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

Assim, se um diretório é realmente apenas um tipo especial de arquivo e é descrito por uma entrada em algum diretório, ele obviamente também tem bits de permissão, e esses bits provavelmente significam algo. Mas a questão é exatamente o que. A maneira mais fácil de atribuir significado a esses bits é não alterar 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. Isso classicamente dá ao leitor acesso ao nome do arquivo, data e hora, tamanho e número de inode dos dados de cada arquivo. Especificamente, com r set você pode usar ls para 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, execute realmente significa procurar uma entrada pelo nome e usá-la. Isso significa que você pode tentar abrir os arquivos se x estiver definido, mas sem r você não conseguirá descobrir seus nomes. Naturalmente, as permissões do arquivo solicitado também afetam o acesso, portanto, mesmo com x no 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 w set você pode criar novos arquivos nesse diretório ou editar as entradas de diretório dos arquivos existentes. Mas sem x set, você não pode realmente usar nenhum arquivo, e sem r você não pode vê-los 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 suma, r significa que você pode ver seu conteúdo, x significa que você pode usá-lo e w significa que você pode modificá-lo mesmo para diretórios.

    
por 17.09.2012 / 01:50