如何在 samba 访问上挂载 eCryptfs 目录?

如何在 samba 访问上挂载 eCryptfs 目录?

环境

我正在运行带有 eCryptfs 和 samba 的 Ubuntu 16.04 服务器。

用户 bob 通过 创建了一个加密的私人文件夹ecryptfs-setup-private。包装密码与 Linux 登录密码相匹配。当 bob 通过 SSH 连接时,他的私人文件夹会自动解密。用户 bob 可以通过 Samba 访问他的主目录。Samba 凭据与 Linux 登录凭据相匹配。

PAM 配置包含默认条目(由 Ubuntu 和 eCryptfs 创建)。/etc/fstab不包含特定于 eCryptfs 的条目。

问题

当 bob 从 Windows 客户端通过 samba 访问其私人文件夹时,其私人文件夹不会被解密。samba 服务器日志 ( /var/log/samba/some-client.log) 包含

Signature not found in user keyring
Perhaps try the interactive 'ecryptfs-mount-private'

进一步的调查

当 bob 通过 打开 shell 时会出现相同的消息sudo;而当 bob 通过 打开 shell 时不会出现相同的消息su。显然,用户会话密钥环根据登录方法具有不同的内容:

$ su -c 'keyctl show @s' bob
Keyring
 887339582 --alswrv   1000 65534  keyring: _uid_ses.1000
 797923857 --alswrv   1000 65534   \_ keyring: _uid.1000
 523913245 --alswrv   1000  1000       \_ user: 363f394f32249cc4
 840141489 --alswrv   1000  1000       \_ user: 905f555cf7fd10e0

$ sudo -i -H -u bob -- keyctl show @s
Signature not found in user keyring
Perhaps try the interactive 'ecryptfs-mount-private'
Keyring
 887339582 --alswrv   1000 65534  keyring: _uid_ses.1000
 797923857 --alswrv   1000 65534   \_ keyring: _uid.1000

使用时,密钥环中似乎缺少登录凭据sudo

我想当我找到该sudo案例的解决方案时,它可以应用于桑巴问题。

我尝试将/etc/pam.d/sudo的内容更改为/etc/pam.d/su,但没有效果。我读过ecryptfs-add-passphrasepam_cifscreds,但不知道其中是否有用以及如何在这里有用。我浏览了 ubuntuusers.de 和 Arch Linux 的 wiki,在 StackOverflow 和 unix.stackexchange.com 上找到了几个问题(由于声誉低下,省略了参考资料),但尚未找到解决方案。

  1. 在这种情况下,eCryptfs 使用登录凭据需要什么sudo
  2. 在 samba 情况下,eCryptfs 使用登录凭证需要什么?

答案1

这是一个长期存在的错误

https://bugs.launchpad.net/ecryptfs/+bug/277578

ecryptfs 无法通过 nfs、cifs、samba、WebDAV 或 aufs 正常工作

解决方法-使用 sshfs:https://bugs.launchpad.net/ecryptfs/+bug/277578/comments/8

其他选项:如果愿意,请提交有关 sudo / su 的错误报告。

答案2

经过进一步调查,我可以自己回答这个问题:不可能使用sudo或 samba 凭据在登录时自动解密 eCryptfs 私人文件夹,因为在任何一种情况下密码都是未知的。

1.)sudo

假设用户 alice 调用sudo -u bob。Alice 不需要 Bob 的密码;她使用自己的密码。因此,Bob 的密码未知并且不能添加到用户密钥环或由 eCryptfs 使用。这与su需要 bob 的密码不同。因此,可以使用 自动挂载 eCryptfs 文件夹,su但不能使用sudo

2.桑巴

我的观察是,用户会话密钥环中缺少登录凭据。我认为 Samba 可能默认不添加它们,所以我搜索了手动添加的方法。

经过一番研究,我发现了pam_cifscreds可用于向内核提供用户凭据的 PAM 模块 - 听起来不错。我添加了pam_cifscreds.soPAM 工具auth(用于将密码存储在密钥环中)和session,但没有成功。debug设置参数后,session调用将消息写入no stored password found日志;auth调用不可见。

进一步的研究让我找到了另一个 PAM 模块pam_script及其示例文件logscript,它们可用于跟踪 PAM 调用。它表明该session工具在每个 samba 客户端连接时都会被调用,但该auth工具并没有被调用。然后我在smb.confPAM 配置

当加密密码 = yes 时,Samba 始终忽略 PAM 进行身份验证。原因是 PAM 模块无法支持 SMB 密码加密所需的质询/响应身份验证机制。

如今,Samba 客户端不再向服务器发送明文密码,而是发送哈希值。因此,服务器无权访问密码并且无法将其添加到密钥环中。

也许可以更改 samba 配置以允许明文密码,但我不想这样做,因此没有尝试。

结论

我认为基于 samba 登录凭据的透明服务器端解密是不可能的,因为服务器上缺少密码。

可能还有另一种解决方法:如果 eCryptfs 不使用单个wrapped-passphrase文件,而是每个登录类型使用一个文件(例如 UNIX 密码、Samba、SSH 证书等),则可以根据登录来解开挂载密码。但由于实施这个想法对我来说似乎相当复杂且耗时,因此我不会进一步跟踪它。

相关内容