Executar vs Ler bit. Como as permissões de diretório no Linux funcionam?

346

No meu CMS, notei que os diretórios precisam do bit executável ( +x ) definido para o usuário abri-los. Por que a permissão de execução é necessária para ler um diretório e como as permissões de diretório no Linux funcionam?

    
por Nick.h 22.09.2011 / 14:13

7 respostas

322

Ao aplicar permissões a diretórios no Linux, os bits de permissão têm significados diferentes dos arquivos comuns.

  • O bit de leitura permite que o usuário afetado liste os arquivos dentro do diretório
  • O bit de gravação permite que o usuário afetado crie, renomeie ou exclua arquivos no diretório e modifique os atributos do diretório
  • O bit de execução permite que o usuário afetado entre no diretório e acesse arquivos e diretórios dentro
  • O bit adesivo afirma que os arquivos e diretórios nesse diretório só podem ser excluídos ou renomeados por seu proprietário (ou raiz)
por 22.09.2011 / 14:33
233

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.

Read bit = Se definido, você pode ler esta lista. Então, por exemplo, se você tem um diretório chamado poems :

  • Você pode ls poems e obterá uma lista de itens que vivem dentro de ( -l não revelará nenhum detalhe!).
  • Você pode usar a conclusão da linha de comando, por exemplo, touch poems/so <TAB> poems/somefile .
  • Você não pode tornar poems seu diretório de trabalho (por exemplo, cd ).

Gravar bit = Se definido, você pode modificar essa lista, ou seja, você pode {adicionar, renomear, excluir} nomes nela. Mas! Você só pode fazer isso se o bit de execução estiver definido também.

Executar bit = Torne este diretório seu diretório de trabalho, ou seja, cd nele. Você precisa dessa permissão se quiser:

  • acessa (lê, escreve, executa) itens que vivem dentro.
  • modifica a lista, isto é, adiciona, renomeia, apaga nomes (obviamente, o bit de gravação deve ser definido no diretório).

Caso interessante 1 : se você tiver permissões de gravação + execução em um diretório, poderá {excluir, renomear} itens que residem mesmo que você não tenha permissão de gravação nesses itens. (use um pouco pegajoso para evitar isso)

Caso interessante 2 : Se você tiver permissão para executar (mas não para gravação) em um diretório E tiver permissão de gravação em um arquivo que esteja dentro dele, não será possível excluí-lo. a 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:

Lê bit = Você pode ler os nomes na lista.
Gravar bit = Você pode {adicionar, renomear, deletar} nomes na lista SE o O bit de execução está definido também.
Execute bit = Você pode tornar este diretório seu diretório de trabalho.

PS: O artigo mencionado por KAK é uma boa leitura.

    
por 22.09.2011 / 18:24
39

Aqui está um bom artigo sobre isso.

Resumo:

Um diretório com seu conjunto de bits x permite que o usuário cd (altere o diretório) para este diretório e acessar os arquivos nele.

Detalhes:

  • Ler ( r )

    The ability to read the names of files stored in this directory.

  • Escreva ( w )

    The ability to rename files in the directory, create new files, or delete existing files, if you also have Execute permissions. If you don't have execute perms, then write perms are meaningless.

  • Executar ( x )

    The ability to cd into this directory, and access the files in this directory.

Aqui estão alguns exemplos que devem facilitar a compreensão:

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

Há ainda mais informações no artigo do Hacking Linux Exposed .

    
por 22.09.2011 / 14:36
35

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 autocompletar mas não o comando ls.

Algumas ideias :

  • Com X não definido , R e W são praticamente inúteis.
  • X sozinho desativando o RW oferece uma falsa sensação de segurança, pois você pode ler e gravar cegamente o conteúdo dos arquivos e acessar os subdiretórios. Você deve ter certeza de que todos os filhos diretos do diretório tenham permissões explícitas.
  • Raramente você usará outros valores além de:
    • 0 : sem acesso.
    • 1 : acesso mínimo permitindo a travessia.
    • 5 : permite ler / escrever, mas não altera a estrutura da própria árvore de diretórios.
    • 7 : acesso total.
por 19.10.2016 / 14:11
1

De livro de Robert Love "Programação do Sistema LINUX" capítulo 1 seção permissão-

    
por 29.11.2017 / 14:57
0

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 o componente de caminho final. Então, para diretórios, você pode pensar que o bit de execução significa "resolvível".

Leve o caminho /a/b/c.txt como um 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) ler e escrever permissão em /a/b/c.txt .

  • O usuário não conseguirá ler (listar) /a , porque não tem permissão de leitura. Mas a resolução do caminho não falha.

  • O usuário poderá ler (listar) /a/b , porque o usuário tem permissão de execução em / , /a e /a/b e tem permissão de leitura em /a/b . Observe que, ao ler /a/b , o nome do arquivo c.txt é visível, mas os metadados (por exemplo, tamanho do arquivo) e o conteúdo não, porque o nome do arquivo é armazenado com o diretório, não com o arquivo, mas o inode do arquivo.

  • O usuário não conseguirá ler /a/b/c.txt , porque ao resolver o caminho de / a /a a /a/b , ele falhará em /a/b , pois o usuário não tem permissão de execução.

Veja também como um nome de caminho é resolvido para um arquivo .

    
por 21.04.2018 / 00:02
-1

O significado de executar para diretórios é bastante claro. Como não há permissão Traverse, ao contrário do Windows, você deve sobrecarregar alguma coisa. Os designers escolheram Execute, Isso causa confusão sem fim. Como um cara de segurança do computador, atribuir Direitos de execução a algo que você não pretende realmente executar parece desonesto.

    
por 26.09.2017 / 21:31