Может ли другой пользователь увидеть файл, даже если у него нет разрешений?

Если у меня есть файл с разрешением 700 или 600, могут ли другие пользователи увидеть файл? Конечно, они не смогут прочитать содержимое, но могут ли они видеть, что он существует (т. Е. Увидеть его имя файла с помощью команды ls )?

Кроме того, это зависит от разрешения каталога, в котором он находится? Если у другого пользователя есть права доступа к каталогу, они могут видеть / изменять / удалять файл, даже если у них нет прав на сам файл?

Чтобы увидеть файл (а не его содержимое, только сам файл), вам нужно иметь разрешение на чтение для родительских каталогов файла. Разрешений «просмотра» нет. Пока вы можете читать каталог, вы сможете увидеть все файлы в нем. Независимо от того, можете ли вы изменить файл или прочитать его содержимое, будет зависеть от того, имеете ли вы разрешения на выполнение в каталоге (необходимо удалить файл). Более детально:

  1. Если у вас нет доступа для чтения в каталог, вы можете увидеть имена его содержимого, но не их характеристики (разрешения, владелец, дата создания и т. Д.). Это связано с тем, что вам нужен доступ для чтения, ну, прочитайте эту информацию:

     $ 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. Если у вас нет разрешения на выполнение в каталоге, вы не можете прочитать его содержимое, даже если у вас есть доступ на чтение к каталогу, потому что для его содержимого требуется, чтобы вы могли открыть («выполнить») каталог:

     $ 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. Если у вас нет доступа на запись в каталог, вы можете видеть его файлы, но не можете их удалять и создавать, даже если у вас есть доступ к файлу . Это связано с тем, что создание или удаление файла из каталога включает в себя модификацию самого каталога (поскольку вы изменяете его содержимое), и для этого вам нужен доступ на запись:

     $ 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 

Первым шагом будет доступ к каталогу, в котором находится файл. Как вы видели выше, для всех прав на файл недостаточно, если у вас нет необходимых прав на родительский каталог. Предполагая, что у вас есть полный доступ к каталогу, да, файл можно увидеть независимо от разрешений файла:

 $ 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 

Я не имею никаких прав на файл выше, но все еще вижу его. Я не могу ни отредактировать его, ни прочитать, но я вижу, что он существует. Я могу, однако, удалить его:

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

Это связано с тем, что у меня есть права на запись в родительский каталог. Поэтому я могу изменить его содержимое, включая любые файлы. Если бы я должен был удалить доступ для записи из каталога, я бы не смог удалить файл, как описано выше.

Таким образом, чтобы скрыть файл от пользователя, вы должны убедиться, что пользователь не имеет доступа для чтения в родительский каталог файла. Разрешения самого файла не имеют значения.

Ниже вы можете видеть, как я создаю тестовую папку и изменяю права собственности на эту папку другому пользователю. Я не могу создать файл, если каталог не принадлежит мне. Точно так же, как testuser , я не смог удалить тестовый файл, принадлежащий моей учетной записи. Но, как вы видите, если пользователь может запустить sudo , этот пользователь может изменить право собственности на папку, изменить права доступа к файлам и, следовательно, – просмотреть и изменить файл

 $ 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