Meminta kata sandi saat boot dengan layanan systemd

16

Ini relevan dengan Arch Linux (dan mungkin distribusi lain yang menggunakan systemd). Saya ingin memasang partisi TrueCrypt saat boot. Dengan yang lama sysvinit, ini cukup mudah dengan script yang disebut oleh rc.local.

Saya sampai pada arus saya dengan membajak utas forum Arch . Ada utas lain di mana utas sistem-devel ini dibicarakan sebagai "memiliki solusinya," namun tidak jelas bagi saya apa sebenarnya itu, dan OP memiliki pos terakhir yang menyatakan bahwa ia tidak dapat mencapai tujuannya.

Dari kelihatannya orang ini melakukannya, tetapi sedang mencari cara untuk mematikan pesan booting terus menerus saat dia mengetikkan kata sandi. Saya diposting di sana juga memintanya untuk memposting .servicefile yang sebenarnya .

Dalam mencari sedikit, orang menyebutkan bahwa mereka telah sukses atau itu mungkin, tetapi jangan menguraikan dengan tepat apa solusinya.

Saya sejauh dapat membuka kunci partisi dari baris perintah melalui systemdlayanan (yang pada gilirannya memberi saya kemampuan untuk turun secara otomatis pada shutdown / reboot), tetapi saya harus melakukannya secara manual setelah login. Saya sangat suka proses boot untuk berhenti dan meminta saya kata sandi.

Inilah skrip saya saat ini:

[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

Saya meninggalkan hal-hal yang dikomentari [Unit], karena pada titik tertentu saya menemukan saran bahwa itu harus ada, tetapi saya punya masalah dengan itu. Di atas tampaknya berfungsi dengan baik setelah boot / login ... hanya saja tidak selama.

Hendy
sumber
Sejauh yang saya mengerti, jika Anda tidak ingin terganggu oleh pencatatan pesan, Anda perlu membuat penghalang dalam file unit - yang berarti, itu akan memerlukan semua layanan dimulai sebelum selesai (inisialisasi) dan itu akan memblokir layanan yang berjalan setelahnya. Itukah yang ingin Anda capai?
peterph
@peterph Saya tidak berpikir itu penting asalkan apa pun yang diperlukan oleh TrueCrypt berjalan pada saat saya mendapatkan prompt. Hal-hal lain tidak bergantung pada ini karena itu hanya volume untuk menyimpan file; dengan demikian, hal-hal lain dapat dimuat di latar belakang saat saya memasukkan kata sandi. Saat ini, saya menunggu untuk masuk, lalu mulai secara manual sudo systemctl start truecrypt-vault, memasukkan sukata sandi, memasukkan kata sandi Volume TC, lalu startx. Tentunya saya dapat meminta kata sandi disajikan kepada saya selama boot untuk menghindari langkah-langkah tambahan setelah login?
Hendy
Itu maksud saya dan sebenarnya milik Anda juga (bahkan dalam subjek pertanyaan) - untuk mendapatkan prompt kata sandi saat boot. Jika Anda tidak menggunakan boot grafis seperti plymouth, kata sandi pada konsol kemungkinan akan hilang dalam layanan yang dimulai secara paralel.
peterph
Oh Saya pikir Anda bertanya apakah saya perlu menghentikan layanan setelah atau untuk memastikan semua layanan sebelumnya telah dimulai ... Saya tidak yakin dan mencoba menjawab sebaik mungkin. Saya hanya boot ke runlevel 3 dengan login teks dan startxsecara manual. Tidak ada manajer login. Tapi ya, saya lakukan perlu menghentikan pesan boot sementara aku memasukkan teks, jika tidak maka hanya akan lenyap dari layar.
Hendy
8
Nah, systemdmemiliki agen yang dapat meminta kata sandi, jadi Anda bisa melihat ke arah itu.
peterph

Jawaban:

2
  • Tulis skrip pembungkus dan masukkan ExecStart=
  • Dari skrip wrapper, gunakan systemd-ask-password <PROMPT>, baca kata sandi dari stdout-nya, dan masukkan ke truecrypt dengan cara apa pun yang diperlukan
  • Jangan lupa untuk exectruecrypt dari akhir skrip Anda agar tidak meninggalkan proses bash ekstra berkeliaran

Ini akan membuat systemd menanyakan kata sandi dengan segera (jika Anda memulai apache menggunakan systemctl) atau menggunakan salah satu agen yang disebut (ada agen standar yang meminta kata sandi menggunakan dinding atau langsung di konsol selama boot sistem). Ini adalah hal terbaik yang dapat Anda lakukan untuk tetap patuh.

intelfx
sumber