Outro usuário pode ver um arquivo mesmo que não tenha permissões?

3

Se eu tiver um arquivo com permissões de 700 ou 600, outros usuários poderão ver o arquivo? É claro que eles não poderão ler o conteúdo, mas ainda poderão ver que existe (veja o nome do arquivo com o comando ls )?

Além disso, isso é afetado pela permissão do diretório em que está? Se outro usuário tiver permissões para o diretório, ele ainda poderá ver / modificar / excluir o arquivo, mesmo que não tenha permissões para o arquivo em si?

    
por jhx4mp 02.05.2015 / 03:05

2 respostas

2

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:

  1. 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
    
  2. 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
    
  3. 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.

    
por terdon 05.05.2015 / 11:25
2

Abaixo, você pode ver uma pasta de teste e alterar a propriedade dessa pasta para outro usuário. Não consigo criar um arquivo se o diretório não for de minha propriedade. Da mesma forma, como testuser , não consegui remover um arquivo de teste de propriedade da minha conta. Mas, como você vê, se um usuário pode executar sudo , esse usuário pode alterar a propriedade da pasta, alterar as permissões do arquivo e, assim, visualizar e modificar o arquivo

$ mkdir tester
$ chown testuser:testuser tester/
chown: changing ownership of ‘tester/’: Operation not permitted

$ sudo chown testuser:testuser tester/                                 
[sudo] password for xieerqi: 

$ ls -l tester
total 0

$ touch tester/testfile                                                
touch: cannot touch ‘tester/testfile’: Permission denied

$ sudo chown xieerqi:xieerqi tester/                                   
$ touch tester/testfile                                                
$ chmod 700 tester/testfile
mksh: chmod: can't execute: Permission denied

$ sudo chmod 700 tester/testfile                                       
$ sudo su testuser

testuser@foo $ ls -l tester/testfile 
-rwx------ 1 xieerqi xieerqi 0 May  2 08:46 tester/testfile
testuser@foo $ rm tester/testfile
rm: remove write-protected regular empty file ‘tester/testfile’? 
testuser@foo $ ls -l tester/testfile 
-rwx------ 1 xieerqi xieerqi 0 May  2 08:46 tester/testfile
    
por Sergiy Kolodyazhnyy 02.05.2015 / 17:35