Вы ищете encfs
: он монтирует каталог в другой каталог, так что файлы хранятся в зашифрованном виде как обычные файлы. Таким образом, вам не нужно создавать блочное устройство.
Здесь есть два возможных подхода, в зависимости от ваших требований. Если вы не хотите запрашивать пароль при активации службы, используйте директиву EnvironmentFile
. Изman systemd.exec
:
Similar to Environment= but reads the environment variables from a text file. The text file should contain new-line-separated variable assignments.
Если вы действительно хотите получать подсказки, вы должны использовать одну из директив systemd-ask-password
. Изman systemd-ask-password
:
systemd-ask-password may be used to query a system password or passphrase from the user, using a question message specified on the command line. When run from a TTY it will query a password on the TTY and print it to standard output. When run with no TTY or with --no-tty it will use the system-wide query mechanism, which allows active users to respond via several agents
Я могу предложить дополнительный вариант, который может удовлетворить ваши потребности, но он требует выполнения нескольких предварительных условий:
Следующие шаги следующие:
Используйте secret-tool
из libsecret
для сохранения пароля. Например:
$ secret-tool store --label=myProgram myService password
Password: <type it here>
Если ваш исполняемый файл поддерживает чтение пароля из переменной окружения, это лучше:
[Service]
ExecStart=/usr/bin/sh -c 'env SECRET=$(secret-tool lookup myService password) /usr/bin/script'
Если ваш исполняемый файл принимает пароль в качестве аргумента, вы все равно можете использовать secret-tool
вот так:
[Service]
ExecStart=/usr/bin/sh -c '/usr/bin/script --secret=$(secret-tool lookup myService password)'
Предупреждение:пароль будет хорошо виден, когда вы запустите systemctl --user status myUnit.service
, поскольку он показывает, что аргумент запускается в командной строке. Это означает, что это также будет видно пользователям, использующим top
или ps -aux
.
Просто упомянем об этом, systemd 274 поддерживает специальные файлы учетных данных в памяти, см. параметр LoadCredentials=
на странице руководства systemd.exec(5 ), который также относится к модулям.service.