![LDAP 组通过 nslcd 获得 Sudo 权限](https://linux22.com/image/36534/LDAP%20%E7%BB%84%E9%80%9A%E8%BF%87%20nslcd%20%E8%8E%B7%E5%BE%97%20Sudo%20%E6%9D%83%E9%99%90.png)
我在 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
都会映射到本地adm
、sudo
和lpadmin
组。看起来比安装更简单sudo-ldap
,除非我遗漏了一些东西?