OpenLdap添加sudo支持
# 摘要
OpenLdap不仅可以实现linux主机的用户认证,还可以对用户的sudo 权限进行集中授权和管理。
# 文档环境
(opens new window)
(opens new window)
(opens new window)
- 本文档中代码的测试环境
# OpenLdap添加sudo支持
# 添加 sudo ldif
首先需要对openldap 添加sudo 管理支持,这一功能是由开源软件sudo提供的,首先通过schema文件添加sudo 的objectClass。 schema文件通常可以通过sudo 的官方源码获得,在Centos 系统中则或被存放在目录“/usr/share/doc/sudo-1.8.19p2"中。
# 首先将schema格式文件转换为 ldif 格式文件
mkdir /tmp/ldif
cd /tmp/ldif
cp /usr/share/doc/sudo-1.8.19p2/schema.OpenLDAP .
cat > ./schema_conv.conf << EOL
include /tmp/ldif/schema.OpenLDAP
EOL
slaptest -f ./schema_conv.conf -F /tmp/ldif/
cat cn\=config/cn\=schema/cn\=\{0\}schema.ldif >sudoers.ldif
sed -i "s/dn: cn={0}schema/dn: cn=sudo,cn=schema,cn=config/g" sudoers.ldif
sed -i "s/cn: {0}schema/cn: sudo/g" sudoers.ldif
end=`grep -n "structuralObjectClass" sudoers.ldif |awk -F":" '{print $1}'`
sed -n -i "3,${end}p" sudoers.ldif
# 导入ldif 文件
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f sudoers.ldif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 配置迁移
对于本地已经有sudo配置的情况,sudo提供了一个便捷的迁移工具sudoers2ldif
SUDOERS_BASE="ou=sudoers,dc=nginxbar,dc=com"
export SUDOERS_BASE
cd /usr/share/doc/sudo-1.8.19p2
perl sudoers2ldif /etc/sudoers > /root/sudoers.ldif
# 导入openldap
ldapadd -v -x -w $LDAPROOTPSWD -D cn=root,dc=ldapsso,dc=com -H ldapi:/// -f /root/sudoers.ldif
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# openldap sudo 配置属性
属性名 | 值类型 | 备注 |
---|---|---|
sudoUser | 用户名、用户ID(前缀为“/”)、Unix组名或ID(前缀分别为“%”或“%”)、用户网络组(前缀为“+”)或非Unix组名或ID(前缀分别为“%”或“%:”) | 允许sudo 的用户名 |
sudoHost | 主机名、IP地址、IP网络或主机网络组(前缀为“+”)、特殊值ALL、"!(表否定)" | 允许sudo的主机 |
sudoCommand | 特殊值ALL、"!(表否定)" | 允许执行的命令 |
sudoOption | sudo的选项,用以添加sudo的配置选项 | |
sudoRunAsUser | 用户名或uid(前缀为“#”)、特殊值ALL | 执行sudo 命令的用户 |
sudoRunAsGroup | 用户组或gid(前缀为“#”)、特殊值ALL | 执行sudo 命令的用户组 |
sudoNotBefore | 格式为yyyymmddHHMMSSZ的时间戳,时间戳必须是(UTC),而不是本地时区 | 设置sudo的有效时间 |
sudoNotAfter | 格式为yyyymmddHHMMSSZ的时间戳,时间戳必须是(UTC),而不是本地时区 | 设置sudo的有效时间 |
sudoOrder | 整数,默认值为0 | 用于对匹配的条目进行排序,对于多个匹配条目,则选择sudoOrder值最高的条目。 |
# 配置样例
## 创建sudo 管理组
dn: ou=sudoers,dc=ldapsso,dc=com
objectClass: top
objectClass: organizationalUnit
ou: sudoers
## 创建全局默认配置
dn: cn=defaults,ou=sudoers,dc=ldapsso,dc=com
objectClass: top
objectClass: sudoRole
cn: defaults
sudoOption: !visiblepw
sudoOption: always_set_home
sudoOption: env_reset
sudoOption: requiretty
sudoOption: secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
## 创建对posixGroup 组 sre 的配置
dn: cn=su_sre,ou=sudoers,dc=ldapsso,dc=com
objectClass: top
objectClass: sudoRole
description: sudo as sre
sudoOption: !authenticate
sudoHost: ALL
cn: su_sre
sudoUser: %su_sre
sudoCommand: /bin/su sre
sudoRunAsUser: ALL
sudoRunAsGroup: ALL
## 创建对posixGroup 组 su_root,可切换root 的配置
dn: cn=su_root,ou=sudoers,dc=ldapsso,dc=com
objectClass: top
objectClass: sudoRole
description: sre sudo
sudoOption: !authenticate
sudoHost: ALL
sudoCommand: ALL
sudoRunAsUser: root
sudoRunAsGroup: root
cn: su_root
sudoUser: %su_root
## 创建对posixGroup 组 sre,可执行kill命令的配置
dn: cn=sre,ou=sudoers,dc=ldapsso,dc=com
objectClass: top
objectClass: sudoRole
description: sudo as sre
cn: sre
sudoOption: !authenticate
sudoHost: ALL
sudoRunAsUser: root
sudoRunAsGroup: root
sudoCommand: /bin/kill
sudoUser: %sre
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# linux sudo 配置
linux 下 sudo 支持openldap管理,需要在被管理的linux主机上添加ldap server 配置。
## sudo
ldap_server="xxx.xxx.xxx.xxx"
ldap_dn="dc=ldapsso,dc=com"
sed -i "/^group: files ldap/a\sudoers: files ldap" /etc/nsswitch.conf
sed -i "s|^#uri ldap://ldapserver|uri ldap://$ldap_server|g" /etc/sudo-ldap.conf
sed -i "s|^#sudoers_base.*|sudoers_base ou=sudoers,$ldap_dn|g" /etc/sudo-ldap.conf
if [ -f "/etc/nscd.conf" ];then
## 修复group 缓存bug
sed -r -i "s/\s+enable-cache\s+group.*/ enable-cache group no/g" /etc/nscd.conf
[ $ver -eq 6 ] && chkconfig --level 234 nscd on || systemctl restart nscd
[ $ver -eq 6 ] && service nscd restart || systemctl restart nscd
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 参考文档
https://www.sudo.ws/readme_ldap.html
https://www.sudo.ws/man/1.8.19/sudoers.ldap.man.html
上次更新: 2022/12/05, 22:29:05