Se eu tiver uma pasta raiz com alguma permissão restritiva, digamos 600, e se as pastas / arquivos filhos tiverem 777 permissões, todos poderão ler / gravar / executar o arquivo filho, mesmo que a pasta raiz tenha 600?
Se eu tiver uma pasta raiz com alguma permissão restritiva, digamos 600, e se as pastas / arquivos filhos tiverem 777 permissões, todos poderão ler / gravar / executar o arquivo filho, mesmo que a pasta raiz tenha 600?
Respostas:
A regra precisa é: você pode percorrer um diretório se e somente se tiver permissão de execução nele.
Portanto, por exemplo, para acessar dir/subdir/file
, você precisa executar a permissão dir
e dir/subdir
, além das permissões file
do tipo de acesso desejado. Entrando em casos extremos, não tenho certeza se é universal que você precise executar permissão no diretório atual para acessar um arquivo por um caminho relativo (o que você faz no Linux).
A maneira como você acessa um arquivo é importante. Por exemplo, se você tiver permissões de execução ativadas, /foo/bar
mas não ativadas /foo
, mas o diretório atual estiver /foo/bar
, poderá acessar os arquivos /foo/bar
por um caminho relativo, mas não por um caminho absoluto. Você não pode mudar para /foo/bar
neste cenário; presumivelmente, um processo mais privilegiado foi feito cd /foo/bar
antes de ficar sem privilégios. Se um arquivo tiver vários links físicos, o caminho usado para acessá-lo determinará suas restrições de acesso.
Links simbólicos não mudam nada. O kernel usa os direitos de acesso do processo de chamada para atravessá-los. Por exemplo, se sym
é um link simbólico para o diretório dir
, você precisa executar permissão dir
para acessar sym/foo
. As permissões no próprio link simbólico podem ou não ser importantes, dependendo do sistema operacional e do sistema de arquivos (alguns as respeitam, outras as ignoram).
A remoção da permissão de execução do diretório raiz restringe efetivamente um usuário a uma parte da árvore de diretórios (na qual um processo mais privilegiado deve ser alterado). Isso requer listas de controle de acesso para qualquer uso. Por exemplo, se /
e /home
estiver fora dos limites de joe
( setfacl -m user:joe:0 / /home
) e /home/joe
for joe
o diretório inicial, joe
não será possível acessar o restante do sistema (incluindo a execução de scripts de shell com /bin/sh
binários ou binários vinculados dinamicamente que precisem acessar /lib
, então você ' d precisa ir mais fundo para uso prático, por exemplo setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib
).
A permissão de leitura em um diretório dá o direito de enumerar as entradas. Conceder permissão de execução sem conceder permissão de leitura é ocasionalmente útil: os nomes das entradas servem como senhas para acessá-las. Não consigo pensar em nenhuma utilidade em dar permissão de leitura ou gravação para um diretório sem permissão de execução.
Você pode tornar o diretório filho gravável, mesmo que o diretório pai não seja. Eu faço isso para grupos.
Por exemplo: o diretório pai pertence ao codificador do grupo
drwxr-sr-x
diretório filho
drwxrwsr-x
Você (qualquer membro do grupo de codificadores) ainda pode gravar no diretório filho, mas não no diretório pai.