Estou me referindo ao seguinteDocumentação do Arch Linux Access_Control_Lists
Afirma:
Concedendo permissões de execução para arquivos privados a um servidor web
A técnica a seguir descreve como um processo como um servidor web pode ter acesso a arquivos que residem no diretório inicial de um usuário, sem comprometer a segurança, dando acesso ao mundo inteiro.
A seguir, assumimos que o servidor web é executado como o usuário http e concedemos a ele acesso ao diretório inicial de geoffrey /home/geoffrey.
O primeiro passo é conceder permissões de execução ao usuário http:
setfacl -m "u:http:--x" /home/geoffrey
Nota: As permissões de execução para um diretório são necessárias para que um processo liste o conteúdo do diretório.
Portanto, no exemplo acima eles estão configurando as permissões de execução para o usuário http no diretório /home/geoffrey. Pelo que entendi, conceder apenas o bit de execução em um diretório NÃO permitirá que você liste o conteúdo de um diretório, mas permitirá que você acesse os arquivos (se você souber seus nomes + as permissões em determinados arquivos dentro do diretório teriam as permissões corretas conjuntos). Então, como é possível que setfacl -m "u:http:--x" /home/geoffrey
o usuário http (ou o processo a que se referem) consiga listar o conteúdo do diretório? o que estou perdendo?
Agradeço antecipadamente!
Responder1
Você precisa -x
de permissão em um diretório para poder acessá-lo e a todos os arquivos nele contidos. No entanto, o seu acesso aos arquivos no diretório depende das permissões dos arquivos, não do diretório em si. Contanto que você tenha direitos de execução no pai (o diretório), não precisará de mais nada para acessar os arquivos que ele contém. Isso é mais facilmente demonstrado por um exemplo:
$ sudo mkdir dir1 && echo "Hello world!" | sudo tee dir1/file1 && sudo chmod 700 dir1
Hello world!
$ ls -ld dir1/
drwx------ 2 root root 4096 Apr 12 16:09 dir1/
$ sudo ls -l dir1/
total 4
-rw-r--r-- 1 root root 13 Apr 12 16:09 file1
Só root
tem acesso, então se tentarmos listar o conteúdo do diretório ou colocar o arquivo no cat, ele falhará:
$ ls dir1/
ls: cannot open directory 'dir1/': Permission denied
$ cat dir1/file1
cat: dir1/file1: Permission denied
Observe como isso cat
falha mesmo que eu tenha acesso de leitura ao arquivo. Agora, se eu conceder ao meu usuário acesso de execução ao diretório e tentar novamente, posso ler o arquivo:
$ sudo chmod 711 dir1/
$ ls -l
total 4
drwx--x--x 2 root root 4096 Apr 12 16:09 dir1
$ cat dir1/file1
Hello world!
Ainda não consigo listar o conteúdo do diretório, pois isso exigiria acesso de leitura ao diretório, mas agora posso ler qualquer arquivo no diretório, desde que saiba seu caminho.
Então, a ideia básica aqui é boa, é apenas a nota final que é confusa. Você precisa de acesso de leitura para listar o conteúdo, mas o acesso de execução é suficiente se você precisar apenas conceder ao http
usuário acesso a arquivos específicos cujo caminho é conhecido.
Embora mal formulada, a nota não está exatamente errada, como tal, apenas incompleta. Você realmente precisa de permissões de execução paracompletamentelistar o conteúdo de um diretório. Sem eles, você pode ver os nomes dos arquivos, mas nenhum atributo:
$ ls -l
total 4
drwxr--r-- 2 root root 4096 Apr 12 16:09 dir1
$ ls -l dir1/
ls: cannot access 'dir1/file1': Permission denied
total 0
-????????? ? ? ? ? ? file1
Responder2
Não está faltando nada: embora a maior parte deste documento esteja correta, a nota está errada.
Ele pode cruzar seu diretório inicial para outro diretório. Esse outro diretório pode ser legível e cruzável e, portanto, ter seu conteúdo listado.
Acho que tornar a sua casa apenas transponível é uma boa ideia, mas também acho que você está certo, a descrição do que ela faz está errada.
- Você precisa de permissão de leitura para listar os nomes de arquivos em um diretório.
- Você precisa de permissão cruzada para
stat
o arquivo (descubra algo sobre o arquivo ou abra-o).
Você enviou um relatório de bug?