目前,我们的 Ubuntu 客户端在系统启动时通过 /etc/fstab 连接到 cifs 共享。这有以下缺点:
- 密码以纯文本形式写入挂载选项
- 密码应该会过期,但如果过期,则必须在每个客户端上更改 /etc/fstab。因此,目前用于挂载的大多数密码都不会过期
- CIFS 共享安装在连接用户及其权限下,因此不会显示实际在 Ubuntu 上使用共享的用户。副作用是权限模糊,因为 Ubuntu 用户未在 Windows 文件系统权限中列出。
我已经在我们的 Ubuntu 客户端上成功测试了:在用户登录时使用 kerberos 身份验证 - 因此用户可以获得 kerberos 票证。
使用该 Kerberos 票证 (sudo) 在 systemd 用户服务中挂载 cifs 共享
- 优点:适用于图形登录以及 ssh
- 优点:共享可以像本地文件系统一样访问
- 缺点:如果我在全局挂载点(如 /servers/mymount)上挂载,我必须小心,不要让多个用户重叠挂载。然后,连接用户将成为任何后续用户使用其权限的用户。
使用该 Kerberos 票证从文件浏览器 nautilus 和 thunar 动态挂载共享
- 优点:如果通过文件浏览器建立与共享的连接,则不需要额外的脚本或服务
- 优点:共享安装在用户上下文中,因此肯定需要用户许可。如果用户没有权限,仍有可能将共享连接到其他用户。
- 优点:可以使用 gvfs-mount 通过 /etc/profile 自动执行挂载
- 优点:不需要 sudo 权限,用户可以根据需要使用 gvfs-mount 和 -unmount,通过文件浏览器非常直观
- 缺点:没有实际的挂载点,标准 unix 命令(如 ls、cp 等)不起作用。我不得不使用 gvfs-* 替代方案。目前,上述使用 mount.cifs 的解决方案似乎更好。
因此,我希望像访问 nfs 共享一样访问 cifs 共享。
- 挂载期间未使用密码
- 应使用访问用户的权限
- 文件系统应该像本地文件系统一样运行(标准 unix 命令应该可以工作)
我可以多次挂载 CIFS 共享,分别供每个用户挂载到他们的主目录中,但是
有没有办法在启动过程中由 root 用户挂载 CIFS 共享,而不指定连接用户,然后使用来自访问用户(例如通过 kerberos 票证)?
提前谢谢你,巴斯蒂安
答案1
使用 mount.cifs 的自动挂载 + 多用户选项
您可以使用 automount 和 mount.cifs 的多用户选项来实现这一点。安装所需的软件包:
sudo apt install autofs keyutils cifs-utils
以下示例假设 cifs 服务器导出以访问它的用户命名的共享。通常这适用于主目录。
将其添加到您的/etc/auto.master
:
/cifs /etc/auto.cifs
输入/etc/auto.cifs
这个:
* -fstype=cifs,multiuser,cruid=${UID},sec=krb5 ://server.domain/&
确保更换服务器.域名由您的文件服务器提供。您也可以通过这种方式使用固定共享。只需*
用固定名称替换 ,并将 替换为&
。
上述配置中的一个重要细节是cruid=${UID}
。它将使内核在访问共享的用户上下文中查找 Kerberos 票证。否则它将尝试 root 票证缓存。
最后重新加载自动挂载:
sudo service autofs reload
如果您有 Kerberos 票证,它将/cifs/$USER
在第一次访问时挂载文件系统。这意味着您需要cd /cifs/myuser
在 GUI 文件浏览器中明确输入 eg 或类似操作。为了避免这种情况,您可以从其他地方放置指向此的符号链接并告诉用户访问这些链接。
如果您使用固定共享(不使用*
和&
),当然您必须输入cd /cifs/sharename
。
其他用户对同一共享的后续访问将使用他们的权限,通过该选项实现multiuser
。不会进行其他挂载,但会重新使用现有的挂载。
multiuser Map user accesses to individual credentials when accessing the server. By default, CIFS mounts only use a single set of user credentials (the mount credentials) when accessing a share. With this option, the client instead creates a new session with the server using the user's credentials whenever a new user accesses the mount. Further accesses by that user will also use those credentials. Because the kernel cannot prompt for passwords, multiuser mounts are limited to mounts using sec= options that don't require passwords.
还可以将所需的自动挂载映射添加到 LDAP 服务器以进行集中管理,但这可能超出了本答案的范围。
在您的问题中,您要求在启动时以 root 身份挂载。从技术上讲,这是以 autofs 的占位符挂载形式完成的。实际上,真正的挂载仅在用户首次访问时完成。
我们在我的工作场所为大约 100 个客户端使用此设置来访问相当大的光泽文件系统,并且它运行可靠。