Esclareça algo sobre as permissões do diretório Linux

5

Tenho quase vergonha de admitir que há uma coisa em que ainda não tenho certeza quando se trata de permissões de arquivos.

Digamos que eu tenha um diretório com permissão 750 (drwxr.x ...). Então eu crio alguns arquivos descendentes dentro dele com uma permissão 644 bastante comum (.rw.r..r ..).

Os arquivos desse diretório podem ser lidos por qualquer outro usuário no sistema (fora de seu proprietário ou grupo) e por quê? Por um lado, esses arquivos têm um bit legível pelo mundo, de modo que deve indicar que o arquivo é legível por qualquer pessoa. Por outro lado, o diretório ascendente não é mundialmente executável (nem legível), desde que isso impeça o acesso ao conteúdo do diretório, o bit legível no mundo seria irrelevante. Isso é definitivamente verdade ou há alguma maneira de contornar isso?

Agora, parece que vejo regularmente casos em que alguém recomenda um chmod -R o-rwx ou algo assim. No exemplo está nos diretórios Maildir do Debian criados pelo postfix eu acredito - todos os arquivos, não apenas o diretório, tiveram a leitura world / group removida. É realmente necessário remover esse bit de leitura do mundo dos arquivos dentro se o diretório não tiver acesso mundial? Eu pergunto como estou tentando planejar como configurar o / var / www em um servidor e tê-lo não legível por outros usuários locais.

    
por thomasrutter 22.03.2011 / 17:16

4 respostas

2

Sim, os arquivos podem ser lidos, porque são legíveis por todo o mundo, mas se o diretório não for legível pelo mundo, supondo que o usuário não esteja no grupo que possui o diretório, o usuário precisaria de outro link para o arquivo. por exemplo:

cd directory
ln file /tmp

Agora o usuário pode acessar o arquivo, mas terá que fazer isso usando / tmp / file.

    
por 22.03.2011 / 17:28
10

O que você está perguntando tem mais a ver com a maneira como o sistema de arquivos virtual realiza travessias de diretórios. Devido ao fato de que tudo em um sistema Linux é um arquivo, isso cria uma peculiaridade ao lidar com diretórios. Enquanto eles têm um campo de execução, não faz sentido tentar executar um diretório. Além disso, no sistema de arquivos ext2 / 3/4, a estrutura de dados usada tem pouca semelhança com o arquivo "true". Em vez disso, as permissões têm significados ligeiramente diferentes quando aplicadas a diretórios.

  • read - O designado tem permissão para imprimir uma listagem de todas as entradas de diretório
  • write - O designado tem permissão para criar novas entradas de diretório
  • execute - O designado tem permissão para obter o inode de entradas de diretório

Compreendendo essas distinções, podemos ver que, se as permissões de um usuário em um diretório específico forem --x , poderemos determinar que o usuário tem permissão para tentar acessar um arquivo, mas sem realmente poder para ver a entrada do diretório em si. Ou mais sucintamente, como por coredump, "com --x você não pode listar o diretório, mas você pode ler os arquivos dentro dele se as permissões de arquivo permitem isso. "

Sabendo de tudo isso, vamos pegar o arquivo /home/user/public/file como exemplo. Geralmente não se deve abrir seu diretório home globalmente, mas eles querem oferecer arquivos em 'público' globalmente. Como tal, você deve definir as permissões assim:

  • /home - 755
  • /home/user - 711 (ou possivelmente 751)
  • /home/user/public - 755
por 22.03.2011 / 19:11
2

Não, eles não podem. Todas as árvores de caminho para o arquivo deve estar acessível também.

[é possível criar diretórios dos quais você não pode ver o conteúdo, mas você ainda pode ler arquivos em; ou seja, um diretório de arquivos ocultos, mas não com permissões 0750 como no seu exemplo]

É mais seguro criar todos os arquivos e diretórios com base em como você deseja acessá-lo. Se você mover esse arquivo para fora do diretório existente para um com legibilidade do mundo, então, de repente, o arquivo que você está acostumado a considerar como "protegido" não será. Se você tiver as permissões de arquivo para também ser o-rwx, o arquivo será protegido e não dependerá do diretório para protegê-lo.

    
por 22.03.2011 / 17:26
1

Esse comportamento é fácil de se testar.

$ mkdir foo
$ echo readable > foo/bar
$ ls -ld foo/
drwxr-xr-x 2 sciurus sciurus 4096 2011-03-22 1329 foo/
$ ls -l foo/
total 4
-rw-r--r-- 1 sciurus sciurus 9 2011-03-22 13:29 bar
$ cat foo/bar 
readable

$ chmod a-r foo
$ ls -ld foo/
d-wx--x--x 2 sciurus sciurus 4096 2011-03-22 1329 foo/
$ ls -l foo/
ls cannot open directory foo/: Permission denied
$ cat foo/bar 
readable

$ chmod a+r foo
$ chmod a-x foo
$ ls -ld foo/
drw-r--r-- 2 sciurus sciurus 4096 2011-03-22 1329 foo/
$ ls -l foo/
ls cannot access foo/bar: Permission denied
total 0
-????????? ? ? ? ?                ? bar
$ cat foo/bar 
cat foo/bar: Permission denied
    
por 22.03.2011 / 18:34