「Pam mount」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎セットアップ: 情報を更新)
108行目: 108行目:
 
}}
 
}}
   
==ログインマネージャの設定==
+
== ログインマネージャの設定 ==
   
通常、{{ic|/etc/pam.d}} の設定ファイルを編集してログイン時に pam_mount が実行されるようにする必要があります。それぞれのファイルのエントリの順番は重要です。以下に書かれているように {{ic|/etc/pam.d/system-auth}} を編集してください。ディスプレイマネージャを使用している場合 (例: Slim や GDM)ディスプレイマネージャのファイルも編集してください。以下の設定例では、追加する太字で示ています。
+
一般に、ログイン時に ''pam_mount'' が呼び出されるように、{{ic|/etc/pam.d}} の設定ファイルを編集する必要があります。ファイルのエントリの正しい序が重要です。{{ic|/etc/pam.d/system-login}} を以下のように編集する必要があります[[ディスプレイマネージャ]] を使用る場合のファイルに {{ic|system-login}} が含まれていることを確認してください。設定ファイルのを次に示します。追加された太字で示されています。
   
  +
セッション内の {{ic|pam_mount}} の前の {{ic|pam_succeed_if}} 行は、{{ic|pam_mount}} をスキップします ({{ic|1=success=''n''}} は、次の {{ic |''n''}} 行) {{ic|systemd-user}} サービスが PAM スタックを通じて実行されている場合 (つまり、{{ic|/etc/pam.d/systemd-user}}) これにより、{{ic|systemd --user}} インスタンスの起動時に、二重マウントの試行や削除された権限に関連するエラーが回避されます。[https://kempniu.wordpress.com/2016/01/07/making-pam_mount-play-nicer-with-systemd-user-sessions/] および [https://www.suse.com/support/kb] を参照してください。詳細については、[https://www.suse.com/support/kb/doc/?id=000019569] を参照してください。
{{hc|/etc/pam.d/system-auth|2=
 
#%PAM-1.0
 
   
  +
{{hc|/etc/pam.d/system-login|2=
auth required pam_env.so
 
auth required pam_unix.so try_first_pass nullok
 
'''auth optional pam_mount.so'''
 
auth optional pam_permit.so
 
 
account required pam_unix.so
 
account optional pam_permit.so
 
account required pam_time.so
 
 
'''password optional pam_mount.so'''
 
password required pam_unix.so try_first_pass nullok sha512 shadow
 
password optional pam_permit.so
 
 
'''session optional pam_mount.so'''
 
session required pam_limits.so
 
session required pam_env.so
 
session required pam_unix.so
 
session optional pam_permit.so
 
}}
 
 
=== SLiM ===
 
 
[[SLiM]] の場合:
 
 
{{hc|/etc/pam.d/slim|
 
auth requisite pam_nologin.so
 
auth required pam_env.so
 
auth required pam_unix.so
 
'''auth optional pam_mount.so'''
 
account required pam_unix.so
 
password required pam_unix.so
 
'''password optional pam_mount.so'''
 
session required pam_limits.so
 
session required pam_unix.so
 
'''session optional pam_mount.so'''
 
session optional pam_loginuid.so
 
session optional pam_ck_connector.so
 
}}
 
 
=== GDM ===
 
 
[[GDM]] の場合:
 
 
{{Note|GDM バージョン 3.2 から設定ファイルは ({{ic|/etc/pam.d/gdm}} から) {{ic|/etc/pam.d/gdm-password}} に変更されています。}}
 
 
{{hc|/etc/pam.d/gdm-password|2=
 
 
#%PAM-1.0
 
#%PAM-1.0
auth requisite pam_nologin.so
 
auth required pam_env.so
 
 
auth requisite pam_unix.so nullok
 
'''auth optional pam_mount.so'''
 
auth optional pam_gnome_keyring.so
 
   
auth sufficient pam_succeed_if.so uid >= 1000 quiet
+
auth required pam_shells.so
auth required pam_deny.so
+
auth requisite pam_nologin.so
  +
'''auth optional pam_mount.so'''
  +
auth include system-auth
   
account required pam_unix.so
+
account required pam_access.so
  +
account required pam_nologin.so
  +
account include system-auth
   
password required pam_unix.so
+
'''password optional pam_mount.so'''
'''password optional pam_mount.so'''
+
password include system-auth
   
session required pam_loginuid.so
+
session optional pam_loginuid.so
-session optional pam_systemd.so
+
session optional pam_keyinit.so force revoke
  +
'''session [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet'''
session optional pam_keyinit.so force revoke
 
session required pam_limits.so
+
'''session optional pam_mount.so'''
session required pam_unix.so
+
session include system-auth
'''session optional pam_mount.so'''
+
session optional pam_motd.so motd=/etc/motd
session optional pam_gnome_keyring.so auto_start
+
session optional pam_mail.so dir=/var/spool/mail standard quiet
  +
-session optional pam_systemd.so
  +
session required pam_env.so
 
}}
 
}}

2023年11月2日 (木) 01:10時点における版

関連記事

pam_mount を使うことで (LUKSeCryptfs などで) 暗号化したホームパーティションをログイン時に自動的にマウントすることができます。ログインマネージャを使ったりコンソールでログインしたときに /home をマウントします (マウントポイントは自由に指定できます)。ドライブを暗号化するパスフレーズは Linux ユーザーのパスフレーズと同一である必要があります。同一ならばログインに使うパスフレーズと別のパスフレーズを入力する必要がありません。

ノート: pam_mount は、最後のセッションを閉じるときにパーティションをアンマウントすることもできますが、pam スタックで pam_systemd.so が使用されているため、これはそのままでは機能しません。 systemd issue 8598 および Talk:Pam mount#automatic unmounting and systemd を参照してください。

設定

pam_mount パッケージをインストールします。

グローバル(システム)設定

モジュールは /etc/security/pam_mount.conf.xml で設定されます。詳細については、pam_mount.conf(5) を参照してください。次のようにファイルを編集します。

/etc/security/pam_mount.conf.xml
  <!-- Generic encrypted partition example -->
  <volume user="USERNAME" fstype="auto" path="/dev/sdaX" mountpoint="/home" options="fsck,noatime" />
  
  <!-- Example using CIFS -->
  <volume
      fstype="cifs"
      server="server.example.com"
      path="share_name"
      mountpoint="~/mnt/share_name"
      uid="10000-19999"
      options="sec=krb5i,vers=3.0,cruid=%(USERUID)"
  />
  <mkmountpoint enable="1" remove="true" />

</pam_mount>

注意事項

  • ファイルの最後、最後の閉じタグ </pam_mount> に2行挿入してください。
  • USERNAME はあなたのユーザー名に置き換えてください。
  • /dev/sdaX は、対応するデバイスまたはコンテナファイルに置き換えてください。
  • fstype="auto"/usr/bin/mount.type にある任意の type に変更できます。ほとんどの場合、"auto" で問題ありません。fstype="crypt" を使用すると、ログアウト時にループデバイスが必要なボリュームに対してクローズされます。
  • 必要であれば、マウントオプションを追加してください。mount.cifssmb.conf を読み込まないので、すべてのオプションを指定する必要があることに注意してください。この例では、uid はローカルの smb.conf パラメータ idmap config ... : range = にマッチするので、Unix のみのユーザに対して pam_mount が呼び出されることはありません。Kerberos は krb5 で示され、SMB3.0 が指定されているのは、相手側がデフォルトの SMB1をサポートしていない可能性があるためです。署名は krb5i の末尾の i で有効になります。詳細は mount.cifs(8) を参照。

ローカル (ユーザーごと) 設定

pam_mount は、ユーザーがログイン時にホーム ディレクトリ内のファイルに独自のマウントを定義できるようにすることもサポートしています。この変更による潜在的なセキュリティへの影響を考慮してください。これを有効にするには、次の行が /etc/security/pam_mount.conf.xml に存在し、アクティブであることを確認します。

/etc/security/pam_mount.conf.xml
<luserconf name=".pam_mount.conf.xml" />

これにより、各ユーザーが ~/.pam_mount.conf.xml でマウントを設定できるようになります。ユーザーごとの設定ファイルは、<volume> キーワードのみをサポートします。例:

~/.pam_mount.conf.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">

<pam_mount>
    <volume user="alex" fstype="tmpfs" path="tmpfs" mountpoint="~/test" options="nodev,nosuid" /> 
</pam_mount>

また、選択できるマウント オプションと選択できないマウント オプションに関していくつかの制限があり、その一部は必須です (nosuidnodevsizeuid、これらは /etc/security/pam_mount.conf.xml) を編集することで解除できます。バインドマウントはサポートされていないようです。所有権チェックはマウントポイントでも実行されます。

LUKS ボリューム

LUKS 暗号化ボリュームは次のように簡単に構成できます。

/etc/security/pam_mount.conf.xml
<volume user="username" fstype="crypt" path="/dev/disk/by-partuuid/partition_uuid" mountpoint="~" options="crypto_name=volume_name,allow_discard,fstype=btrfs,compress=zstd" />

ボリュームはロックが解除され、mount.crypt でマウントされます。オプションの詳細については、mount.crypt(8) § マウント オプション を参照してください。

Veracrypt ボリューム

pam_mount は Veracrypt ボリュームをネイティブにサポートしていませんが、回避策 があります。

/etc/security/pam_mount.conf.xml
<volume user="username" fstype="crypt" path="/dev/disk/by-partuuid/partition_uuid" mountpoint="vcrypt"/>
<volume user="username" fstype="auto" path="/dev/mapper/vcrypt" mountpoint="/media/mountpoint"/>

<cryptmount>cryptsetup --veracrypt open --type tcrypt %(VOLUME) %(MNTPT)</cryptmount>
<cryptumount>cryptsetup close %(MNTPT)</cryptumount>

LUKS ボリュームもある場合は、cryptmount/cryptumount を使用する crypt の代わりに、Veracrypt ボリュームに別の fstype を使用できます。たとえば、ncpfs を使用します。 ncpmount/ncpumount NCP ファイルシステムを使用しないように注意してください。

F2FS 暗号化

pam_mount に F2FS 復号化キーをセッションキーリングに追加させるトリックがあります。f2fscrypt でディレクトリを暗号化するときに選択した salt は、/etc/security/pam_mount.conf.xml の salt (以下の例では 0x1111) と一致する必要があり、パスフレーズはユーザーのログインパスワードと一致する必要があります。この例では、pam_mount を使用して FUSE ファイルシステムをマウントしていないことを前提としています。 その場合は、<fusemount><fuseumount> の代わりに、{{ic|<ncpmount>/ などの別の <*mount> の代わりに <fusemount><fuseumount> タグペアを追加します。

/etc/security/pam_mount.conf.xml
<fusemount>f2fscrypt add_key -S 0x1111</fusemount>
<fuseumount>f2fscrypt new_session</fuseumount>
<volume noroot="1" ssh="0" fstype="fuse" path="/tmp/not-a-real-path-0" mountpoint="/tmp/not-a-real-path-1"/>

<volume> は、<fusemount><fuseumount> のコマンドをトリガーする以外は何も行いません。ログイン後、セッションキーリングに F2FS 復号キーがあることを確認できます。

$ keyctl show
Session Keyring
 910133222 --alswrv   1000   100  keyring: _ses
 301049775 --alswrv   1000 65534   \_ keyring: _uid.1000
 013481035 --alsw-v   1000   100   \_ logon: f2fs:2e64cf4a5bafcd7

ログインマネージャの設定

一般に、ログイン時に pam_mount が呼び出されるように、/etc/pam.d 内の設定ファイルを編集する必要があります。各ファイル内のエントリの正しい順序が重要です。/etc/pam.d/system-login を以下のように編集する必要があります。ディスプレイマネージャ を使用する場合は、そのファイルに system-login が含まれていることを確認してください。設定ファイルの例を次に示します。追加された行は太字で示されています。

セッション内の pam_mount の前の pam_succeed_if 行は、pam_mount をスキップします (success=n は、次の n 行) systemd-user サービスが PAM スタックを通じて実行されている場合 (つまり、/etc/pam.d/systemd-user) これにより、systemd --user インスタンスの起動時に、二重マウントの試行や削除された権限に関連するエラーが回避されます。[1] および [2] を参照してください。詳細については、[3] を参照してください。

/etc/pam.d/system-login
#%PAM-1.0

auth       required   pam_shells.so
auth       requisite  pam_nologin.so
auth       optional   pam_mount.so
auth       include    system-auth

account    required   pam_access.so
account    required   pam_nologin.so
account    include    system-auth

password   optional   pam_mount.so
password   include    system-auth

session    optional   pam_loginuid.so
session    optional   pam_keyinit.so       force revoke
session [success=1 default=ignore]  pam_succeed_if.so  service = systemd-user quiet
session    optional   pam_mount.so
session    include    system-auth
session    optional   pam_motd.so          motd=/etc/motd
session    optional   pam_mail.so          dir=/var/spool/mail standard quiet
-session   optional   pam_systemd.so
session    required   pam_env.so