「Pam mount」の版間の差分
細 (カテゴリ変更) |
(他言語へのリンクを追加) |
||
(同じ利用者による、間の4版が非表示) | |||
2行目: | 2行目: | ||
[[Category:認証]] |
[[Category:認証]] |
||
[[en:Pam mount]] |
[[en:Pam mount]] |
||
+ | [[ru:Pam mount]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|dm-crypt/ログイン時にマウント}} |
{{Related|dm-crypt/ログイン時にマウント}} |
||
8行目: | 9行目: | ||
[http://pam-mount.sourceforge.net/ pam_mount] を使うことで ([[dm-crypt|LUKS]] や [[eCryptfs]] などで) 暗号化したホームパーティションをログイン時に自動的にマウントすることができます。ログインマネージャを使ったりコンソールでログインしたときに /home をマウントします (マウントポイントは自由に指定できます)。ドライブを暗号化するパスフレーズは Linux ユーザーのパスフレーズと同一である必要があります。同一ならばログインに使うパスフレーズと別のパスフレーズを入力する必要がありません。 |
[http://pam-mount.sourceforge.net/ pam_mount] を使うことで ([[dm-crypt|LUKS]] や [[eCryptfs]] などで) 暗号化したホームパーティションをログイン時に自動的にマウントすることができます。ログインマネージャを使ったりコンソールでログインしたときに /home をマウントします (マウントポイントは自由に指定できます)。ドライブを暗号化するパスフレーズは Linux ユーザーのパスフレーズと同一である必要があります。同一ならばログインに使うパスフレーズと別のパスフレーズを入力する必要がありません。 |
||
− | {{ |
+ | {{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}} パッケージをインストールします。 |
|
− | #以下のように {{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" />''' |
||
+ | <!-- Generic encrypted partition example --> |
||
− | '''<mkmountpoint enable="1" remove="true" />''' |
||
+ | <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> |
||
}} |
}} |
||
+ | 注意事項 |
||
− | ==ログインマネージャの設定== |
||
+ | * ファイルの最後、最後の閉じタグ {{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}} を参照。 |
||
+ | === ローカル (ユーザーごと) 設定 === |
||
− | 通常、{{ic|/etc/pam.d}} の設定ファイルを編集してログイン時に pam_mount が実行されるようにする必要があります。それぞれのファイルのエントリの順番は重要です。以下に書かれているように {{ic|/etc/pam.d/system-auth}} を編集してください。ディスプレイマネージャを使用している場合 (例: Slim や GDM)、ディスプレイマネージャのファイルも編集してください。以下の設定例では、追加する行を太字で示しています。 |
||
+ | ''pam_mount'' は、ユーザーがログイン時にホーム ディレクトリ内のファイルに独自のマウントを定義できるようにすることもサポートしています。この変更による潜在的なセキュリティへの影響を考慮してください。これを有効にするには、次の行が {{ic|/etc/security/pam_mount.conf.xml}} に存在し、アクティブであることを確認します。 |
||
− | {{hc|/etc/pam.d/system-auth|2= |
||
− | #%PAM-1.0 |
||
+ | {{hc|/etc/security/pam_mount.conf.xml|2= |
||
− | auth required pam_env.so |
||
+ | <luserconf name=".pam_mount.conf.xml" /> |
||
− | auth required pam_unix.so try_first_pass nullok |
||
+ | }} |
||
− | '''auth optional pam_mount.so''' |
||
− | auth optional pam_permit.so |
||
+ | これにより、各ユーザーが {{ic|~/.pam_mount.conf.xml}} でマウントを設定できるようになります。ユーザーごとの設定ファイルは、{{ic|<volume>}} キーワードのみをサポートします。例: |
||
− | account required pam_unix.so |
||
− | account optional pam_permit.so |
||
− | account required pam_time.so |
||
− | + | {{hc|~/.pam_mount.conf.xml|2= |
|
+ | <?xml version="1.0" encoding="utf-8" ?> |
||
− | password required pam_unix.so try_first_pass nullok sha512 shadow |
||
+ | <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd"> |
||
− | password optional pam_permit.so |
||
− | + | <pam_mount> |
|
+ | <volume user="alex" fstype="tmpfs" path="tmpfs" mountpoint="~/test" options="nodev,nosuid" /> |
||
− | session required pam_limits.so |
||
+ | </pam_mount> |
||
− | session required pam_env.so |
||
− | session required pam_unix.so |
||
− | session optional pam_permit.so |
||
}} |
}} |
||
+ | また、選択できるマウント オプションと選択できないマウント オプションに関していくつかの制限があり、その一部は必須です ({{ic|nosuid}}、{{ic|nodev}}、{{ic|size}}、{{ ic|uid}}、これらは {{ic|/etc/security/pam_mount.conf.xml}}) を編集することで解除できます。バインドマウントはサポートされていないようです。所有権チェックはマウントポイントでも実行されます。 |
||
− | === SLiM === |
||
+ | === LUKS ボリューム === |
||
− | [[SLiM]] の場合: |
||
+ | [[LUKS]] 暗号化ボリュームは次のように簡単に構成できます。 |
||
− | {{hc|/etc/pam.d/slim| |
||
+ | |||
− | auth requisite pam_nologin.so |
||
+ | {{hc|/etc/security/pam_mount.conf.xml|2= |
||
− | auth required pam_env.so |
||
+ | <volume user="''username''" fstype="crypt" path="/dev/disk/by-partuuid/''partition_uuid''" mountpoint="~" options="crypto_name=''volume_name'',allow_discard,fstype=btrfs,compress=zstd" /> |
||
− | 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 |
||
}} |
}} |
||
+ | ボリュームはロックが解除され、''mount.crypt'' でマウントされます。オプションの詳細については、{{man|8|mount.crypt|マウント オプション}} を参照してください。 |
||
− | === GDM === |
||
+ | === Veracrypt ボリューム === |
||
− | [[GDM]] の場合: |
||
+ | pam_mount は Veracrypt ボリュームをネイティブにサポートしていませんが、[https://forum.ubuntuusers.de/post/8882122/ 回避策] があります。 |
||
− | {{Note|GDM バージョン 3.2 から設定ファイルは ({{ic|/etc/pam.d/gdm}} から) {{ic|/etc/pam.d/gdm-password}} に変更されています。}} |
||
− | {{hc|/etc/ |
+ | {{hc|/etc/security/pam_mount.conf.xml|2= |
+ | <volume user="''username''" fstype="crypt" path="/dev/disk/by-partuuid/''partition_uuid''" mountpoint="''vcrypt''"/> |
||
− | #%PAM-1.0 |
||
+ | <volume user="''username''" fstype="auto" path="/dev/mapper/''vcrypt''" mountpoint="/media/''mountpoint''"/> |
||
− | auth requisite pam_nologin.so |
||
− | auth required pam_env.so |
||
+ | <cryptmount>cryptsetup --veracrypt open --type tcrypt %(VOLUME) %(MNTPT)</cryptmount> |
||
− | auth requisite pam_unix.so nullok |
||
+ | <cryptumount>cryptsetup close %(MNTPT)</cryptumount> |
||
− | '''auth optional pam_mount.so''' |
||
+ | }} |
||
− | auth optional pam_gnome_keyring.so |
||
+ | |||
+ | 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 |
||
+ | }} |
||
+ | |||
+ | == ログインマネージャの設定 == |
||
+ | |||
+ | 一般に、ログイン時に ''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-login|2= |
||
+ | #%PAM-1.0 |
||
− | auth |
+ | auth required pam_shells.so |
− | auth |
+ | auth requisite pam_nologin.so |
+ | '''auth optional pam_mount.so''' |
||
+ | auth include system-auth |
||
− | account |
+ | account required pam_access.so |
+ | account required pam_nologin.so |
||
+ | account include system-auth |
||
− | password |
+ | '''password optional pam_mount.so''' |
− | + | password include system-auth |
|
− | session |
+ | 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_keyinit.so force revoke |
||
− | session |
+ | '''session optional pam_mount.so''' |
− | session |
+ | session include system-auth |
− | + | session optional pam_motd.so motd=/etc/motd |
|
− | session |
+ | 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:24時点における最新版
関連記事
pam_mount を使うことで (LUKS や eCryptfs などで) 暗号化したホームパーティションをログイン時に自動的にマウントすることができます。ログインマネージャを使ったりコンソールでログインしたときに /home をマウントします (マウントポイントは自由に指定できます)。ドライブを暗号化するパスフレーズは Linux ユーザーのパスフレーズと同一である必要があります。同一ならばログインに使うパスフレーズと別のパスフレーズを入力する必要がありません。
目次
設定
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.cifs
はsmb.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>
また、選択できるマウント オプションと選択できないマウント オプションに関していくつかの制限があり、その一部は必須です (nosuid
、nodev
、size
、uid
、これらは /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