使用 NIS 身份验证时 systemd 未为我的会话分配席位

使用 NIS 身份验证时 systemd 未为我的会话分配席位

标题几乎说明了一切。

当我是本地用户时(假设是正常情况),我的会话会被分配一个席位。

jlinkels@donald-pc:~$ loginctl 
SESSION  UID USER     SEAT  TTY
      3 1000 jlinkels seat0 

但是,当我通过 NIS 进行身份验证时(这在我的网络上很正常),这种情况并没有发生:

jlinkels@donald-pc:~$ loginctl
No sessions.

这首先就很糟糕,因为从 Debian 10 开始,udev 中为本地用户添加了对扫描仪和网络摄像头等设备的访问权限。本地用户就是占据座位的用户。

我可以通过将 Debian 10 之前的组权限分配给设备来解决这个问题。但这是不可取的,因为我不想为每次安装编辑 udev 规则。更糟糕的是,如果我没有分配席位,TeamViewer 15(第一个原生 Linux 版本)就无法运行。

我不知道如何调整 systemd、pamd、logind 或 NIS 来为我的会话分配席位。这对我来说完全是新事物。(也许 systemd 又增加了一层复杂性)

内核:4.19.0-9-amd64
Debian 10 Buster
KDE5 Plasma

答案1

最可能的原因是 systemd-logind 无法将您的用户名解析为 UID(反之亦然),因为库nss_nis名称查找模块直接向您的 NIS 服务器发出网络 RPC 调用,而 systemd-logind 则出于安全预防措施而阻止所有网络访问。

(其他姓名查询模块,例如库nss_sss来自 SSSD,以及较新的库nss_ldapnslcd 附带的程序不会出现此问题,因为它们只连接到本地守护进程,该进程集中处理所有网络流量和缓存。)

有两种方法可以解决这个问题:

  1. 使用配置了“代理”id_provider 的 SSSD。NIS 名称查找模块只需由 SSSD 本身加载,所有其他进程将通过本地套接字对其进行查询。

  2. 用于systemctl edit --full systemd-logind禁用 systemd-logind 中的网络限制,方法是删除IP地址拒绝=RestrictAddressFamilies=选项。(并且可能系統呼叫濾器=也。

(我想将 nscd.service 列为第三种方式,因为它也将查询移出 logind 进程,就像 SSSD 所做的那样,但实际上并非如此意味着为了这个目的 – 它只是一个缓存守护进程,并且不会阻止像以前一样回退到在进程中发出 NIS 请求。)

相关内容