當 Samba 通過 PAM 為我的(互動式)使用者關閉會話時,ecryptfs 掛載的主文件夾“消失”
在 Ubuntu 20.04 上——我以前用(香草)GNOME 遇到過這種情況——用 KDE Plasma(不,不是 Kubuntu!),我面臨著每隔幾個小時左右就會發生一次的奇怪事情,對此我沒有任何解釋或補救措施到目前為止。
不知何故,當我登錄時安裝的 ecryptfs 加密的主文件夾突然“消失”了。我主要注意到它是因為開始出現奇怪的症狀,例如各種程序報告
$HOME
他們找不到的文件,他們認為這些文件已損壞,或者他們只是報告他們無法打開它們。第一次發生這種情況時,我通常可以執行
/usr/bin/ecryptfs-mount-private
,輸入我的密碼並完成它。唉,這仍然不能恢復某些 KDE 桌面元素的功能。例如,從那時起,我無法搜尋已安裝的程序,因此在我註銷並重新登錄之前,所有尚未執行的程序都變得不可用。隨後發生這種情況,我嘗試使用
/usr/bin/ecryptfs-mount-private
我通常會看到:$ /usr/bin/ecryptfs-mount-private Enter your login passphrase: Inserted auth tok with sig [2123456789012312] into the user session keyring mount: No such file or directory
從以下螢幕截圖中可以看出,即使在這種情況下註銷也會成為一場小噩夢。彈出對話框僅基於我選擇註銷的事實!
所以我的問題(是的,複數……因為我目前不知道如何開始診斷這個):
- 哪個實體可能導致我的自動刪除
$HOME
?…我想起了奇怪的行為,比如當你註銷時會話被清除,所以突然你的 Screen 或 Tmux 會話也被殺死(除非你使用loginctl
withenable-linger
)- 解決此類問題的步驟是什麼?(請記住,發生這種情況時桌面的行為很奇怪!)。我嘗試
journalctl
使用 ripgrep 查看輸出和日誌,但我真的不知道要查找哪些術語…- 假設這是一個已知的錯誤,如果有解決方法是什麼?
它讓我想起了一些 Tmux/Screen 在註銷時被殺死的情況,這是我通常不會想到的,只有在登錄 SSH(即單獨的登錄會話)或啟用會話延遲後啟動 Tmux/Screen 才能防止這種情況。
我發現的一件
journalctl
看起來很奇怪並且與“失去”的主目錄相關的東西如下:Sep 01 23:39:11 machine smbd[220424]: pam_unix(samba:session): session closed for user johndoe Sep 01 23:39:11 machine systemd[1]: home-johndoe.mount: Succeeded. -- Subject: Unit succeeded -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- The unit home-johndoe.mount has successfully entered the 'dead' state. Sep 01 23:39:11 machine systemd[1977]: home-johndoe.mount: Succeeded. -- Subject: Unit succeeded -- Defined-By: systemd -- Support: http://www.ubuntu.com/support --
…但這表明由 Samba 守護程序代表我的互動式使用者帳戶引起的某些事情會導致系統的另一部分假設我註銷並解除安裝我的
$HOME
… 這聽起來極不可能,不是嗎?上述模式
pam_unix(samba:session)
為我的使用者名關閉會話,然後$HOME
文件夾變得無法訪問是確鑿的證據,但也是迄今為止唯一的一個。目前正在閱讀整個會話業務應該如何工作以及為什麼該掛載單元“認為”它可以在我仍然以互動方式登錄時“獲取”我掛載的主文件夾。**編輯#1:**因為註釋表明 Samba 的配置可能是相關的,所以我在這裡添加它。
johndoe
我在轉儲中替換了我的實際使用者名testparm
:# Global parameters [global] debug uid = Yes dns proxy = No guest account = johndoe log file = /var/log/samba/log.%m map to guest = Bad Password max log size = 1000 obey pam restrictions = Yes panic action = /usr/share/samba/panic-action %d passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . passwd program = /usr/bin/passwd %u security = USER server role = standalone server server string = %h server (Samba, Ubuntu) syslog = 7 syslog only = Yes workgroup = NULL idmap config * : backend = tdb [sharename] force create mode = 0660 force directory mode = 0770 guest ok = Yes guest only = Yes path = /data/sharedir read only = No
正如您所說的那樣,沒有什麼特別的,但我的猜測是,我通過全域設置將自己的使用者“預設”為來賓使用者這一事實不知何故導致登錄會話出現在我的使用者面前。
samba:session
除了像上面複製的日誌行這樣的少數條目之外,沒有帶有標記的條目。**編輯#2:**我的
/etc/pam.d/samba
樣子是這樣的:@include common-auth @include common-account @include common-session-noninteractive
…因此我嘗試編輯那些引用的文件並在引用或
debug
的每一行上添加(用空格分隔)。結果 - 重新啟動後 - 我根本無法再登錄 KDE。它只是停滯不前。所以我使用其他終端之一登錄並恢復我的更改(多虧了這很簡單)。pam_unix``pam_ecryptfs``root``etckeeper
編輯#3:…編輯4:解決方法結果無效。KillExcludeUsers=root johndoe
臨時解決方法是通過設置/etc/systemd/logind.conf
或“本地”通過loginctl
. 這使得這看起來越來越像一個缺陷。
好吧,這當然很愚蠢,因為我在幾個小時前“浪費”了 200 名聲望,但我似乎已經解決了這個難題。任何提供比我更直接的提示和嘗試的人都將獲得賞金。
好吧,事實證明,
pam_unix
從日誌中是一個重要的線索。我最終能夠引發這種情況,從而可靠地再現解除安裝。我所做的也在launchpad.net 上的相應票證中進行了描述,但我將在此處複製上述問題中沒有的相關部分。
根據輸出,我在研究這個問題
smb.conf
之前看起來像這樣testparm
:# Global parameters [global] debug uid = Yes dns proxy = No guest account = johndoe log file = /var/log/samba/log.%m map to guest = Bad Password max log size = 1000 obey pam restrictions = Yes panic action = /usr/share/samba/panic-action %d passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . passwd program = /usr/bin/passwd %u security = USER server role = standalone server server string = %h server (Samba, Ubuntu) syslog = 7 syslog only = Yes workgroup = NULL idmap config * : backend = tdb [sharename] force create mode = 0660 force directory mode = 0770 guest ok = Yes guest only = Yes path = /data/sharedir read only = No
我選擇了一種蠻力試錯法。在 Tmux 中,我打開了幾個窗格,同時嘗試為缺陷報告生成 MWE。這實際上是我正在執行的:
while mountpoint /home/johndoe; do sudo service smbd restart; date; sleep 2s ; done
watch 'mount|grep ecryptfs'
sudo tail -F /var/log/auth.log|grep samba:session
…在另一個 Tmux 視窗中,我隨後編輯/保存了
/etc/samba/smb.conf
.砰!
顯示
auth.log
日誌條目 (smbd[144802]: pam_unix(samba:session): session closed for user johndoe
) 並且掛載點消失了。我終於找到瞭如何重現令人討厭的情況。
鑑於它的名字,我的第一個選擇確實是
obey pam restrictions
設置。所以我將它設置為no
(但我可以簡單地將其註釋掉,因為它預設為no
)。重新啟動
smbd
服務,註銷並重新登錄並嘗試再次重現錯誤情況。這一次無法複製。很明顯,
obey pam restrictions
環境影響了這一切pam_unix
和samba:session
業務。**編輯#1:**在提到的票證中要求提供更多資訊。特別是在
pam-auth-update
我被要求停用除Unix 身份驗證設置之外的所有設置。像這樣:[*] Unix authentication [ ] Register user sessions in the systemd control group hierarchy [ ] Create home directory on login [ ] eCryptfs Key/Mount Management [ ] Inheritable Capabilities Management
事實證明,問題不是第二個與 systemd 相關的設置,而是第四個:eCryptfs Key/Mount Management。
得到教訓
- 如果您要自己調查,請不要懸賞😉
- 貨物邪教垃圾真的會傷害你正在做的事情……這個特殊的設置是我在我的配置管理中隨身攜帶的一個,
smb.conf
雖然很明顯它現在可能已經被扔掉了……哦,好吧- 如果一切都失敗了,蠻力和反複試驗似乎是尋找根本原因的可行方法