CIFS 挂载和 Kerberos - 访问权限或最佳实践

use*_*308 10 permissions mount cifs kerberos

目前,我们的 Ubuntu 客户端在系统启动期间通过 /etc/fstab 连接到 cifs 共享。这有以下缺点:

  • 密码以纯文本形式作为挂载选项写入
  • 密码应该会过期,但如果过期,则必须在每个客户端上更改 /etc/fstab。所以大多数用于挂载的密码目前都不会过期
  • CIFS 共享挂载在连接用户及其权限下,因此不会显示在 Ubuntu 上实际使用共享的用户。副作用是权限模糊,因为 Ubuntu 用户未列在 Windows 文件系统权限中。

我已经在我们的 Ubuntu 客户端上成功测试的内容:在用户登录时使用 kerberos 身份验证 - 因此用户可以使用 kerberos 票证。

使用该 kerberos 票证 (sudo) 在 systemd 用户服务中安装 cifs 共享

  • PRO:适用于图形登录和 ssh
  • PRO:可以像本地文件系统一样访问共享
  • 缺点:如果我挂载在像 /servers/mymount 这样的全局挂载点上,我必须小心,我不会覆盖多个用户的挂载。然后,连接用户将是任何后续用户都可以使用其权限的用户。

使用该 kerberos 票证从文件浏览器 nautilus 和 thunar 动态挂载共享

  • PRO:如果通过文件浏览器建立与共享的连接,则不需要额外的脚本或服务
  • PRO:共享安装到用户上下文中,因此绝对需要用户许可。如果用户没有权限,仍然有可能将共享连接到另一个用户。
  • PRO:安装可以通过 /etc/profile 使用 gvfs-mount 自动化
  • PRO:不需要 sudo 权限,用户可以根据需要 gvfs-mount 和 -unmount,通过文件浏览器非常直观
  • 缺点:没有实际的挂载点,ls、cp 等标准 unix 命令不起作用。我将不得不使用 gvfs-* 替代品。在这一点上,带有 mount.cifs 的上述解决方案似乎更好。

所以我想要的是访问 cifs 共享,就像访问 nfs 共享一样。

  • 挂载期间未使用密码
  • 应该使用访问用户的权限
  • 文件系统应该像本地文件系统一样(标准的 unix 命令应该可以工作)

我可以多次挂载 CIFS 共享,将每个用户分别挂载到他的主目录中,但是

有没有办法在引导期间由用户 root 挂载 CIFS 共享,而不指定连接用户,然后使用访问用户的权限(例如通过 kerberos 票证)?

提前谢谢你,巴斯蒂安

Seb*_*ark 8

使用 mount.cifs 的自动挂载 + 多用户选项

您可以使用 automount 和 mount.cifs 的多用户选项来实现这一点。安装所需的软件包:

sudo apt install autofs keyutils cifs-utils
Run Code Online (Sandbox Code Playgroud)

以下示例假定 cifs 服务器导出以访问它的用户命名的共享。通常这适用于主目录。

将此添加到您的/etc/auto.master

/cifs /etc/auto.cifs
Run Code Online (Sandbox Code Playgroud)

/etc/auto.cifs把这个:

*   -fstype=cifs,multiuser,cruid=${UID},sec=krb5    ://server.domain/&
Run Code Online (Sandbox Code Playgroud)

确保用您的文件服务器替换server.domain。您也可以通过这种方式使用固定共享。只需用*固定名称替换&.

上述配置中的一个重要细节是cruid=${UID}. 它将使内核在用户访问共享的上下文中查找 kerberos 票证。否则它会尝试根票证缓存。

最后重新加载自动挂载:

sudo service autofs reload
Run Code Online (Sandbox Code Playgroud)

如果您有 kerberos 票证,它将/cifs/$USER在第一次访问时挂载文件系统。这意味着您需要cd /cifs/myuser在 GUI 文件浏览器中明确键入 eg或类似的操作。为了避免这种情况,您可以从其他地方放置指向 this 的符号链接,并告诉用户访问这些链接。

如果您使用固定共享(不使用*&),当然您必须输入cd /cifs/sharename.

其他用户对同一共享的后续访问将使用他们的权限,通过该multiuser选项成为可能。不会制作额外的安装,但会重复使用现有的安装。

mount.cifs(8)

   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.
Run Code Online (Sandbox Code Playgroud)

也可以将所需的自动挂载映射添加到 LDAP 服务器以进行集中管理,但这可能超出了本答案的范围。

在您的问题中,您要求在启动时以 root 身份挂载该挂载。从技术上讲,这是在这里以 autofs 的占位符安装的形式完成的。实际上,真正的挂载仅在用户第一次访问时完成。

我们在我的工作场所为大约 100 个客户端使用此设置来访问相当大的 luster 文件系统,并且它运行可靠。