web-dev-qa-db-fra.com

Un autre utilisateur peut-il voir un fichier même s'il ne dispose d'aucune autorisation?

Si j'ai un fichier avec 700 ou 600 permissions, d'autres utilisateurs peuvent-ils voir le fichier? Bien sûr, ils ne pourront pas lire le contenu, mais sont-ils toujours capables de voir qu'il existe (c'est-à-dire voir son nom de fichier avec la commande ls)?

De plus, cela est-il affecté par la permission du répertoire dans lequel il se trouve? Si un autre utilisateur dispose d'autorisations sur le répertoire, peut-il toujours voir/modifier/supprimer le fichier, même s'il n'a pas d'autorisations sur le fichier lui-même?

3
jhx4mp

Pour voir un fichier (pas son contenu, uniquement le fichier lui-même), vous devez disposer d'une autorisation de lecture sur les répertoires parent du fichier. Il n'y a pas d'autorisations "de vue". Tant que vous pouvez lire un répertoire, vous pourrez voir tous les fichiers qu'il contient. Que vous puissiez ou non modifier le fichier ou lire son contenu, cela dépend si vous disposez des autorisations d'exécution sur le répertoire (nécessaire pour supprimer le fichier). Plus en détail:

  1. Si vous n'avez pas d'accès lecture au répertoire, vous pouvez voir le nom de son contenu, mais pas ses caractéristiques (permissions, propriétaire, date de création, etc.). En effet, vous devez avoir un accès en lecture à, eh bien, lisez ces informations:

    $ 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. Si vous n’avez pas l’autorisation execute sur le répertoire, vous ne pourrez pas lire son contenu, même si vous avez un accès en lecture au répertoire, car la liste de son contenu nécessite que vous puissiez ouvrir ("exécuter" ) le répertoire:

    $ 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. Si vous n'avez pas d'accès write au répertoire, vous pouvez voir ses fichiers, mais vous ne pouvez pas les supprimer/les créer , même si vous disposez d'un accès en lecture/écriture. au fichier . En effet, la création ou la suppression d'un fichier d'un répertoire implique la modification du répertoire lui-même (puisque vous modifiez son contenu) et vous avez besoin d'un accès en écriture pour cela:

    $ 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
    

La première étape consiste à avoir accès au répertoire dans lequel se trouve le fichier. Comme vous l'avez vu ci-dessus, tous les droits sur le fichier ne suffisent pas si vous ne disposez pas des droits nécessaires sur le répertoire parent. En supposant que vous ayez un accès complet au répertoire, oui, le fichier peut être vu quelles que soient les autorisations du fichier:

$ 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

Je n'ai aucun droit sur le fichier ci-dessus mais je peux toujours le voir. Je ne peux ni l'éditer, ni le lire, mais je peux voir qu'il existe. Je peux cependant le supprimer:

$ rm dir1/file1 
rm: remove write-protected regular empty file ‘dir1/file1’? y

C'est parce que j'ai un accès en écriture au répertoire parent. Je peux donc modifier son contenu, y compris tous les fichiers qu'il contient. Si je devais supprimer l'accès en écriture du répertoire, je ne serais pas en mesure de supprimer le fichier, comme expliqué ci-dessus.

Ainsi, pour masquer un fichier à un utilisateur, vous devez vous assurer que cet utilisateur n'a pas d'accès en lecture au répertoire parent du fichier. Les autorisations du fichier lui-même ne sont pas pertinentes.

2
terdon

Ci-dessous, vous pouvez me voir créer un dossier de test et en transférer la propriété à un autre utilisateur. Je ne peux pas créer de fichier si le répertoire ne m'appartient pas. De même, en tant que testuser, je ne pouvais pas supprimer un fichier de test appartenant à mon compte. Mais comme vous le voyez, si un utilisateur peut exécuter Sudo, cet utilisateur peut modifier la propriété du dossier, modifier les autorisations sur le fichier, et ainsi - afficher et modifier le fichier.

$ 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
2