Acessando arquivos em um diretório sem permissão x?

19

Estou tendo um pouco de dificuldade em entender o que a permissão de execução significa para diretórios. Eu entendi corretamente que qualquer coisa em um diretório para o qual um usuário não tenha direitos x é inacessível, mesmo se as coisas dentro do diretório derem direitos específicos ao usuário?

Ou o usuário ainda terá acesso direto às coisas no diretório, mas simplesmente não poderá listar o que está no diretório?

(O que eu estou realmente tentando entender é quão seguro um diretório é de acesso de outros usuários se eles não tiverem x-permissão para isso.)

    
por Leo 29.11.2011 / 18:28

3 respostas

20

x bit para o diretório também é chamado como bit de pesquisa. Na verdade, ele permite que você acesse os inodes dos arquivos listados dentro da pasta. Então, se você quiser acessar /home/user/foo/bar.txt, então você deve ter acesso de pesquisa em cada ancestral de bar.txt

Citando a partir da página

Because directories are not used in the same way as regular files, the permissions work slightly (but only slightly) differently. An attempt to list the files in a directory requires read permission for the directory, but not on the files within. An attempt to add a file to a directory, delete a file from a directory, or to rename a file, all require write permission for the directory, but (perhaps surprisingly) not for the files within. Execute permission doesn't apply to directories (a directory can't also be a program). But that permission bit is reused for directories for other purposes.

Execute permission is needed on a directory to be able to cd into it (that is, to make some directory your current working directory).

Execute is needed on a directory to access the inode information of the files within. You need this to search a directory to read the inodes of the files within. For this reason the execute permission on a directory is often called search permission instead.

Search permission is required in many common situations. Consider the command cat /home/user/foo. This command clearly requires read permission for the file foo. But unless you have search permission on /, /home, and /home/user directories, cat can't locate the inode of foo and thus can't read it! You need search permission on every ancestor directory to access the inode of any file (or directory), and you can't read a file unless you can get to its inode.

Por favor, leia mais em seção do diretório de permissões de arquivos.

Atualização: Leo levantou uma boa pergunta. Se nós conhecemos o inode, então podemos acessar um arquivo de um diretório tendo seu x bit não definido? Eu acredito que não poderíamos fazer isso. Eu não testei pelo programa c, mas usei alguns comandos bash para confirmar isso.

user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x  3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x  2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user    8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
  File: 'level1'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 808h/2056d  Inode: 95494       Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1 
  File: 'level1/file1'
  Size: 8           Blocks: 8          IO Block: 4096   regular file
Device: 808h/2056d  Inode: 60775       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1 
stat: cannot stat 'level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ?                ? file1
d????????? ? ? ? ?                ? ..
d????????? ? ? ? ?                ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: './level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775
    
por Amey Jah 29.11.2011 / 18:42
5

Como você está solicitando diretórios:

read means: read the contents, ie listing them with ls.

write means: write into the director. ie creating files or subdirectories.

execute means: enter into that directory.

as permissões de leitura e execução podem ser um pouco complicadas para os diretórios.

Por exemplo, se você tiver permissões de leitura, mas não executá-las, poderá listar o conteúdo do diretório, mas não poderá soltá-lo. Além disso, você não pode listar arquivos ou diretórios específicos, mesmo sabendo seus nomes.

Se você tiver permissão de execução, mas não for lida, poderá acessá-la, mas não poderá listar os arquivos diretamente. Mas, se você souber os nomes dos arquivos ou diretórios, poderá listá-los.

    
por heartsmagic 29.11.2011 / 18:50
2

A permissão de execução nos diretórios significa:

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

Se você não tiver o x em seu diretório, não poderá:

  • Entre no diretório (por exemplo, cd )
  • Não é possível acessar nenhum arquivo nesse diretório (mesmo que você saiba o nome).

Exemplo:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ cd testdir
bash: cd: testdir: Permission denied

$ cat testdir/a
cat: testdir/a: Permission denied

$ chmod 700 testdir
$ cat testdir/a
Some text.

Leia Confusão de permissão de arquivo Linux pt 2 para uma boa introdução sobre o assunto.

A única coisa que a permissão x não parece impedir é acessar os nomes dos arquivos nesse diretório.

Exemplo:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ ls testdir
ls: cannot access testdir/a: Permission denied
ls: cannot access testdir/b: Permission denied
a  b
    
por lgarzo 29.11.2011 / 20:04