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

Право чтения — последний шаг, а не единственный

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

Для каталога бит выполнения означает поиск, а не выполнение содержимого. Ключ остаётся данными, и ни одна часть этого исправления не требует помечать его как исполняемый.

Пройдите путь от имени служебной учётной записи

Перечислите каждый компонент с его владельцем и режимом, затем повторите чтение от имени реальной учётной записи службы. Разница между вашей оболочкой и демоном часто и есть весь ответ. Идите по символическим ссылкам до настоящей цели, потому что проверяется именно разрешённый путь.

namei -l /etc/openvpn/client/office.key
sudo -u vpn-reader stat -c '%A %U:%G %n' /etc/openvpn/client/office.key

Служба также может открывать файлы более чем в одну фазу. Часть материала читается при привилегированной настройке, а другие файлы открываются после сброса привилегий. Оболочка root, читающая файл, не воспроизводит доступ более позднего рабочего процесса. Пространство имён монтирования может показывать другой вид того же пути, особенно внутри контейнера, поэтому сравните представление файловой системы демона со своим.

Измените самое узкое подходящее разрешение

Выберите наименьшую схему, которая даёт процессу доступ: контролируемая группа с правом поиска нужных каталогов, управляемое место, которым служба уже владеет, или другой документированный механизм. Чтение файла не требует права записи в его каталог. Широкое право записи группы на привилегированную конфигурацию не является обычным исправлением прохода. Рекурсивный 0777 тоже не решение.

Запишите, какой компонент вы изменили и почему. Изменение разрешения без записанной причины трудно проверять и легко забыть.

Смотрите за пределы режимов только после прохода

Если биты режима выглядят достаточными, оставшиеся проверки — это ACL, политика безопасности и ограничения sandbox. ACL может дать доступ, который биты режима как будто исключают, или запретить доступ, который они как будто разрешают. Эти настройки принадлежат текущему владельцу конфигурации, и их следует менять узко, а не отключать. Разница корня или рабочего каталога также может объяснить абсолютный путь, который работает в одном контексте и не работает в другом.

Не теряйте из виду, что это за файл, пока исправляете доступ. Сертификат CA публичен по замыслу, а закрытый ключ — нет. Файлам, которые клиент перезаписывает, тоже нужны другие права записи, чем ключу идентичности только для чтения. Проверьте метаданные, не печатая секреты, затем убедитесь, что сама служба работает после изменения. Короткая заметка в документации службы избавит следующего человека от того же прохода.

Похожие статьи