Por que precisamos de permissão de execução para alterar um diretório no Unix?

5

Aqui estão as permissões dadas na máquina:

drwxrwxrwx   4 root     root         512 May 16 09:32 STC_10
drwxrw-rw-   4 root     root         512 May  5 11:22 STC_11

Agora aqui está o problema:

cd STC_11
-bash: cd: STC_11: Permission denied

Mas este funciona:

-bash-4.0$ cd STC_10
-bash-4.0$ ls
Codemgr_wsdata  src

Por que precisamos de permissão de execução para fazer um alcance nesse diretório STC_11 ? As permissões de leitura e gravação não bastam?

Um comando ls em STC_11 funcionaria.

    
por tomkaith13 19.05.2011 / 01:42

3 respostas

12

Para a demonstração a seguir, criei alguns diretórios:

$ mkdir read_only
$ mkdir exec_only
$ mkdir r_e
$ touch read_only/cant_open
$ echo foo > read_only/cant_open 
$ echo bar > exec_only/cant_find
$ echo baz > r_e/normal
$ chmod 400 read_only/
$ chmod 100 exec_only/
$ chmod 500 r_e/

As permissões de leitura são suficientes para listar o conteúdo do diretório : ls(1) não pode encontrar detalhes sobre o arquivo, mas pode informar o nome do usuário arquivo.

$ ls read_only/
ls: cannot access read_only/cant_open: Permission denied
cant_open

Mas o acesso somente leitura não permite que você percorra o diretório:

$ cat read_only/cant_open 
cat: read_only/cant_open: Permission denied

Permissões de execução são suficientes para percorrer o diretório (incluindo cd ), mas você não pode listar o conteúdo:

$ ls exec_only/
ls: cannot open directory exec_only/: Permission denied

Mesmo que você não consiga obter uma lista de arquivos no diretório, ainda pode percorrer o diretório:

$ cat exec_only/cant_find
bar

As permissões de leitura e execução funcionam conforme o esperado:

$ ls r_e
normal
$ cat r_e/normal 
baz

Embora seja inicialmente confuso ter permissão para listar os arquivos em um diretório, mas não seja capaz de fazer qualquer coisa com eles, e também é confuso ter permissão para fazer Em coisas com arquivos, mas não ser capaz de listá-los, faz parte da tradição do Unix de mecanismos simples serem usados para coisas inteligentes: estes dois elementos por si só facilitam a implementação de Segurança baseada em recursos . Se eu colocasse alguns milhares de arquivos no diretório, mas só queria que algumas pessoas lessem arquivos feitos para eles, eu poderia facilmente escolher nomes de arquivos que não pudessem ser lidos, e dar os nomes de arquivos quando as pessoas me derem dinheiro para isso. leia os arquivos. :)

Ou talvez você tenha uma dúzia de clientes e deseja que todos tenham acesso a um diretório de arquivos destinado a eles. Se você colocar todas as informações do cliente em um único diretório com apenas acesso de execução, elas nunca poderão determinar seus outros clientes, a menos que já saibam que a outra pessoa é um cliente.

    
por 19.05.2011 / 01:54
3

Por definição, 'x' permissão para diretórios tem um significado especial - significa que você tem permissão para 'cd' nela.

    
por 19.05.2011 / 01:45
1

A permissão x não significa apenas "Executar". Depende de onde é aplicado. Em um arquivo, ele dá permissão para executar o arquivo. Em um diretório, ele dá permissão para mudar para o diretório. Eu não acho que isso tenha muito a ver com a estrutura do sistema de arquivos.

    
por 19.05.2011 / 01:55