Richiedi password durante l'avvio con il servizio systemd


16

Questo è rilevante per Arch Linux (e forse per altre distribuzioni che utilizzano systemd). Voglio montare una partizione TrueCrypt all'avvio. Con il vecchio sysvinit, questo era piuttosto semplice con una sceneggiatura chiamata da rc.local.

Sono arrivato al mio attuale dirottando un thread del forum Arch . C'è un altro thread in cui si parla di questo thread di sviluppo di sistema come "avere la soluzione", tuttavia non mi è chiaro quale sia effettivamente, e l'OP ha l'ultimo post che afferma che non è stato in grado di raggiungere il suo obiettivo.

Dal suo aspetto questa persona lo sta facendo, ma stava cercando un modo per disattivare i messaggi di avvio continui mentre digita la password. Ho postato anche lì chiedendogli di pubblicare il suo .servicefile reale .

Nella ricerca un po ', la gente dice che hanno avuto successo o che è possibile, ma non precisano esattamente quale fosse la soluzione.

Sono in grado di sbloccare la partizione dalla riga di comando tramite un systemdservizio (che a sua volta mi dà la possibilità di smontarla automaticamente allo spegnimento / riavvio), ma devo farlo manualmente una volta effettuato l'accesso. I ' Mi piace molto il processo di avvio per mettere in pausa e chiedermi la password.

Ecco la mia sceneggiatura attuale:

[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

Ho lasciato le cose commentate [Unit], dato che a un certo punto mi sono imbattuto in suggerimenti che dovrebbero essere lì, ma ho avuto problemi con esso. Quanto sopra sembra funzionare bene dopo l'avvio / il login ... non solo durante.


A quanto ho capito, se non si desidera essere interrotti dalla registrazione dei messaggi, è necessario creare una barriera nel file dell'unità, il che significa che richiederà tutti i servizi avviati prima che finisca (inizializzazione) e bloccherà qualsiasi servizio in esecuzione dopo di esso. È quello che stai cercando di ottenere?
Pietro

@peterph Non credo che importi finché tutto ciò che è richiesto da TrueCrypt è in esecuzione quando ricevo il prompt. Altre cose non dipendono da questo poiché è solo un volume per l'archiviazione dei file; quindi, altre cose potrebbero caricarsi in background mentre inserisco la password. Al momento, aspetto di accedere, quindi inizio manualmente con sudo systemctl start truecrypt-vault, inserisci la supassword, inserisci la password del volume TC, quindi startx. Sicuramente potrei avere il prompt della password presentato durante l'avvio per evitare i passaggi aggiuntivi dopo il login?
Hendy,

Questo era il mio punto e in realtà anche il tuo (è anche nell'oggetto della domanda): ottenere la richiesta della password durante l'avvio. Se non si utilizza l'avvio grafico come plymouth, è probabile che qualsiasi richiesta di password sulla console venga persa nei servizi che iniziano in parallelo.
peterph

Oh. Pensavo che mi avresti chiesto se avrei dovuto interrompere i servizi dopo o per assicurarmi che tutti i servizi precedenti fossero stati avviati ... Non sono sicuro e ho cercato di rispondere nel miglior modo possibile. Avvio solo a runlevel 3 con un login testuale e startxmanualmente. Nessun gestore di login. Ma sì, io faccio necessità di fermare i messaggi di avvio, mentre io entro il testo, altrimenti sarà solo svanire fuori dallo schermo.
Hendy,

8
Bene, systemdha un agente che è in grado di richiedere una password, quindi puoi guardare in quella direzione.
peterph,

Risposte:


2
  • Scrivi uno script wrapper e inseriscilo ExecStart=
  • Dallo script wrapper, usa systemd-ask-password <PROMPT>, leggi la password dal suo stdout e inviala a TrueCript in qualunque modo sia necessario
  • Non dimenticare di eseguire la execcrittografia alla fine della tua sceneggiatura per non lasciare un processo bash in sospeso

Questo farà sì che systemd richieda immediatamente la password (se avvii apache usando systemctl) o usando uno dei cosiddetti agenti (ci sono quelli predefiniti che richiedono password usando wall o direttamente sulla console durante l'avvio del sistema). Questa è la cosa migliore che puoi fare per rimanere conforme.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.