使用 pam_mount 掛載 Windows 共用 (cifs) 時發生錯誤

使用 pam_mount 掛載 Windows 共用 (cifs) 時發生錯誤

我有一台 Ubuntu 21.10 電腦,已連接到 Samba AD 網域控制器。一切都運作良好 - Kerberos 正在工作(可以使用 kinit 獲取票證),winbind 正在工作(可以獲得有關使用者和群組的資訊),我可以使用網域憑證登入系統。

手動安裝共用也可以使用 Kerberos 和 ntlmssp 授權:

sudo mount -t cifs //server/path /mount/point -o username=USER,domain=DOMAIN,sec=ntlmssp
sudo mount -t cifs //server/path /mount/point -o username=USER,domain=DOMAIN,sec=krb5

設定像 username=USER@DOMAIN 這樣的使用者名稱也有效。

問題是當使用者透過 gnome 登入時我無法讓 pam_mount 工作!

像這樣在 pam_mount.conf.xml 中使用 krb5

<volume
      fstype="cifs"
      server="server"
      path="path"
      mountpoint="mount/point"
      options="sec=krb5"
  />

在 auth.conf 中給出錯誤

(mount.c:72): mount error(126): Required key not available

像這樣在 pam_mount.conf.xml 中使用 ntlmssp

<volume
      fstype="cifs"
      server="server"
      path="path"
      mountpoint="mount/point"
      options="sec=ntlmssp"
  />

在 auth.conf 中給出不同的錯誤

(pam_mount.c:173): conv->conv(...): Conversation error 

在 pam_mount 中啟用調試後,我還可以在 auth.log 中看到它正在執行的確切安裝命令,並且當我手動運行它們時,它與上面的命令相同。

我嘗試過以下方法:

  • 使用不同組合的掛載選項:vers=3.0、_netdev、user、sec
  • 使用 pam_winbind 設定強制 Kerberos 將票證儲存在 /tmp/krb5cc_%u 中的檔案中
  • 閱讀大量論壇

有任何想法嗎?

答案1

我終於弄明白了。這是一個有效的 pam_mount 磁碟區配置:

<volume sgrp="DOMAIN\domain users" fstype="cifs" server="my.server.com" path="path/to/share" mountpoint="/mount/point" options="sec=krb5,cruid=%(USERUID),noexec,rw,nofail" />

關鍵的要求似乎是:

  • 伺服器網域名稱。 Kerberos 無法為 ip 頒發票證,因此您必須指定網域名稱。
  • cruid=%(用戶UID)選項。 Mount 以 root 身分執行,預設情況下它會尋找屬於 root 的票證文件,因此我們必須設定實際票證擁有者的使用者 ID。
  • sgrp="網域\網域使用者"屬性。 pam_mount 在每個新的身份驗證會話上運行,包括 gdm 等系統使用者。一旦登入嘗試安裝共享失敗,它似乎會對其進行緩存,甚至對於授權用戶來說也會失敗。因此,我們需要明確定義要為其安裝共享的使用者。這可以透過 pam_mount 中提供的許多使用者控制屬性來完成。

相關內容