Posso criar um diretório público em um diretório privado?

20

Eu tenho uma pasta pessoal / a / b no servidor com permissão 700. Eu não quero que outros listem o conteúdo em / a / b. O proprietário de / a é raiz.

Agora preciso abrir as autoridades completas do diretório / a / b / c para todos os usuários.

Alterei a permissão de / a / b / c para 777, mas ainda é inacessível para outras pessoas.

    
por Lee 07.08.2015 / 16:00

3 respostas

34

Você pode. Você só precisa definir o bit executável no diretório /a/b . Isso impedirá que você consiga ver nada em b , mas você ainda pode fazer tudo se for diretamente para a/b/c .

% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
  ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
  this.txt

Tenha em atenção que, enquanto outros não podem listar o conteúdo de /a/b , podem aceder a ficheiros nesse diretório se adivinharem o nome do ficheiro.

% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory

Portanto, certifique-se de manter as permissões adequadas (sem grupo / mundo) em todos os outros arquivos / diretórios dentro do diretório b , pois isso evitará esta advertência.

    
por 07.08.2015 / 16:11
9

Com essas permissões, você não pode alcançar sua meta. Para chegar ao diretório c , você deve permitir que todos os outros usuários percorram o diretório b , o que é feito dando permissão de execução para esse diretório. Com /a/b configurado para o modo 711, você pode obter o que deseja, desde que esteja concedendo passagem de diretório, mas negando leitura e gravação. Mas tenha em mente que, enquanto outros usuários não podem listar arquivos em /a/b , eles podem ser arquivos de acesso se eles adivinharem o nome e os arquivos têm permissões suficientemente abertas.

    
por 07.08.2015 / 16:07
3

Se um usuário não puder acessar /a/b , ele não poderá acessar nenhum arquivo em /a/b/c . As permissões em /a/b/c são irrelevantes, pois a passagem de diretório é interrompida em /a/b .

Se tudo o que você quer é impedir que o diretório /a/b seja listado, mas você está bem com os usuários acessando arquivos em /a/b se eles adivinharem um nome de arquivo, então você pode tornar /a/b executável mas não legível . Em um diretório, a permissão de leitura controla apenas listar o conteúdo do diretório, enquanto a permissão de execução controla o acesso às entradas desse diretório.

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
… contents of /a/b/c …

Se você não quiser que outros usuários possam acessar arquivos em /a/b , exceto /a/b/c , você poderá expor /a/b/c através de outra visualização, por meio de um bind mount .

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
… contents of /a/b/c …
    
por 10.08.2015 / 01:49