systemdサービスでの起動中にパスワードを要求する


16

これはArch Linux(およびおそらくを使用する他のディストリビューション)に関連していsystemdます。ブート時にTrueCryptパーティションをマウントしたい。古いものではsysvinit、これはによって呼ばれるスクリプトでかなり簡単でしたrc.local

私はArchフォーラムスレッドをハイジャックすることで現在に達しました。別のありますスレッドこのsystemdに-develのスレッドがしかし、それが実際にあるものを私には明らかではありません、そしてOPは彼が彼の目標を達成することができなかったことを示す最後のポストを持っている「ソリューションを持つ」との話されては。

その見た目から、この人はそれをやっていますが、パスワードを入力している間、継続的なブートメッセージをオフにする方法を探していました。私はそこに投稿し、彼に実際の.serviceファイルを投稿するように頼みました。

かなりの検索で、人々は成功している、または可能であると述べていますが、解決策が何であったかを正確に述べてはいけません。

systemdサービスを介してコマンドラインからパーティションのロックを解除できる限り(これにより、シャットダウン/再起動時に自動的にマウントを解除できるようになります)、ログイン後に手動で行う必要があります。 dブートプロセスが一時停止してパスワードを要求されるのが本当に好きです。

現在のスクリプトは次のとおりです。

[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

[Unit]ある時点で、そこにあるべきだという提案に出くわしたので、コメントを残しましたが、問題がありました。上記は、起動/ログイン後でも正常に動作するようです...


私が理解している限りでは、メッセージのロギングによって中断されたくない場合は、ユニットファイルにバリアを作成する必要があります-つまり、終了する前にすべてのサービスを開始する必要があり(初期化)、ブロックしますそれ以降に実行されているサービス。それはあなたが達成しようとしていることですか?
ペテルフ

@peterphプロンプトが表示されるまでにTrueCryptに必要なものが実行されている限り、それは問題ではないと思います。それはファイルを保存するための単なるボリュームであるため、他のものはこれに依存しません。したがって、パスワードを入力している間、バックグラウンドで他のものがロードされる可能性があります。現在、ログインを待ち、手動で開始しsudo systemctl start truecrypt-vaultsuパスワードを入力し、TCボリュームのパスワードを入力してからを押しますstartx。ログイン後の余分な手順を回避するために、ブート中にパスワードプロンプトを表示することはできますか?
ヘンディ

それが私のポイントであり、実際にはあなたの問題でもありました(質問の題目にもあります)-ブート中にパスワードプロンプトを表示します。のようなグラフィカルブートを使用していない場合plymouth、コンソールのパスワードプロンプトは、並行して開始するサービスで失われる可能性があります。
ペテルフ

ああ。サービスを停止する必要があるかどうか、または以前のすべてのサービスが開始されたことを確認する必要があるかどうかを尋ねていると思いました...よくわかりません。テキストログインでstartx手動でランレベル3を起動するだけです。ログインマネージャーはありません。しかし、はい、私はやる、それ以外の場合は、単に画面をオフに消えよ、私はテキストを入力しながら、ブートメッセージを停止する必要があります。
ヘンディ

8
まあ、systemd持っているエージェント、その方向でとてもyoumight見て、パスワードを要求することができます。
ペテルフ

回答:


2
  • ラッパースクリプトを作成し、それを配置する ExecStart=
  • ラッパースクリプトから、を使用してsystemd-ask-password <PROMPT>、stdoutからパスワードを読み取り、必要な方法でtruecryptにフィードします。
  • exec余計なbashプロセスを放置しないために、スクリプトの最後からtruecryptを忘れないでください

これにより、systemdがすぐにパスワードを照会します(systemctlを使用してapacheを起動する場合)、またはいわゆるエージェントのいずれかを使用します(システム起動時にwallを使用するか、コンソールで直接パスワードを要求するデフォルトのものがあります)。これは、コンプライアンスを維持するためにできる最善のことです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.