Ubuntu 客户端上的 AD 用户如何无缝访问 Synology DC 上的文件和文件夹?

Ubuntu 客户端上的 AD 用户如何无缝访问 Synology DC 上的文件和文件夹?

我已将运行 Ubuntu Studio 18.04 的 PC 加入了由 Synology Directory Server 管理的 AD 域。我现在可以使用域用户的凭据登录 Ubuntu PC,但仍有两件事无法按我希望的方式工作:

  1. 尽管我在 Synology Directory Server 中的 NAS 上配置了主目录和用户配置文件目录,但使用域用户凭据登录会在 Ubuntu PC 上创建主目录。我希望域用户的主目录位于 NAS 上,而不是客户端 PC 上。
  2. NAS 上有一个共享(但不是公共)目录(名为“private”),域用户应该有权访问该目录。NAS 上配置了所需的权限。它已挂载,但尝试从域帐户访问它会导致权限被拒绝。类似地挂载的公共文件夹(名为“public”)可以访问:
    [email protected]@nas:/mnt$ ls -l
    total 84
    drwxrwxrwx 1 root users 77824 Mai 19 15:39 data
    d--------- 1 root users    46 Apr 20 19:52 private
    drwxrwxrwx 1 root root    114 Mär 13 11:55 public
    drwxr-xr-x 2 root root   4096 Aug 19  2018 sde1
    drwxr-xr-x 2 root root   4096 Aug 19  2018 sde5
    [email protected]@nas:/mnt$ ls private
    ls: cannot open directory 'private': Permission denied
    

以下是相应的挂载输出:

192.168.0.5:/volume1/private on /mnt/private type nfs (rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.5,mountvers=3,mountport=892,mountproto=udp,local_lock=none,addr=192.168.0.5)
192.168.0.5:/volume1/public on /mnt/public type nfs (rw,relatime,vers=3,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.5,mountvers=3,mountport=892,mountproto=udp,local_lock=none,addr=192.168.0.5)

我怀疑有些东西我没有正确设置,无法正确使用 kerberos 身份验证。我的 krb5.conf 中唯一不是标准 OOTB 的东西是:

[libdefaults]
    default_realm = NAS.RSBRUX.CH

此主题建议导出密钥表,但我太无知了,不知道这是什么意思。此外,由于我并不真正了解自己在做什么,因此加入域时我完全有可能配置错误。任何有关如何继续的提示都非常感谢!

第 2 点的答案已发布在下面,但第 1 点仍未解决。

我的配置与sssd 服务文档. 按照文档中的预测,为每个域用户创建 /home/%u@%d 形式的本地主目录。但是,sssd.conf 的手册页状态:

fallback_homedir (string)
           Set a default template for a user's home directory if one is not specified explicitly
           by the domain's data provider.

虽然我已经在 Synology Active Directory 中为每个域用户配置了一个基于服务器的主目录,但域用户只能在 /etc/sssd/sssd.conf 中获得本地指定的主目录。使用:

override_homedir = %o

域用户获得 $HOME = '',因此无法从 GUI 登录。通过 su 登录可获得:

Creating directory ''.
Unable to create and initialize directory ''.

这让我得出结论,sssd 没有从 DC 获取主目录。我尝试使用 ldapsearch 请求域用户的完整记录来仔细检查这一点,但没有成功。例如:

$ ldapsearch -b "dc=nas,dc=rsbrux,dc=ch" -h diskstation.nas.rsbrux.ch
SASL/GSS-SPNEGO authentication started
ldap_sasl_interactive_bind_s: Local error (-2)
    additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (Server not found in Kerberos database)

我认为我可以通过使用 auto.nas 中的以下映射自动挂载用户的基于服务器的主目录来解决这个问题:

/nas/home   -fstype=cifs,multiuser,cruid=$USER,sec=krb5    ://diskstation.nas.rsbrux.ch/home

然后在 sssd.conf 中指定它:

override_homedir = /nas/home

但是,这不起作用,因为自动挂载无法及时挂载主目录以完成登录。也许我可以通过以下方法解决这个问题:适用于 AutofsLDAP,但我(目前)还没有那么强的能力。
此外,自动挂载对 Synology 的主服务呈现用户主目录的方式存在问题。域用户的主目录位于服务器上的 /homes 下,但根据用户的身份验证,相应的目录仅显示为 /home。父目录 /homes 对自动挂载不可见。使用地图:

/nas/home   -fstype=cifs,multiuser,cruid=$USER,sec=krb5    ://diskstation.nas.rsbrux.ch/home

automount 并未像我预期的那样处理文件句柄。如果我通过“su”以域用户身份登录,然后注销,再以其他域用户身份登录,则任何访问 /nas/home 的尝试都会产生以下结果:

cannot open directory: Stale file handle

事实上,即使是 GUI 会话登录也会遇到同样的问题。如果第二个域用户登录第一个已经注销,如果不重新启动 Ubuntu,则 /nas/home 下映射的目录将无法访问。
根据autofs 的 Linux 手册页

特殊变量将被替换在密钥和位置字段中 自动挂载程序映射...

然而,Ubuntu 手册页说:

特殊变量将被替换 地点 自动安装程序映射条目的字段...

(重点是我)而且,确实如此:

/nas/home/$USER   -fstype=cifs,multiuser,cruid=$USER,sec=krb5    ://diskstation.nas.rsbrux.ch/home

不起作用(带或不带花括号)。
我还尝试从自动挂载映射中删除用户的主目录并添加一个 fstab 条目,以便我可以尝试以不同的用户身份挂载和卸载它。这是 fstab 条目:

//diskstation.nas.rsbrux.ch/home    /nas/home   cifs    noauto,users,_netdev,sec=krb5   

如果我在登录后为特定用户安装它:

mount -v /nas/home 

第一个用户在系统启动后登录时可以正常工作,但第二个用户会收到“权限被拒绝”的提示,即使第一个用户在第二个用户登录前卸载了它。这似乎是由于上面报告的“过时的文件句柄”问题造成的。有几位消息人士建议,可以通过强制使用 SMB 1.0 来避免过时的文件句柄:

//diskstation.nas.rsbrux.ch/home    /nas/home   cifs    vers=1.0,noauto,users,_netdev,sec=krb5  

但这并没有任何改善。

IAC,我想避免使用变通方法。
我如何才能找出为什么我无法从我的 DC 获取基于服务器的主目录?
特别是,我如何区分以下可能性?

  1. DC 根本没有发送主目录。
  2. DC 发送的内容不是客户端可以使用的格式。
  3. 由于客户端系统中缺少某些链接(例如缺少 SW 组件或配置不正确),客户端无法使用发送的内容。

答案1

解决上述第 2 点。
对于第 2 点,我发现最优雅的解决方案是使用带有多用户选项的 autofs,如接受的答案中所述这个帖子。具体来说,我安装了所需的软件:

sudo apt install autofs keyutils cifs-utils

然后配置 /etc/auto.master 如下:

/-  /etc/auto.nas

我使用了直接映射(参见社区维基)以避免任何可能出现的间接映射问题,如其中一条评论中所述上述帖子。/etc/auto.nas 的内容如下:

/nas/private   -fstype=cifs,multiuser,cruid=$USER,sec=krb5   ://diskstation.nas.rsbrux.ch/private
/nas/public   -fstype=cifs,multiuser,cruid=$USER,sec=krb5    ://diskstation.nas.rsbrux.ch/public

需要第三行来自动挂载域文件服务器上的用户主目录,但我在这里省略了它,因为内容将取决于如何映射用户的主目录(请参阅下面的注释)。起初共享无法挂载,并显示错误消息“所需密钥不可用”,因此我将以下行添加到 /etc/sssd/sssd.conf:

krb5_ccname_template=FILE:%d/krb5cc_%U

按照答案中的建议这个帖子。回想起来,这可能没有必要;问题可能是由于我使用了 IP 地址而不是服务器的完全限定域名 (FQDN)。Synology 建议使用 IP 地址,但 mount 需要 FQDN 来检索域用户权限。

上述第 1 点仍未解决。
我上次尝试的解决方法也没有成功(请参阅上面的其他详细信息)。看来唯一的解决方案是放弃 Synology 主页服务,并在服务器上创建一个新的主目录树,将其安装在 /home 级别的 Ubuntu 客户端上,并为每个用户设置单独的子目录。这对我来说似乎不太优雅,我将非常感激其他建议。

相关内容