Solicitar senha durante a inicialização com o serviço systemd

16

Isso é relevante para o Arch Linux (e talvez outras distribuições usando systemd). Eu quero montar uma partição TrueCrypt na inicialização. Com o antigo sysvinit, isso era bastante direto com um script chamado por rc.local.

Cheguei ao meu atual, seqüestrando um tópico do fórum Arch . Há outro tópico em que esse tópico do systemd-devel é mencionado como "ter a solução", no entanto, para mim não é aparente o que realmente é, e o OP tem o último post afirmando que ele não foi capaz de atingir seu objetivo.

Pelo que parece, essa pessoa está fazendo isso, mas estava procurando uma maneira de desativar as mensagens de inicialização contínuas enquanto digita a senha. Eu postei lá também pedindo para ele postar seu .servicearquivo real .

Ao pesquisar um pouco, as pessoas mencionam que foram bem-sucedidas ou que são possíveis, mas não explicam exatamente qual era a solução.

Eu sou capaz de desbloquear a partição da linha de comando por meio de um systemdserviço (o que, por sua vez, me permite desmontá-la automaticamente no desligamento / reinicialização), mas preciso fazer isso manualmente uma vez logado. Eu realmente gostaria que o processo de inicialização parasse e me pedisse a senha.

Aqui está o meu script atual:

[Unit]
Description=Truecrypt Setup for vault
#DefaultDependencies=no
#Conflicts=umount.target
#Before=umount.target
#After=systemd-readahead-collect.service systemd-readahead-replay.service
#After=cryptsetup.target

[Service]
Type=oneshot
RemainAfterExit=yes
#StandardInput=tty-force
ExecStart=/bin/sh -c '/usr/bin/truecrypt -t --protect-hidden=no -k "" --filesystem=none --slot=1 -p `systemd-ask-password "Enter password for truecrypt volume: "` /dev/sda4'
ExecStop=/usr/bin/truecrypt --filesystem=none -d /dev/sda4

[Install]
WantedBy=multi-user.target

Deixei o material comentado [Unit], pois em algum momento encontrei sugestões de que ele deveria estar lá, mas tive problemas com ele. O acima parece funcionar bem após a inicialização / login ... apenas não durante.

Hendy
fonte
Pelo que entendi, se você não quiser ser interrompido pelo log de mensagens, precisará criar uma barreira no arquivo da unidade - o que significa que exigirá todos os serviços iniciados antes de terminar (inicialização) e bloqueará quaisquer serviços em execução depois dele. É isso que você está tentando alcançar?
Peterph #
@ Peterph Eu não acho que isso importe, contanto que seja necessário o que o TrueCrypt estiver executando no momento em que eu receber o prompt. Outras coisas não dependem disso, pois é apenas um volume para armazenar arquivos; assim, outras coisas podem carregar em segundo plano enquanto eu insiro a senha. No momento, aguardo o login e, em seguida, inicio manualmente com sudo systemctl start truecrypt-vault, digite a susenha, digite a senha do TC Volume e, em seguida startx. Certamente eu poderia me apresentar a solicitação de senha durante a inicialização para evitar as etapas extras após o login?
Hendy
Esse foi o meu ponto e, na verdade, o seu também (é mesmo no assunto da pergunta) - obter o prompt de senha durante a inicialização. Se você não estiver usando a inicialização gráfica plymouth, é provável que qualquer solicitação de senha no console seja perdida nos serviços iniciados em paralelo.
Peterph
Oh. Eu pensei que você estava perguntando se eu precisava interromper os serviços depois ou para ter certeza de que todos os serviços anteriores foram iniciados ... Não tenho certeza e tentei responder da melhor maneira possível. Inicializo apenas no nível de execução 3 com um login de texto e startxmanualmente. Nenhum gerenciador de login. Mas sim, eu faço necessidade de parar as mensagens de inicialização enquanto eu digite o texto, caso contrário ele vai simplesmente desaparecer fora da tela.
quer
8
Bem, systemdtem um agente que pode solicitar uma senha, então você deve olhar nessa direção.
Peterph

Respostas:

2
  • Escreva um script de wrapper e coloque-o ExecStart=
  • No script do wrapper, use systemd-ask-password <PROMPT>, leia a senha de seu stdout e alimente-a para recifrá-la da maneira que for necessária
  • Não se esqueça de execcorrigir novamente o script no final do seu script para não deixar um processo adicional do bash por aí

Isso fará com que o systemd consulte a senha imediatamente (se você iniciar o apache usando o systemctl) ou usando um dos chamados agentes (existem os padrão que solicitam senhas usando o wall ou diretamente no console durante a inicialização do sistema). Essa é a melhor coisa que você pode fazer para manter a conformidade.

intelfx
fonte
0

Eu encontrei este post no Unix StackExchange: rc.local com read não ecoará pressionamentos de tecla
Acho que você poderia tentar a solução usada

Kiwy
fonte