As permissões do diretório pai são importantes ao acessar um subdiretório?

144

Se eu tiver uma pasta raiz com alguma permissão restritiva, digamos 600, e se as pastas / arquivos filhos tiverem a permissão 777, todos poderão ler / gravar / executar o arquivo filho mesmo que a pasta raiz tenha 600? / p>     

por Ken Li 27.05.2011 / 00:52

4 respostas

165

A regra precisa é: você pode percorrer um diretório se e somente se tiver permissão de execução.

Por exemplo, para acessar dir/subdir/file , você precisa de permissão de execução em dir e dir/subdir , além das permissões em file para o tipo de acesso desejado. Entrando em casos de canto, não tenho certeza se é universal que você precise executar permissão no diretório atual para acessar um arquivo através de um caminho relativo (você faz no Linux).

A maneira como você acessa um arquivo é importante. Por exemplo, se você tiver permissões de execução em /foo/bar , mas não em /foo , mas seu diretório atual for /foo/bar , será possível acessar arquivos em /foo/bar por meio de um caminho relativo, mas não por um caminho absoluto. Você não pode mudar para /foo/bar neste cenário; um processo mais privilegiado, presumivelmente, fez 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 percorrê-los. Por exemplo, se sym for um link simbólico para o diretório dir , você precisará de permissão de execução em dir para acessar sym/foo . As permissões no symlink em si podem ou não importar, dependendo do SO e do sistema de arquivos (alguns os respeitam, alguns os 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 estiverem fora dos limites para joe ( setfacl -m user:joe:0 / /home ) e /home/joe for joe , o joe não conseguirá acessar o restante do sistema (incluindo a execução de scripts de shell com /bin/sh ou binários vinculados dinamicamente que precisam acessar /lib , então você 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. Dar permissão de execução sem permissão de leitura é útil ocasionalmente: os nomes das entradas servem como senhas para acessá-los. Eu não consigo pensar em qualquer uso em dar permissão de leitura ou gravação para um diretório sem permissão de execução.

    
por 27.05.2011 / 11:57
30

Não. A permissão da pasta raiz limita a permissão de arquivos secundários. Você pode tentar.

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

Eu entendo isso:

$ cat: ./rootfolder/childfile: permission denied
    
por 27.05.2011 / 03:33
5

Você pode tornar o diretório filho gravável, mesmo que o diretório pai não seja. Eu faço isso por grupos.

Por exemplo: o diretório pai é de propriedade do codificador de grupo

drwxr-sr-x

diretório filho

drwxrwsr-x

Você (qualquer membro do grupo codificador) ainda pode gravar no diretório filho, mas não no diretório pai.

    
por 30.11.2016 / 08:42
0

Você pode criar o link físico para acessar o arquivo, mesmo que não tenha um privilégio de execução no diretório pai. Mas o problema aqui é que você tem que criar o hard link antes de perder seu privilégio de execução no diretório pai

$ ln foo/bar/test_privs privs_test_checking
    
por 27.08.2018 / 12:04