Доступ на чтение файла без просмотра директории

Часто приходится предоставлять доступ к файлам на чтение. Это может быть пользователь в роли разработчика, которому необходимо посмотреть и изменить конфигурацию сервиса на продакшн‑сервере, или технический пользователь, от имени которого запускается агент, считывающий лог‑файлы для последующей отправки в систему мониторинга

Если требуется скрыть структуру каталогов и предоставить доступ лишь к конкретным файлам, можно установить права на чтение конкретного файла, но запретить чтение содержимого каталогов по пути его расположения. Для этого нужно выполнить команду chmod 711 <путь к каталогу>. Эта команда установит для группы и остальных пользователей только право execute (исполнение). Разберём, как работают биты read и execute применительно к каталогам: ➡️ Право read (r) позволяет просмотреть содержимое каталога например, командой ls. Пользователь увидит список файлов и подкаталогов. ➡️ Право execute (x) позволяет: ➡️ сменить рабочую директорию на целевую или следующую по структуре (команда cd); ➡️ получить дополнительную информацию о содержимом (команды du, ls -l и т. д.), если есть доступ к конкретным файлам.

Таким образом, запретив право read, мы не даём вывести список файлов и директорий по пути к файлу. Но, оставив право execute, разрешаем «проходить» через каталоги к целевому файлу - при условии, что пользователь знает полный путь к нему.

Важно: для доступа к такому файлу необходимо точно знать его полный путь - без права read обнаружить его путём просмотра каталогов невозможно.

Кроме того, некоторые команды командной оболочки могут не работать без доступа на чтение каталога. Это связано с различиями в реализации команд - например, поведение cd в оболочке fish-shell может отличаться от классического bash.

Описанная ситуация - пример того, как можно предоставить доступ для работы с каталогом на определённом уровне вложенности. Для более точечного управления доступом можно использовать ACL (Access Control List)