나는 내 홈 디렉터리를 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
회선이 막혔음에도 불구하고 다시 설치하려고 한다는 것입니다.출구두 번째 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="..."
.
- 업스트림 버그 보고서:https://sourceforge.net/p/pam-mount/bugs/117/
- 데비안 버그 보고서:https://bugs.launchpad.net/debian/+source/libpam-mount/+bug/1908638
- 아치 버그 보고서:https://bugs.archlinux.org/task/70693
server
케이스 패치오직:https://sourceforge.net/p/pam-mount/pam-mount/merge-requests/3/
나는 다음과 같이 작업하고 있습니다수리하다:
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
(단지 테스트/복원의 용이성과 새 버전이 사용 가능할 때 업스트림 확인을 위해 원본 버전을 덮어쓰지 않습니다.)