Monituj o hasło podczas uruchamiania z usługą systemd

16

Dotyczy to Arch Linux (i być może innych używających dystrybucji systemd). Chcę zamontować partycję TrueCrypt podczas rozruchu. W starym przypadku sysvinitbyło to całkiem proste, przy użyciu skryptu wywoływanego przez rc.local.

Przeszedłem do mojego prądu przechwytując wątek na forum Arch . Jest jeszcze jeden wątek, w którym ten wątek opracowany systemowo mówi się o „posiadaniu rozwiązania”, jednak nie jest dla mnie oczywiste, co to właściwie jest, a OP ma ostatni post stwierdzający, że nie był w stanie osiągnąć swojego celu.

Wygląda na to, że ta osoba to robi, ale szukała sposobu na wyłączenie ciągłych komunikatów rozruchowych podczas wpisywania hasła. Wysłałem tam również prośbę o opublikowanie jego .serviceakt.

Podczas długich poszukiwań ludzie wspominają, że odnieśli sukces lub że jest to możliwe, ale nie określają dokładnie, jakie było rozwiązanie.

Jestem tak daleko, jak tylko mogę odblokować partycję z wiersza poleceń za pośrednictwem systemdusługi (co z kolei daje mi możliwość automatycznego odinstalowania jej przy zamykaniu / ponownym uruchomieniu), ale muszę to zrobić ręcznie po zalogowaniu. Naprawdę podoba mi się proces uruchamiania, aby zatrzymać i poprosić mnie o hasło.

Oto mój obecny skrypt:

[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

Zostawiłem komentarz [Unit], ponieważ w pewnym momencie wpadłem na sugestie, że powinien tam być, ale miałem z tym problemy. Powyższe wydaje się działać dobrze po uruchomieniu / zalogowaniu ... po prostu nie podczas.

Hendy
źródło
O ile rozumiem, jeśli nie chcesz, aby przeszkadzało ci rejestrowanie wiadomości, musisz utworzyć barierę w pliku jednostkowym - co oznacza, że ​​będzie wymagało uruchomienia wszystkich usług przed zakończeniem (inicjalizacją) i zablokuje wszelkie działające po nim usługi. Czy to właśnie próbujesz osiągnąć?
peterph
@peterph Nie sądzę, żeby miało to znaczenie, dopóki cokolwiek jest wymagane przez TrueCrypt, zanim pojawi się monit. Inne rzeczy nie zależą od tego, ponieważ jest to po prostu wolumin do przechowywania plików; w związku z tym inne rzeczy mogą się ładować w tle podczas wprowadzania hasła. Obecnie czekam na logowanie, a następnie ręcznie zaczynam od sudo systemctl start truecrypt-vault, wprowadź suhasło, następnie wpisz hasło TC Volume startx. Z pewnością mógłbym otrzymać monit o podanie hasła podczas uruchamiania, aby uniknąć dodatkowych kroków po zalogowaniu?
Hendy
To był mój punkt i właściwie również twój (jest to nawet w temacie pytania) - aby uzyskać monit o hasło podczas uruchamiania. Jeśli nie używasz graficznego rozruchu plymouth, jakakolwiek prośba o hasło w konsoli może zostać utracona w usługach rozpoczynających się równolegle.
peterph
O. Myślałem, że pytasz, czy muszę zatrzymać usługi po tym, czy upewnić się, że wszystkie poprzednie usługi się rozpoczęły ... Nie jestem pewien i starałem się odpowiedzieć jak najlepiej. Uruchamiam tylko do poziomu 3 z logowaniem tekstowym i startxręcznie. Brak menedżera logowania. Ale tak, ja zrobić konieczność zatrzymania komunikaty startowe, a ja wprowadzić tekst, w przeciwnym razie będzie to po prostu znikają z ekranu.
Hendy
8
Cóż, systemdma agenta, który może poprosić o hasło, więc możesz spojrzeć w tym kierunku.
peterph

Odpowiedzi:

2
  • Napisz skrypt opakowujący i włóż go ExecStart=
  • Ze skryptu otoki użyj systemd-ask-password <PROMPT>, odczytaj hasło ze standardowego wejścia i podaj je do truecrypt w dowolny wymagany sposób
  • Nie zapomnij o exectruecrypt od końca skryptu, aby nie pozostawiać dodatkowego procesu bash

Spowoduje to natychmiastowe zapytanie systemowego o hasło (jeśli uruchomisz apache przy użyciu systemctl) lub jednego z tak zwanych agentów (istnieją domyślne, które pytają o hasło przy użyciu ściany lub bezpośrednio na konsoli podczas uruchamiania systemu). To najlepsza rzecz, jaką możesz zrobić, aby zachować zgodność.

intelfx
źródło