LDAP 组通过 nslcd 获得 Sudo 权限

LDAP 组通过 nslcd 获得 Sudo 权限

我在 MS ActiveDirectory 到 Debian LDAP 身份验证/授权设置中的 sudo 权限有问题。

到目前为止我所拥有的
我已经通过 ldaps 使用 libpam-ldap 配置了 nslcd,并且 ssh 登录工作得很好。

getent passwd myuser
myuser:*:10001:10015:myuser:/home/myuser:/bin/bash

在我的 ActiveDirectory 服务器上,安装了 Unix 软件包,它添加了必要的属性,如 posixGroup、posixAccount、gid、gidNumber、uid、uidNumber 等。

我的示例用户如下所示:(
为了安全起见,我选择 10000+)

cn: myuser
uid: myuser
uidNumber: 10015
gidNumber: 10000

我可以通过将以下内容添加到 /etc/nslcd.conf 来限制 SSH 登录

filter passwd (&(objectClass=posixAccount)(|(memberOf=CN=group1,OU=groups,DC=domain,DC=com)(memberOf=CN=group2,OU=groups,DC=domain,DC=com)))

这指定只有 objecClass=posixAccount 和组 group1 或 group2 的用户才能登录。

到目前为止,一切都很好。但是,我无法告诉 sudo 使用这些组。

这是我尝试过的
在 /etc/sudoers 中

// This one works, but only because the user has gidNumber=10000 set. 
// It doesn't matter if a group with this ID actually exist or not. 
// So it's not really permission by LDAP group.
%#10000 ALL=(root) ALL


// This is what I want, but it doesn't work.
%group1 ALL=(root) ALL

问题
不知何故,我需要告诉 sudo 获取请求的用户名,检查它属于哪个 ldap 组,然后查看该组的权限是否足以执行该命令。

不幸的是我不知道从哪里开始。到目前为止,其他一切都有效,我只受 sudo 权限的困扰。我考虑过将用户 gidNumber 字段映射到组 gidNumber 字段,但我不知道是否可以将用户字段映射到组字段。

我不这么认为,因为 nslcd 中的映射是这样指定的

map passwd field1 field2

passwd 告诉 nslcd 它必须映射用户字段。我可以使用组代替 passwd,但不能同时使用组。

答案1

很抱歉这篇文章很长,但它似乎有效。我刚刚在 sudoers 文件中出现了拼写错误。我花了一点时间才找到它,因为语法仍然正确,但我无法执行任何命令。

然而,它现在正在发挥作用。

 // Problem was that one ALL was missing, allowing me to execute no root cmds.
 %group1 ALL=(root) !/bin/su

 // Fixed it
 %group1 ALL=(root) ALL, !/bin/su

更新:我意识到有点晚了,但我还在 /etc/nsswitch.conf 中更改了以下内容

sudoers:        ldap files

我只是不认为这是修复,因为我仍然有上面提到的 sudoers 拼写错误。

问题解决了 :)

答案2

我和为用户分配本地组通过 pam_group 获得相同的功能。我/etc/security/groups.conf添加了以下行

*;*;%administrators;Al0000-2400;adm,sudo,lpadmin

因此,属于 LDAP 组的任何 LDAP 用户administrators都会映射到本地admsudolpadmin组。看起来比安装更简单sudo-ldap,除非我遗漏了一些东西?

相关内容