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.


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.


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.


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/
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.