Gostaria de iniciar um serviço usando um arquivo de unidade systemd. Este serviço requer uma senha para iniciar. Eu não quero armazenar a senha em texto sem formatação no arquivo de unidade systemd, porque é legível pelo mundo. Também não quero fornecer essa senha interativamente.
Se eu estivesse escrevendo um script normal para isso, armazenaria as credenciais em um arquivo pertencente à raiz com permissões restritas (400 ou 600) e, em seguida, leria o arquivo como parte do script. Existe alguma maneira específica de estilo systemd de fazer isso, ou devo seguir o mesmo processo que faria em um script de shell comum?
shell-script
permissions
systemd
password
SauceCode
fonte
fonte
Respostas:
Existem duas abordagens possíveis aqui, dependendo dos seus requisitos. Se você não deseja que a senha seja solicitada quando o serviço estiver ativado, use a
EnvironmentFile
diretiva. Deman systemd.exec
:Se você não quiser ser solicitado, você usaria uma das
systemd-ask-password
directivas. Deman systemd-ask-password
:fonte
ps ajxewww
) para que alguém possa pegue de lá.EnvironmentFile
entrada com um caminho absoluto para um arquivo com 400 permissões funciona bem.Posso oferecer uma alternativa adicional que pode atender às suas necessidades, mas exige que várias pré-condições sejam atendidas:
Os próximos passos são os seguintes:
Use
secret-tool
fromlibsecret
para armazenar sua senha. Por exemplo:Se o seu executável suportar a leitura da senha de uma variável ambiental, é melhor:
Se o seu executável aceitar a senha como argumento, você ainda poderá usar
secret-tool
o seguinte:Cuidado : a senha ficará visível quando você executar,
systemctl --user status myUnit.service
pois mostra o argumento como sendo executado na linha de comando. Isso significa que isso também será visível para usuários executandotop
oups -aux
.fonte
Há uma terceira alternativa para isso, bem como a sugestão 2 de @jasonwryan.
trecho da resposta de Michael Hampton no ServerFault - Como definir variáveis de ambiente no serviço systemd?fonte