Режим 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 є публічним за задумом, а закритий ключ — ні. Файли, які клієнт переписує, також потребують інших прав запису, ніж ключ ідентичності лише для читання. Перевірте метадані, не друкуючи секрети, потім переконайтеся, що сама служба працює після зміни. Коротка нотатка в документації служби позбавить наступну людину того самого проходу.

Схожі статті