Для следующей демонстрации я создал несколько каталогов:
$ mkdir read_only
$ mkdir exec_only
$ mkdir r_e
$ touch read_only/cant_open
$ echo foo > read_only/cant_open
$ echo bar > exec_only/cant_find
$ echo baz > r_e/normal
$ chmod 400 read_only/
$ chmod 100 exec_only/
$ chmod 500 r_e/
Для просмотра содержимого каталога достаточно разрешений на чтение: ls(1)
не может найти подробную информацию о файле, но он может сообщить вам имя файла.
$ ls read_only/
ls: cannot access read_only/cant_open: Permission denied
cant_open
Но доступ только для чтения не позволяет вам проходить через каталог:
$ cat read_only/cant_open
cat: read_only/cant_open: Permission denied
Разрешения на выполнение достаточны для обхода каталога (включая cd
), но вы не можете перечислить содержимое:
$ ls exec_only/
ls: cannot open directory exec_only/: Permission denied
Даже если вы не можете получить список файлов в каталоге, вы все равно можете просмотреть каталог:
$ cat exec_only/cant_find
bar
Разрешения на чтение и выполнение работают так, как вы ожидаете:
$ ls r_e
normal
$ cat r_e/normal
baz
Хотя поначалу непонятно иметь разрешение перечислять файлы в каталоге, но не иметь возможности что- либо с ними делать , а также непонятно иметь разрешение делать что-то с файлами, но не иметь возможности их перечислять, это часть Традиция Unix о простых механизмах, используемых для умных вещей: только эти два элемента позволяют легко реализовать безопасность на основе возможностей. Если бы я поместил несколько тысяч файлов в каталог, но хотел, чтобы только некоторые люди читали предназначенные для них файлы, я мог бы легко выбрать неосуществимые имена файлов и выдавать имена файлов, когда люди дают мне деньги на чтение файлов. :)
Или, может быть, у вас есть дюжина клиентов, и вы хотите, чтобы у них всех был доступ к каталогу файлов, предназначенных для них. Если вы поместите всю информацию о клиенте в один каталог с доступом только на выполнение, они никогда не смогут определить других ваших клиентов, если они уже не знают, что другой человек является клиентом.