Para ver um arquivo (não seu conteúdo, apenas o próprio arquivo), é necessário ter permissão de leitura para os diretórios-pai do arquivo. Não há permissões de "visualização". Contanto que você possa ler um diretório, você poderá ver todos os arquivos nele. Se você pode ou não modificar o arquivo ou ler seu conteúdo, vai depender de você ter permissões de execução no diretório (necessário para excluir o arquivo). Mais detalhadamente:
-
Se você não tiver acesso read ao diretório, poderá ver os nomes de seu conteúdo, mas não suas características (permissões, proprietário, data de criação, etc.). Isso porque você precisa de acesso de leitura para, bem, ler essas informações:
$ ls -l total 4 drw-rw-rw- 3 terdon terdon 4096 May 2 20:21 dir1 $ ls -l dir1/ ls: cannot access dir1/subdir1: Permission denied ls: cannot access dir1/file1: Permission denied total 0 -????????? ? ? ? ? ? file1 d????????? ? ? ? ? ? subdir1
-
Se você não tiver a permissão executar no diretório, não poderá ler seu conteúdo mesmo que tenha acesso de leitura ao diretório porque listar seu conteúdo requer que você seja capaz de abrir ( "execute") o diretório:
$ ls -l total 4 d-wx-wx-wx 3 terdon terdon 4096 May 2 20:21 dir1 $ ls -l dir1/ ls: cannot open directory dir1/: Permission denied
-
Se você não tiver acesso gravação ao diretório, poderá ver seus arquivos, mas não poderá excluí-los / criá-los, mesmo que tenha acesso de leitura / gravação ao arquivo . Isso ocorre porque criar ou remover um arquivo de um diretório envolve modificar o próprio diretório (já que você está modificando seu conteúdo) e precisa de acesso de gravação para isso:
$ ls -l total 4 dr-xr-xr-x 3 terdon terdon 4096 May 2 20:21 dir1 $ ls -l dir1/ total 4 -rwxrwxrwx 1 terdon terdon 0 May 2 20:21 file1 drwxr-xr-x 3 terdon terdon 4096 May 2 20:19 subdir1 $ rm dir1/file1 rm: cannot remove ‘dir1/file1’: Permission denied $ touch dir1/file2 touch: cannot touch ‘dir1/file2’: Permission denied
O primeiro passo é ter acesso ao diretório em que o arquivo reside. Como você viu acima, ter todos os direitos sobre o arquivo não é suficiente se você não tiver os direitos necessários para o diretório pai. Supondo que você tenha acesso total ao diretório, sim, o arquivo pode ser visto independentemente das permissões do arquivo:
$ ls -l dir1/
total 0
---------- 1 bob bob 0 May 4 15:45 file1
$ cat dir1/file1
cat: dir1/file1: Permission denied
$ echo "foo" > dir1/file1
bash: dir1/file1: Permission denied
Eu não tenho nenhum direito sobre o arquivo acima, mas ainda posso vê-lo. Eu não posso editá-lo, nem lê-lo, mas posso ver que ele existe. Eu posso, no entanto, excluí-lo:
$ rm dir1/file1
rm: remove write-protected regular empty file ‘dir1/file1’? y
Isso porque eu tenho acesso de gravação ao diretório pai. Eu posso, portanto, modificar seu conteúdo, incluindo quaisquer arquivos lá. Se eu removesse o acesso de gravação do diretório, não conseguiria excluir o arquivo, conforme explicado acima.
Portanto, para ocultar um arquivo de um usuário, você precisa garantir que o usuário não tenha acesso de leitura ao diretório pai do arquivo. As permissões do arquivo em si são irrelevantes.