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. Não quero que outras pessoas listem o conteúdo em / a / b. O proprietário de / a é raiz.

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

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

Lee
fonte
2
Você precisa definir o 'bit de execução' para permitir a travessia do diretório (para atravessar / a e / a / b), isso pode resolver seu problema:chmod +x /a/b
ex0ns

Respostas:

34

Você pode. Você apenas precisa definir o bit executável no /a/bdiretório Isso impedirá que você possa ver qualquer coisa 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

Lembre-se de que, embora outras pessoas não possam listar o conteúdo /a/b, elas podem acessar arquivos nesse diretório se adivinharem o nome do arquivo.

% 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 apropriadas (sem grupo / mundo) em todos os outros arquivos / diretórios dentro do bdiretório, pois isso evitará essa advertência.

stevieb
fonte
Como alternativa à configuração do bit executável, você também poderia fornecer um link físico para um / b / c que reside em outro local?
Moby Disk
2
@MobyDisk Você não pode criar um link direto para um diretório.
Michael Hampton
Ele não iria funcionar, porque não importa o quê, você ainda precisa ler para ba ligação comc
stevieb
3
Observe que existem algumas advertências importantes para isso. Se algum dos arquivos a/btiver permissões de grupo diferente de zero / outras e um adversário souber ou puder adivinhar seus nomes, esse adversário poderá interagir com esses arquivos.
Kevin
True @Kevin, as permissões para tudo o que está abaixo bdevem ter permissões definidas para proteger isso antes da criação ce, em seguida, é necessária diligência quando outros itens são preenchidos bpara garantir que as permissões sejam seguras apenas para o proprietário.
stevieb
9

Com essas permissões, você não pode alcançar sua meta. Para acessar o diretório c, você deve permitir que todos os outros usuários percorram o diretório, o bque é feito concedendo permissão de execução para esse diretório. Com o /a/bmodo 711, você pode conseguir o que deseja, pois está concedendo a passagem do diretório, mas negando a leitura e gravação. Mas lembre-se de que, embora outros usuários não possam listar arquivos /a/b, eles podem acessar arquivos se acharem que o nome e os arquivos têm permissões suficientemente abertas.

John
fonte
3

Se um usuário não puder acessar /a/b, ele não poderá acessar nenhum arquivo abaixo /a/b/c. As permissões /a/b/cativadas são irrelevantes, pois o percurso do diretório para em /a/b.

Se tudo o que você deseja é impedir que o diretório /a/bseja listado, mas você pode acessar os arquivos /a/bse eles adivinharem um nome de arquivo, você pode tornar o arquivo /a/bexecutável, mas não legível. Em um diretório, a permissão de leitura controla apenas a listagem do 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/

Se você não quiser que outros usuários possam acessar arquivos, /a/bexceto /a/b/c, poderá expor /a/b/cpor outra visualização, por meio de uma montagem de ligação .

# 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/
Gilles 'SO- parar de ser mau'
fonte