LoadCredential=: передача секретов службе без переменных окружения
Передаёт службе секрет файлом. systemd читает его от root, кладёт в каталог, доступный только этой службе, и сообщает путь в переменной CREDENTIALS_DIRECTORY.
Что делает
Это заметно надёжнее переменных окружения: те видны в systemctl show, в /proc и в дампах. Каталог учётных данных доступен только процессам службы и исчезает при её остановке.
Есть и зашифрованный вариант: LoadCredentialEncrypted= расшифровывает файл на месте ключом машины. Такой файл можно хранить в системе управления конфигурацией, не опасаясь его прочтения.
Где ставится. В секции [Service]. Значение вида «имя:путь» или просто имя, если файл лежит в стандартном каталоге.
Значения
| Значение | Что происходит |
|---|---|
db-pass:/etc/myapp/db.pass | секрет попадёт в файл db-pass внутри каталога учётных данных. |
SetCredential=api-key:значение | значение прямо в unit-файле; для несекретных данных. |
LoadCredentialEncrypted=tls:/etc/myapp/tls.cred | зашифрованные данные, расшифровка ключом машины. |
Пример
Пароль базы, который не попадает в окружение.
[Service]
LoadCredential=db-pass:/etc/myapp/db.pass
ExecStart=/usr/local/bin/myapp --db-password-file ${CREDENTIALS_DIRECTORY}/db-pass
Программа должна уметь читать пароль из файла. Если она умеет только переменную, поможет обёртка, которая прочитает файл и вызовет программу.
Типичные ошибки
Отсутствие файла с секретом даёт код 243/CREDENTIALS при запуске.
Зашифрованные данные привязаны к машине: при переносе их нужно перешифровать.
Механизм появился в systemd 247, а ImportCredential= — в 254: на старых системах его нет.
Связанные ошибки
- status=243/CREDENTIALS в systemdКод 243/CREDENTIALS: не удалось подготовить учётные данные службы из LoadCredential=, SetCredential= или ImportCredential=.
- status=237/KEYRING в systemdКод 237/KEYRING: не удалось подготовить связку ключей ядра для службы. Обычно ограничение окружения или исчерпание квоты.
Рядом стоящие параметры
Источники
- systemd.exec(5)
- systemd-creds(1)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)