О правах на чтение и исполнение для директорий

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

Надо сказать, что в UN*X директории устроены достаточно просто: это файл, в котором содержится список объектов файловой системы и номера их i-узлов (inode). В принципе, каталогу быть именно файлом необязательно, но семантика от этого меняться не должна. Еще хочется добавить, что среди полей структуры, описывающей элемент каталога, могут быть и другие поля (а не только имя и номер i-узла), но они нас сейчас не интересуют.

С директорией связаны две операции:

Так вот, бит разрешения чтения контролирует операцию чтения оглавления, а бит исполнения — операцию поиска файла.

Мораль такова, если на директории стоит только бит исполнения, то это означает всего лишь невозможность узнать список имен файлов. Но если имя файла, находящегося внутри каталога, известно, то получить доступ к номеру i-узла (а, стало быть, и к информации о файле) — возможно. А если у этого файла выставлены права на чтение, то его можно и прочитать. Поэтому защита, основанная на выставлении только бита исполнения на директории верхнего уровня — глупа. Достаточно часто найдутся обходные пути для узнавания имен некоторых объектов, содержащихся в данной директории.

С другой стороны, если выставлен только бит чтения, то список файлов посмотреть можно, а вот сами файлы (и информацию о них) — нельзя.

Естественно, почти все из сказанного написано в руководствах и учебниках.