Aufforderung zur Eingabe des Kennworts während des Systemstarts mit dem Systemd-Dienst

16

Dies ist relevant für Arch Linux (und möglicherweise für andere Distributionen, die Arch Linux verwenden systemd). Ich möchte beim Booten eine TrueCrypt-Partition mounten. Bei den alten sysvinitwar dies mit einem Skript, das von aufgerufen wurde, ziemlich einfach rc.local.

Ich bin zu meinem aktuellen Stand gekommen, indem ich einen Arch-Forenthread entführt habe . Es gibt einen anderen Thread, in dem dieser systemd-devel-Thread als "die Lösung haben" bezeichnet wird, für mich ist es jedoch nicht ersichtlich, was es tatsächlich ist, und der OP hat den letzten Post, der besagt, dass er sein Ziel nicht erreichen konnte.

So wie es aussieht, tut diese Person es, suchte jedoch nach einer Möglichkeit, fortlaufende Startnachrichten zu deaktivieren, während sie das Kennwort eingibt. Ich habe auch dort gepostet und ihn gebeten, seine aktuelle .serviceDatei zu posten .

Bei einigen Suchanfragen wird erwähnt, dass sie erfolgreich waren oder dass dies möglich ist, aber es wird nicht genau angegeben, wie die Lösung lautete.

Ich bin zwar in der Lage, die Partition über einen systemdDienst von der Befehlszeile zu entsperren (was mir wiederum die Möglichkeit gibt, die Bereitstellung beim Herunterfahren / Neustarten automatisch aufzuheben), muss dies aber nach dem Anmelden manuell tun. Ich möchte wirklich, dass der Startvorgang pausiert und mich nach dem Kennwort fragt.

Hier ist mein aktuelles Skript:

[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

Ich habe das kommentierte Zeug in gelassen [Unit], als ich irgendwann auf Vorschläge stieß, dass es dort sein sollte, aber ich hatte Probleme damit. Das obige scheint nach dem Booten / Einloggen einwandfrei zu funktionieren ... nur nicht während.

Hendy
quelle
Wenn Sie nicht durch Protokollierungsnachrichten unterbrochen werden möchten, müssen Sie meines Wissens nach eine Sperre in der Gerätedatei erstellen. Dies bedeutet, dass alle Dienste, die gestartet wurden, erforderlich sind, bevor sie abgeschlossen sind (Initialisierung) und blockiert werden Alle Dienste, die danach ausgeführt werden. Versuchen Sie das zu erreichen?
Peterph
@ Peterph Ich denke nicht, dass es wichtig ist, solange alles, was von TrueCrypt benötigt wird, ausgeführt wird, bis ich die Eingabeaufforderung erhalte. Andere Dinge hängen nicht davon ab, da es sich nur um ein Volume zum Speichern von Dateien handelt. So könnten andere Dinge im Hintergrund geladen werden, während ich das Passwort eingebe. Derzeit warte ich, bis ich mich angemeldet habe, und beginne dann manuell mit sudo systemctl start truecrypt-vault, gib das suPasswort ein, gib das TC Volume Passwort ein und dann startx. Sicher könnte ich mir die Passwortabfrage beim Booten anzeigen lassen, um die zusätzlichen Schritte nach dem Login zu vermeiden?
Hendy
Das war mein Punkt und eigentlich auch Ihr Punkt (es ist sogar im Betreff der Frage) - die Passwortabfrage beim Booten zu bekommen. Wenn Sie nicht wie beim grafischen Booten vorgehen plymouth, ist es wahrscheinlich, dass bei Diensten, die parallel gestartet werden , eine Kennwortabfrage an der Konsole verloren geht.
Peterph
Oh. Ich dachte, Sie würden gefragt, ob ich die Dienste nach dem Start oder nach dem Start aller vorherigen Dienste beenden muss. Ich bin mir nicht sicher und habe versucht, so gut wie möglich zu antworten. Ich boote nur mit einem Text-Login und startxmanuell auf Runlevel 3 . Kein Login Manager. Aber ja, ich muss die Startmeldungen anhalten, während ich den Text eingebe, sonst verschwindet er einfach vom Bildschirm.
Hendy
8
Nun, systemdhat einen Agenten , der ein Passwort anfordern kann, so dass Sie in diese Richtung schauen können.
Peterph

Antworten:

2
  • Schreiben Sie ein Wrapper-Skript und fügen Sie es ein ExecStart=
  • Verwenden Sie im Wrapper-Skript, systemd-ask-password <PROMPT>lesen Sie das Kennwort aus der Standardausgabe und geben Sie es in der erforderlichen Weise an truecrypt weiter
  • Vergessen Sie nicht, execvom Ende Ihres Skripts an TrueCrypt zu verwenden, um einen zusätzlichen Bash-Prozess zu vermeiden

Dies veranlasst systemd, das Passwort sofort abzufragen (wenn Sie Apache mit systemctl starten) oder einen der sogenannten Agenten zu verwenden (es gibt Standard-Agenten, die während des Systemstarts über wall oder direkt auf der Konsole nach Passwörtern fragen). Dies ist das Beste, was Sie tun können, um konform zu bleiben.

intelfx
quelle