
[email protected]
次のサービスを作成しましたsystemd
。
[Unit]
Description=Cryptography Setup for '%I'
After=cryptsetup-pre.target
After=dev-mapper-%i.device
Before=cryptsetup.target
Before=umount.target
BindsTo=dev-mapper-%i.device
BindsTo=dev-mapper-%i.luks.device
Conflicts=umount.target
DefaultDependencies=no
IgnoreOnIsolate=true
RequiresMountsFor=/home
[Service]
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach '%I.luks' '/dev/mapper/%I' '%h/%I/secret.key' 'luks,header=%h/%I/header'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach '%I.luks'
KillMode=none
RemainAfterExit=yes
TimeoutSec=0
Type=oneshot
[Install]
WantedBy=default.target
アイデアは、サービスを有効にした特定のユーザーに対してのみ特定のLUKS暗号化xxx
デバイスを復号化することです。たとえば、次のようになります。xxx.luks
systemctl --user enable luks@xxx
残念ながらテストさえ
systemctl --user start luks@xxx
1
実際の理由を指定せずに常に終了コードを返すため、失敗します。権限に問題がある可能性があることは明らかです。手動でトリガーするには、たとえばを使用するcryptsetup luksOpen ...
にはケースを持ち上げる必要があると確信していますsudo
。実際に発行したら
sudo systemctl start luks@xxx
それは魅力のように動作します。
sudo systemctl enable luks@xxx
開始段階に適用可能です。
メモ:
これらのシステム全体のインストールでは、もちろん、%h
サービスは特定のユーザーの実際のホームディレクトリに置き換えて変更する必要があります。これは醜く、とにかく究極の目的を崩すことです。
pam_mount
これで、どちらがユーザーごとに同様のインストールを実行できるかがわかりました(分離されたLUKSヘッダーをサポートせず、実際に望ましくないデバイスをマウントするため使用できません)pam_systemd
。systemctl --user
できる権限を取得する方法は明らかです。
しかし、故障の症状は
systemctl --user enable luks@xxx
テスト結果より悪かった。
systemctl --user start luks@xxx
(終了コードのみが返されます1
。)つまり、特定のユーザーが文句を言うため、ログインすらできません。
Failed to create bus connection: No such file or directory
なぜなら、XDG_RUNTIME_DIR
これはDBUS_SESSION_BUS_ADDRESS
もはや設定されていませんが、サービスによって設定される必要があるからですsystemd-logind.service
。明らかに、luks@xxx
初期化プロセス全体が何らかの形で破損しているようですが、ログに情報がないため、正確な理由がわかりません。したがって、現在の権限の欠如について疑問が残っています。
教育的なアドバイスを楽しみにしています。ありがとうございます。
答え1
別の回避策は、NOPASSWDオプションを有効にしたときにroot権限で実行できるsudoers
ように、関連ユーザーの権限を追加するようにファイルを編集することです。/usr/lib/systemd/systemd-cryptsetup
その後、上記の(ユーザー別)サービスファイルを編集して次の内容を読むことができます。
ExecStart=/usr/bin/sudo /usr/lib/systemd/systemd-cryptsetup attach '%I.luks' '/dev/mapper/%I' '%h/%I/secret.key' 'luks,header=%h/%I/header'
ExecStop=/usr/bin/sudo /usr/lib/systemd/systemd-cryptsetup detach '%I.luks'
有効にする必要があるかどうかわかりません。!必要この仕事のために
修正する:
セキュリティを強化するために、特にマルチユーザーシステムでは、sudoアクセス権を直接付与するのではなく、ユーザーに代わって「接続」および「分離」ステップを実行するいくつかのスクリプトを生成することをお勧めします。/usr/lib/systemd/systemd-cryptsetup
そうしないと、この実行権限を持つすべてのユーザーにとって、コマンドは他の暗号化ボリュームを妨げる可能性があります。
答え2
ディレクティブを使用してファイルを作成し、ディレクティブを使用してファイルを削除するユーザー用のType=oneshot
RemainAfterExit=yes
サービスを作成して有効にすることをお勧めします。ExecStart
ExecStop
ExecStart="/usr/bin/touch %h/.decrypt"
ExecStop="/usr/bin/rm %h/.decrypt"
[email protected]
その後、絶対パスを使用してシステムユーザー用の単位ファイルを作成して有効にできます。
PathExists="/home/user/.decrypt"
上記のユーザーサービスによって生成されたパスを確認し、[email protected]
作成時にユニットを有効にし、削除時にユニットを無効にして、ユーザーサービスに対するシステムサービスの間接的な依存関係を確立します。
安全な作業のために、ファイルが作成されたディレクトリはもちろん、ユーザーだけが書き込み可能でなければなりません。