ldap 组通过 nslcd 的 Sudo 权限

moh*_*ium 7 active-directory ldap permissions sudo

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

到目前为止,
我已经通过 ldaps 使用 libpam-ldap 配置了 nslcd,并且 ssh 登录运行良好。

getent passwd myuser
myuser:*:10001:10015:myuser:/home/myuser:/bin/bash
Run Code Online (Sandbox Code Playgroud)

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

我的示例用户看起来像这样:(
为了安全起见,我选择 10000+)

cn: myuser
uid: myuser
uidNumber: 10015
gidNumber: 10000
Run Code Online (Sandbox Code Playgroud)

我可以通过将以下内容添加到 /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)))
Run Code Online (Sandbox Code Playgroud)

这指定只有具有 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

map passwd field1 field2
Run Code Online (Sandbox Code Playgroud)

并且 passwd 告诉 nslcd 它必须映射用户字段。我可以使用组而不是 passwd,但不能同时使用它们。

moh*_*ium 7

很抱歉这篇很长的帖子,但它似乎有效。我只是在 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
Run Code Online (Sandbox Code Playgroud)

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

sudoers:        ldap files
Run Code Online (Sandbox Code Playgroud)

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

问题解决了 :)