Я хотел бы запустить сервис, используя системный файл systemd. Эта служба требует пароль для запуска. Я не хочу хранить пароль в виде открытого текста в файле модуля systemd, потому что он доступен для чтения всем. Я также не хочу предоставлять этот пароль в интерактивном режиме.
Если бы я писал для этого обычный сценарий, я бы сохранял учетные данные в файле, принадлежащем пользователю root с ограниченными разрешениями (400 или 600), а затем считывал файл как часть сценария. Есть ли какой-то конкретный способ для системного стиля, или я должен просто следовать тому же процессу, что и в обычном сценарии оболочки?
shell-script
permissions
systemd
password
SauceCode
источник
источник
Ответы:
Здесь возможны два подхода в зависимости от ваших требований. Если вы не хотите запрашивать пароль при активации службы, используйте
EnvironmentFile
директиву. Отman systemd.exec
:Если вы действительно хотите , чтобы запрос, вы бы использовать один из
systemd-ask-password
директив. Отman systemd-ask-password
:источник
ps ajxewww
), чтобы кто-то мог забрать его оттуда.EnvironmentFile
запись с абсолютным путем к файлу с 400 разрешениями работает хорошо.Существует третья альтернатива этому, а также 2 предложения @jasonwryan.
выдержка из ответа Майкла Хэмптона на ServerFault - Как установить переменную среды в сервисе systemd?источник
Я могу предложить дополнительную альтернативу, которая может удовлетворить ваши потребности, но для этого необходимо выполнить несколько предварительных условий:
Следующие шаги следующие:
Используйте
secret-tool
отlibsecret
хранить пароль. Например:Если ваш исполняемый файл поддерживает чтение пароля из переменной окружения, лучше:
Если ваш исполняемый файл принимает пароль в качестве аргумента, вы все равно можете использовать
secret-tool
так:Внимание : пароль будет хорошо виден при запуске,
systemctl --user status myUnit.service
так как он показывает аргумент как запускаемый из командной строки. Это означает, что это также будет видно для пользователей, работающихtop
илиps -aux
.источник