OpenLdap添加sudo支持

# 摘要

OpenLdap不仅可以实现linux主机的用户认证,还可以对用户的sudo 权限进行集中授权和管理。

# 文档环境

Centos (opens new window) OpenLdap (opens new window) OpenLdap (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

# 配置迁移

对于本地已经有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

# 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

# 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

# 参考文档

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

Initializing...

最近更新
01
git的tag与branch 原创
05-21
02
阿里云SLS日志服务的数据脱敏及安全管理 原创
03-21
03
云平台的成本管理 原创
03-13
更多文章>
×