「Pam mount」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(リンクを修正)
(→‎セットアップ: 情報を更新)
10行目: 10行目:
 
{{Note|''pam_mount'' は、最後のセッションを閉じるときにパーティションをアンマウントすることもできますが、pam スタックで {{ic|pam_systemd.so}} が使用されているため、これはそのままでは機能しません。 [https://github.com/systemd/systemd/issues/8598 systemd issue 8598] および [https://wiki.archlinux.org/title/Talk:Pam_mount#automatic_unmounting_and_systemd Talk:Pam mount#automatic unmounting and systemd] を参照してください。}}
 
{{Note|''pam_mount'' は、最後のセッションを閉じるときにパーティションをアンマウントすることもできますが、pam スタックで {{ic|pam_systemd.so}} が使用されているため、これはそのままでは機能しません。 [https://github.com/systemd/systemd/issues/8598 systemd issue 8598] および [https://wiki.archlinux.org/title/Talk:Pam_mount#automatic_unmounting_and_systemd Talk:Pam mount#automatic unmounting and systemd] を参照してください。}}
   
  +
== 設定 ==
==セットアップ==
 
   
#[[公式リポジトリ]]から {{pkg|pam_mount}} をインストールしてください
+
{{pkg|pam_mount}} パッケージをインストールします
#以下のように {{ic|/etc/security/pam_mount.conf.xml}} を編集してください:
 
   
  +
=== グローバル(システム)設定 ===
ファイルの末尾、''</pam_mount>'' というタグの前に新しい行を3行追加します:
 
  +
*USERNAME はあなたの linux ユーザー名に置き換えて下さい。
 
  +
モジュールは {{ic|/etc/security/pam_mount.conf.xml}} で設定されます。詳細については、{{man|5|pam_mount.conf}} を参照してください。次のようにファイルを編集します。
*{{ic|/dev/sdaX}} は適当なファイルやコンテナファイルに置き換えて下さい。
 
*{{ic|1=fstype="auto"}} は {{ic|/usr/bin/mount.<type>}} の <type> に変えられます。大抵の場合は "auto" で問題ありません。{{ic|1=fstype="crypt"}} を使うとログアウト時にループデバイスが閉じられます。
 
*必要なら、マウントオプションを追加してください。
 
   
 
{{hc|/etc/security/pam_mount.conf.xml|2=
 
{{hc|/etc/security/pam_mount.conf.xml|2=
  +
'''<volume user="USERNAME" fstype="auto" path="/dev/sdaX" mountpoint="/home" options="fsck,noatime" />'''
 
  +
  &lt;!-- Generic encrypted partition example --&gt;
'''<mkmountpoint enable="1" remove="true" />'''
 
  +
<volume user="''USERNAME''" fstype="auto" path="/dev/''sdaX''" mountpoint="/home" options="fsck,noatime" />
  +
  +
&lt;!-- Example using CIFS --&gt;
  +
<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>
  +
}}
  +
  +
注意事項
  +
* ファイルの最後、最後の閉じタグ {{ic|</pam_mount>}} の ''前'' に2行挿入してください。
  +
* {{ic|''USERNAME''}} はあなたのユーザー名に置き換えてください。
  +
* {{ic|/dev/''sdaX''}} は、対応するデバイスまたはコンテナファイルに置き換えてください。
  +
* {{ic|1=fstype="auto"}} は {{ic|/usr/bin/mount.''type''}} にある任意の {{ic|''type''}} に変更できます。ほとんどの場合、{{ic|"auto"}} で問題ありません。{{ic|1=fstype="crypt"}} を使用すると、ログアウト時にループデバイスが必要なボリュームに対してクローズされます。
  +
* 必要であれば、マウントオプションを追加してください。{{ic|mount.cifs}} は {{ic|smb.conf}} を読み込まないので、すべてのオプションを指定する必要があることに注意してください。この例では、{{ic|uid}} はローカルの {{ic|smb.conf}} パラメータ idmap config ... : range = にマッチするので、Unix のみのユーザに対して ''pam_mount'' が呼び出されることはありません。Kerberos は krb5 で示され、SMB3.0 が指定されているのは、相手側がデフォルトの SMB1をサポートしていない可能性があるためです。署名は krb5i の末尾の i で有効になります。詳細は {{man|8|mount.cifs}} を参照。
  +
  +
=== ローカル (ユーザーごと) 設定 ===
  +
  +
''pam_mount'' は、ユーザーがログイン時にホーム ディレクトリ内のファイルに独自のマウントを定義できるようにすることもサポートしています。この変更による潜在的なセキュリティへの影響を考慮してください。これを有効にするには、次の行が {{ic|/etc/security/pam_mount.conf.xml}} に存在し、アクティブであることを確認します。
  +
  +
{{hc|/etc/security/pam_mount.conf.xml|2=
  +
<luserconf name=".pam_mount.conf.xml" />
  +
}}
  +
  +
これにより、各ユーザーが {{ic|~/.pam_mount.conf.xml}} でマウントを設定できるようになります。ユーザーごとの設定ファイルは、{{ic|<volume>}} キーワードのみをサポートします。例:
  +
  +
{{hc|~/.pam_mount.conf.xml|2=
  +
<?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>
  +
}}
  +
  +
また、選択できるマウント オプションと選択できないマウント オプションに関していくつかの制限があり、その一部は必須です ({{ic|nosuid}}、{{ic|nodev}}、{{ic|size}}、{{ ic|uid}}、これらは {{ic|/etc/security/pam_mount.conf.xml}}) を編集することで解除できます。バインドマウントはサポートされていないようです。所有権チェックはマウントポイントでも実行されます。
  +
  +
=== LUKS ボリューム ===
  +
  +
[[LUKS]] 暗号化ボリュームは次のように簡単に構成できます。
  +
  +
{{hc|/etc/security/pam_mount.conf.xml|2=
  +
<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'' でマウントされます。オプションの詳細については、{{man|8|mount.crypt|マウント オプション}} を参照してください。
  +
  +
=== Veracrypt ボリューム ===
  +
  +
pam_mount は Veracrypt ボリュームをネイティブにサポートしていませんが、[https://forum.ubuntuusers.de/post/8882122/ 回避策] があります。
  +
  +
{{hc|/etc/security/pam_mount.conf.xml|2=
  +
<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 ボリュームもある場合は、{{ic|cryptmount/cryptumount}} を使用する {{ic|crypt}} の代わりに、Veracrypt ボリュームに別の ''fstype'' を使用できます。たとえば、{{ic|ncpfs}} を使用します。 {{ic|ncpmount/ncpumount}} NCP ファイルシステムを使用しないように注意してください。
  +
  +
=== F2FS 暗号化 ===
  +
  +
pam_mount に F2FS 復号化キーをセッションキーリングに追加させるトリックがあります。f2fscrypt でディレクトリを暗号化するときに選択した salt は、{{ic|/etc/security/pam_mount.conf.xml}} の salt (以下の例では 0x1111) と一致する必要があり、パスフレーズはユーザーのログインパスワードと一致する必要があります。この例では、pam_mount を使用して FUSE ファイルシステムをマウントしていないことを前提としています。 その場合は、{{ic|<fusemount>}} と {{ic|<fuseumount>}} の代わりに、{{ic|<ncpmount>/ などの別の {{ic|<*mount>}} の代わりに {{ic|<fusemount>}} と {{ic|<fuseumount>}} タグペアを追加します。
  +
  +
{{hc|/etc/security/pam_mount.conf.xml|2=
  +
<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"/>
  +
}}
  +
  +
{{ic|<volume>}} は、{{ic|<fusemount>}} と {{ic|<fuseumount>}} のコマンドをトリガーする以外は何も行いません。ログイン後、セッションキーリングに F2FS 復号キーがあることを確認できます。
  +
  +
{{hc|$ keyctl show|2=
  +
Session Keyring
  +
910133222 --alswrv 1000 100 keyring: _ses
  +
301049775 --alswrv 1000 65534 \_ keyring: _uid.1000
  +
013481035 --alsw-v 1000 100 \_ logon: f2fs:2e64cf4a5bafcd7
 
}}
 
}}
   

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

関連記事

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

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

通常、/etc/pam.d の設定ファイルを編集してログイン時に pam_mount が実行されるようにする必要があります。それぞれのファイルのエントリの順番は重要です。以下に書かれているように /etc/pam.d/system-auth を編集してください。ディスプレイマネージャを使用している場合 (例: Slim や GDM)、ディスプレイマネージャのファイルも編集してください。以下の設定例では、追加する行を太字で示しています。

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

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 の場合:

/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 の場合:

ノート: GDM バージョン 3.2 から設定ファイルは (/etc/pam.d/gdm から) /etc/pam.d/gdm-password に変更されています。
/etc/pam.d/gdm-password
#%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_deny.so

account         required        pam_unix.so

password        required        pam_unix.so
password        optional        pam_mount.so

session         required        pam_loginuid.so
-session        optional        pam_systemd.so
session         optional        pam_keyinit.so force revoke
session         required        pam_limits.so
session         required        pam_unix.so
session         optional        pam_mount.so
session         optional        pam_gnome_keyring.so auto_start