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