No meu CMS, notei que os diretórios precisam do bit executável ( +x
) definido para que o usuário os abra. Por que a permissão de execução é necessária para ler um diretório e como funcionam as permissões de diretório no Linux?
linux
permissions
directory
Nick.h
fonte
fonte
chmod 771 dirOne
), não é possível listar o conteúdo do dirOne. MAS se ele contiver um subdiretório "dirTwo" com direitos definidos como (chmod 774 dirTwo
), você poderá listar seu conteúdo!Respostas:
Ao aplicar permissões a diretórios no Linux, os bits de permissão têm significados diferentes dos arquivos comuns.
r
) permite ao usuário afetado listar os arquivos no diretóriow
) permite que o usuário afetado crie, renomeie ou exclua arquivos no diretório e modifique os atributos do diretóriox
) permite que o usuário afetado entre no diretório e acesse arquivos e diretórios dentroT
out
se o bit de execução estiver definido para outros) afirma que os arquivos e diretórios dentro desse diretório só podem ser excluídos ou renomeados pelo proprietário (ou raiz)fonte
+x
no diretório concede acesso aos arquivos inodes através deste diretório específico (nada menos, nada mais, bem ... talvezchdir
precise+x
também). Para ler ou gravar o conteúdo de um arquivo, o usuário também precisa+r
/+w
deste arquivo, mas essas são permissões distintas (elas não substituem nada).+x
no diretório concede acesso aos arquivos inodes" - Parece um bom idiota, mas talvez não conte a história toda? Sem o bit de execução definido em um diretório, você não pode alterar o nome do arquivo de um arquivo nesse diretório. Gostaria de saber por que isso ocorre, porque o nome do arquivo é armazenado em uma entrada de diretório, não em um inode.Primeiro, pense: O que é um diretório? É apenas uma lista de itens (arquivos e outros diretórios) que vivem dentro. Então: diretório = lista de nomes.
Ler bit = Se definido, você pode ler esta lista. Então, por exemplo, se você tiver um diretório chamado
poems
:ls poems
e obterá uma lista de itens que vivem nele (-l
não revelará detalhes!).touch poems/so <TAB> poems/somefile
.poems
seu diretório de trabalho (ou seja,cd
nele).Write bit = Se definido, você pode modificar esta lista, ou seja, você pode {adicionar, renomear, excluir} nomes nela. Mas! Na verdade, você pode fazer isso apenas se o bit de execução também estiver definido.
Execute bit = Torne este diretório seu diretório de trabalho, ou seja,
cd
nele. Você precisa dessa permissão se desejar:Caso interessante 1 : se você tiver permissões de gravação + execução em um diretório, pode {excluir, renomear} itens que residem mesmo que você não tenha permissão de gravação nesses itens. (use bit adesivo para evitar isso)
Caso interessante 2 : se você tem permissão de execução (mas não de gravação) em um diretório E você tem permissão de gravação em um arquivo que vive dentro dele, não pode excluir o arquivo (porque envolve removê-lo da lista). No entanto, você pode apagar seu conteúdo, por exemplo, se for um arquivo de texto, você pode usar o vi para abri-lo e excluir tudo. O arquivo ainda estará lá, mas estará vazio.
Resumo:
Ler bit = Você pode ler os nomes na lista.
Write bit = Você pode {adicionar, renomear, excluir} nomes na lista SE o bit de execução também estiver definido.
Executar bit = Você pode tornar este diretório seu diretório de trabalho.
PS: O artigo mencionado por Kusalananda é uma boa leitura.
fonte
x
bit para qualquer acesso a este arquivo: paracat a/b/c/d
, eu preciso dox
pouco sobre tudoa
,b
ec
, mesmo se eu não usá-los como cwd.x
permissão no diretório, se você não tiverx
permissão no arquivo , não poderá realmente "executar" o arquivo. Você pode apenascat
isso, por exemplo, mas não pode executar o arquivo em si.ls -l
trabalhar para uma pasta, precisa de ambasr
e dex
permissão.Eu preparei esta tabela com todas as permissões possíveis e seus efeitos práticos.
(*) Somente nomes de arquivos : outros atributos como tamanho ou data não são acessíveis. Por exemplo, você pode usar a tecla tab para preencher automaticamente, mas não o comando ls.
Algumas reflexões :
fonte
-W-
ser funcionalmente equivalente aos---
diretórios. Não é muito intuitivo. É claro que esses tipos de bits de baixo nível geralmente não são.-W-
, eu poderia renomear o diretório (em um diretório com um pedaço fixo), mas não com---
. Isso parece ser uma diferença #Aqui está um bom artigo sobre isso.
Resumo:
Um diretório com seu
x
conjunto de bits permite ao usuáriocd
(alterar o diretório) nesse diretório e acessar os arquivos nele.Detalhes:
Read (
r
)Write (
w
)Execute (
x
)Aqui estão alguns exemplos que devem facilitar a compreensão:
Há ainda mais informações no artigo Hacking Linux Exposed .
fonte
No livro de Robert Love , "LINUX System Programming", capítulo 1, seção
fonte
Para qualquer operação que acesse um arquivo ou diretório, ele deve primeiro resolver o caminho para o arquivo ou diretório. A resolução requer que o usuário tenha permissão de execução em todos os diretórios ao longo do caminho, exceto no componente final do caminho. Portanto, para diretórios, você pode pensar que o bit de execução significa "resolvível".
Pegue o caminho
/a/b/c.txt
como exemplo, digamos que o usuário tenha 1) permissão de execução em/
e/a
; 2) tem permissão de leitura em/a/b
; 3) permissão de leitura e gravação/a/b/c.txt
.O usuário falhará na leitura (lista)
/a
, porque não possui permissão de leitura. Mas a resolução do caminho não falha.O usuário será capaz de ler (lista)
/a/b
, porque o usuário tem permissão de executar/
,/a
e permissão de leitura/a/b
. Observe que, ao ler/a/b
, o nome do arquivoc.txt
é visível, mas os metadados (por exemplo, tamanho do arquivo) e o conteúdo não, porque o nome do arquivo é armazenado no diretório, não no arquivo, mas os metadados são armazenados no inode do arquivo.O usuário vai deixar de ler
/a/b/c.txt
, porque ao resolver o caminho a partir/
de/a
para/a/b
, ele falha em/a/b
uma vez que o usuário não tem permissão de execução.Veja também como um nome de caminho é resolvido para um arquivo .
fonte
Uma analogia útil é pensar em cada arquivo como um livro e em cada diretório como uma sala onde os livros são mantidos.
Existem regras para poder listar todos os nomes em uma sala: o bit de leitura para diretórios. Regras para remover um livro da sala: o bit de gravação para diretórios. E regras para entrar em uma sala e explorar: o diretório resultante executa o bit.
Essas regras são separadas e diferentes das regras de cada livro. Existem regras para permitir que alguém abra um livro e leia seu conteúdo: o (s) bit (s) de leitura para cada arquivo. Existem regras para modificar o conteúdo de um livro: o (s) bit (s) de gravação para cada arquivo. E para executar um arquivo: o (s) bit (s) de execução para cada arquivo.
Escrevo bit (s) porque existem três bits para cada ação. Há um bit de leitura para o proprietário, um bit de leitura para o (s) grupo (s) e um bit de leitura para todos os outros (outros). Se qualquer um desses três bits estiver definido para um usuário específico, esse usuário terá o bit de leitura ativo. Não importa como isso pouco foi encontrado para ser ativo ou por u Ser ou g rupo ou o ther, tem os mesmos resultados eficazes.
Assim, um usuário pode ter permissão para entrar em uma sala e remover livros da biblioteca, mas não pode ler o conteúdo do mesmo livro.
É por isso que é necessário um bit de leitura para diretórios: controlar quem tem permissão para listar o conteúdo da sala (títulos de livros).
E o bit de execução é usado para controlar quem pode entrar na sala de livros.
fonte
O significado de Executar para diretórios é bastante claro. Como não há permissão de desvio, ao contrário do Windows, você deve sobrecarregar alguma coisa. Os designers escolheram Executar, que causa confusão sem fim. Como um responsável pela segurança de computadores que atribui direitos de Execução a algo que você não pretende executar, parece desonesto.
fonte
GENERIC_EXECUTE
e o que é.