別のアクティブセッションがある場合は、pam_mountがアンマウントされないようにしますか?

別のアクティブセッションがある場合は、pam_mountがアンマウントされないようにしますか?

私は私のホームディレクトリをpam_mount解読()してマウントするために使用しました。gocryptfs

# /etc/pam.d/system-login excerpt
# ...
session [success=2 default=ignore]  pam_exec.so  quiet /usr/bin/mountpoint -q "/home/$PAM_USER"
session [success=1 default=ignore]  pam_succeed_if.so  service = systemd-user quiet
session    optional   pam_mount.so
# ...
<!-- /etc/security/pam_mount.conf.xml excerpt -->
<!-- ...defaults... -->

<!-- Encrypted home -->
<volume user="%(USER)" fstype="fuse" options="nodev,nosuid,quiet,nonempty,allow_other"
    path="/usr/bin/gocryptfs#/home/%(USER).cipher" mountpoint="/home/%(USER)"
/>

</pam_mount>

これは単一のttyに対してうまく機能します。問題は、他のものを開いたときにpam_exec回線が詰まっているにもかかわらず、再インストールしようとしていることです。出口2番目のttyはまだアンマウントされています。 (さらに悪いことは、「転送エンドポイントが接続されていません」状態で正しく削除されず、手動で削除する必要があることです。設定に追加しようとしましたが、fusermount -uz "$HOME"変更はありません。)<fuseumount>fusermount -uz %(MNTPT)</fuseumount>

pam_mount最後のセッションが終了する前に削除を防ぐ方法は? (マウントを作成したtty1がtty2よりも先に終了した場合は、マウント自体をスキップしてもtty2のマウント状態をそのまま維持したいと思います。)


実際には次のように<debug enable="1" />記録されます。

May 03 15:19:39 hostname login[6607]: (pam_mount.c:441): pmvarrun says login count is 1
May 03 15:19:39 hostname login[6607]: (pam_mount.c:734): username seems to have other remaining open sessions
May 03 15:19:39 hostname login[6607]: (pam_mount.c:743): pam_mount execution complete

しかし、次のことは、「転送エンドポイントが接続されていません」について文句を言い、最初のttyにホームディレクトリがないことです。

私はまた私がfusermount -uz $HOME実際に終わることを知りました。インストール済みpam_mount、最初のログインセッション(エラーを修正するために手動で削除し、手動で再インストールする必要があると予想されます)が自動的に再インストールするのと同じですか?

ベストアンサー1

pam_mountこれには検出機能が組み込まれており、適切に処理しようとします。この問題は、「マウントされた」検出のバグのようです。つまり、FUSEファイルシステムまたはserver="..."


私は次のように取り組んでいます修理する:

diff --git a/src/mount.c b/src/mount.c
index 75c0a39..781ccd0 100644
--- a/src/mount.c
+++ b/src/mount.c
@@ -127,10 +127,19 @@ static bool pmt_utabent_matches(const struct vol *vpt, struct libmnt_fs *fs)
    bool result = false;
 
    xcmp = fstype2_icase(vpt->type) ? strcasecmp : strcmp;
-   if (source != NULL)
-       result = xcmp(vpt->combopath, source) == 0;
+   if (source != NULL) {
+       if (strcmp(vpt->fstype, "fuse") != 0)
+           result = xcmp(vpt->combopath, source) == 0;
+       else {
+           size_t len_combopath = strlen(vpt->combopath);
+           size_t len_source = strlen(source);
+           result = xcmp(vpt->combopath + len_combopath - len_source, source) == 0;
+       }
+   }
+
    if (target != NULL)
        result &= strcmp(vpt->mountpoint, target) == 0;
+
    return result;
 }
 

それから申請してください。

$ ./autogen.sh
$ ./configure
$ make
$ cp src/.libs/pam_mount.so /usr/lib/security/pam_mount_patched.so

pam_mount_patched.so次に、自分のPAM設定でその場所の代わりにその場所を一時的に使用します。pam_mount.so(単にテスト/復元の容易さと新しいバージョンが利用可能な場合は、アップストリームを確認するために元のバージョンを上書きしません。)

おすすめ記事