我已将运行 Ubuntu Studio 18.04 的 PC 加入了由 Synology Directory Server 管理的 AD 域。我现在可以使用域用户的凭据登录 Ubuntu PC,但仍有两件事无法按我希望的方式工作:
- 尽管我在 Synology Directory Server 中的 NAS 上配置了主目录和用户配置文件目录,但使用域用户凭据登录会在 Ubuntu PC 上创建主目录。我希望域用户的主目录位于 NAS 上,而不是客户端 PC 上。
- 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 获取基于服务器的主目录?
特别是,我如何区分以下可能性?
- DC 根本没有发送主目录。
- DC 发送的内容不是客户端可以使用的格式。
- 由于客户端系统中缺少某些链接(例如缺少 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 客户端上,并为每个用户设置单独的子目录。这对我来说似乎不太优雅,我将非常感激其他建议。