LDAP学习笔记之八:openLDAP sudo权限

简介: LDAP学习笔记之八:openLDAP sudo权限

一、openLDAP sudo权限常见属性

1

2

3

4

5

6

7

8

9

sudoCommand:可执行的二进制命令,如 useradd、userdel、mount、umount等。sudoHost:可在哪些机器上执行sudoCommand定义的BASH命令。

sudoNotAfter:起始时间sudo规则匹配。

sudoNotBefore:结束时间sudo规则匹配。

sudoOption:定义超过自身权限及切换至其他用户时,是否需要输入当前用户密码。sudoOrder:sudo规则执行顺序,其属性是一个整数。

sudoRole:定义的规则。

sudoRunAs:可切换到定义的用户身份下执行BASH命令。

sudoRunAsGroup:可切换到定义所属组并具有该组的权限。

sudoRunAsUser:定义可切换至哪些用户下执行命令。

sudoUser:限制哪些用户或哪些组内的成员具有sudo相关规则。

二、在OpenLDAP服务端实现用户权限控制

1.导入sudo schema

1

2

3

4

5

6

7

8

9

10

11

12

13

[root@ldap01 ~]# rpm -ql sudo|grep schema.OpenLDAP

/usr/share/doc/sudo-1.8.23/schema.OpenLDAP

[root@ldap01 ~]# cp /usr/share/doc/sudo-1.8.23/schema.OpenLDAP /etc/openldap/schema/sudo.schema

[root@ldap01 ~]# cd /etc/openldap/schema/

[root@ldap01 schema]# restorecon sudo.schema

[root@ldap01 schema]# mkdir ~/sudo

[root@ldap01 schema]# echo 'include /etc/openldap/schema/sudo.schema' ~/sudo/sudoSchema.conf

[root@ldap01 schema]# slapcat -f ~/sudo/sudoSchema.conf -F /tmp/ -n0 -s "cn={0}sudo,cn=schema,cn=config" ~/sudo/sudo.ldif

[root@ldap01 schema]# sed -i "s/{0}sudo/{13}sudo/g" ~/sudo/sudo.ldif       #如果13不够可以用最大值100,后面会自动调整

[root@ldap01 schema]# head -n -8 ~/sudo/sudo.ldif ~/sudo/sudo-config.ldif  #删除structuralObjectClass及以下所有行

[root@ldap01 schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f  ~/sudo/sudo-config.ldif

[root@ldap01 schema]# ls /etc/openldap/slapd.d/cn\=config  #查看openLDAP数据库目录中schema产生的文件,不难发现,当前目录多了一个关于 sudo 的配置文件 cn={13}sudo.ldif 文件

[root@ldap01 schema]# ldapsearch -LLLY EXTERNAL -H ldapi:/// -b "cn={13}sudo,cn=schema,cn=config"|grep NAME|awk '{print $4,$5}'|sort #查看sudo schema支持的对象类型 

可能出现的错误

1

2

3

4

5

6

7

8

9

10

11

[root@ldap01 schema]# ldapadd -Y EXTERNAL -H ldapi:/// -f  ~/sudo/sudo-config.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

adding new entry "cn={12}sudo,cn=schema,cn=config"

ldap_add: Server is unwilling to perform (53)

    additional info: operation requires sibling renumbering

# 请修改 13 编号为其他数值,如果无法确定请查看目录下是否有重复的:

[root@ldap01 schema]# ls /etc/openldap/slapd.d/cn\=config/cn\=schema

cn={0}core.ldif       cn={11}pmi.ldif      cn={1}cosine.ldif  cn={3}collective.ldif  cn={5}duaconf.ldif   cn={7}inetorgperson.ldif  cn={9}misc.ldif

cn={10}openldap.ldif  cn={12}ppolicy.ldif  cn={2}nis.ldif     cn={4}corba.ldif       cn={6}dyngroup.ldif  cn={8}java.ldif

2.定义sudo规则条目及sudo组

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

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

[root@ldap01 ~]# vim ~/sudo/duso_perm.ldif

dn: ou=sudoers,dc=ldap01,dc=pwb,dc=com     #将sudoers配置信息存放在ou=suders的子树中

objectclass: organizationalUnit

ou: sudoers

 

dn: cn=defaults,ou=sudoers,dc=ldap01,dc=pwb,dc=com #openLDAP首先会在子树中寻找cn=defaults条目,如果找到则所有dusoOption属性都会被解析为全局默认值  类似/etc/sudoers文件中的Defaults文件

objectClass: sudoRole

cn: defaults

description: Default sudoOption's go here

sudoOption: requiretty

sudoOption: !visiblepw

sudoOption: always_set_home

sudoOption: env_reset

sudoOption: env_keep="COLORS DISPLAY HOSTNAME HISTSIZE TNPUTRC KDEDIR LS COLORS"

sudoOption: env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"

sudoOption: env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"

sudoOption: env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"

sudoOption: env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

sudoOption: secure_path=/sbin:/bin:/usr/sbin:/usr/bin

 

dn: cn=%dba,ou=sudoers,dc=ldap01,dc=pwb,dc=com  #定义DBA组,允许组内用户可以通过sudo命令切换到系统oracle和grid用户下,不需要密码

objectClass: sudoRole

cn: %dba

sudoUser: %dba

sudoHost: ALL

sudoRunAsUser: oracle

sudoRunAsUser: grid

sudoOption: !authenticate

sudoCommand:  /bin/bash

 

dn: cn=%app,ou=sudoers,dc=ldap01,dc=pwb,dc=com  #定义app组,允许组内可以sudo切换到系统appman用户下,不需要密码

objectClass: sudoRole

cn: %app

sudoUser: %app

sudoHost: ALL

sudoRunAsUser: appman

sudoOption: !authenticate

sudoCommand:/bin/bash

 

dn: cn=%admin,ou=sudoers,dc=ldap01,dc=pwb,dc=com #定义admin组,组内用户只能sudo执行允许的命令,其他越权命令不允许执行

objectClass: sudoRole

cn: %admin

sudoUser: %admin

sudoHost: ALL

sudoOption: authenticate

sudoCommand: /bin/rm

sudoCommand: /bin/rmdir

sudoCommand: /bin/chmod

sudoCommand: /bin/chown

sudoCommand: /bin/dd

sudoCommand: /bin/mv

sudoCommand: /bin/cp

sudoCommand: /sbin/fsck*

sudoCommand: /sbin/*remove

sudoCommand: /usr/bin/chattr

sudoCommand: /sbin/mkfs*

sudoCommand: !/usr/bin/passwd

sudoOrder: 0

 

dn: cn=%limit,ou=sudoers,dc=ldap01,dc=pwb,dc=com  #定义limit组,组内用户只能在limit.pwb.com机器上执行chattr命令,其他都不允许

objectClass: top

objectClass: sudoRole

cn:%limit

sudoCommand:/usr/bin/chattr

sudoHost: limit.pwb.com

sudoOption: !authenticate

sudoRunAsUser: ALL

sudoUser:%limitdn: cn=%manager,ou=sudoers,dc=ldap01,dc=pwb,dc=com #定义manager组,组内用户可以在任何主机上执行sudo命令,没有任何限制

objectClass: sudoRole

objectClass: top

cn: %manager

sudoUser: ALL

sudoHost: ALL

sudoCommand: ALL

sudoRunAsUser: ALL

sudoOption: !authenticate[root@ldap01 schema]# ldapadd -x -D cn=admin,dc=ldap01,dc=pwb,dc=com -W -f ~/sudo/duso_perm.ldif

3.用户加入sudo 组,继承 sudo权限

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

[root@ldap01 ~]# vim ~/sudo/add_sudo_user.ldif

dn: cn=app,ou=Group,dc=ldap01,dc=pwb,dc=com

objectClass: posixGroup

cn: app

gidNumber: 10005

 

dn: cn=manager,ou=Group,dc=ldap01,dc=pwb,dc=com

objectClass: posixGroup

cn: manager

gidNumber: 10006

 

dn: uid=jboss,ou=People,dc=ldap01,dc=pwb,dc=com

objectClass: account

objectClass: posixAccount

objectClass: shadowAccount

cn: jboss

uid: jboss

uidNumber: 20006

gidNumber: 10005

userPassword: jboss

homeDirectory: /home/jboss

loginShell: /bin/bash

 

dn: uid=manager01,ou=People,dc=ldap01,dc=pwb,dc=com

objectClass: account

objectClass: posixAccount

objectClass: shadowAccount

cn: manager01

uid: manager01

uidNumber: 20007

gidNumber: 10006

userPassword: manager01

homeDirectory: /home/manager01

loginShell: /bin/bash

[root@ldap01 ~]#  ldapadd -x -D cn=admin,dc=ldap01,dc=pwb,dc=com -W -f ~/sudo/add_sudo_user.ldif

#如果想自定义用户和组条目可以在文件最上份定义,并将组及用户的ou替换即可

dn: ou=groups,dc=ldap01,dc=pwb,dc=com

ou: Group

objectClass: top

objectClass: organizationalUnit

 

dn: ou=peoples,dc=ldap01,dc=pwb,dc=com 

ou: People

objectClass: top

objectClass: organizationalUnit[root@ldap01 ~]# ldapsearch -x -LLL uid=jboss  #通过 ldapsearch 查看 jboss 用户及 app 组相关信息[root@ldap01 ~]# ldapsearch -x -LLL cn=app

GUI界面查看

4.添加索引

1

2

3

4

5

6

7

[root@ldap01 ~]# cat << EOF | ldapadd -Y EXTERNAL -H ldapi:///

# Add indexes

dn: olcDatabase={2}hdb,cn=config

changetype:  modify

add: olcDbIndex

olcDbIndex: sudoUser eq

EOF 

三、在客户端配置OpenLDAP相关sudo设置

1.安装依赖包

1

2

3

[root@client01 ~]# yum install openldap-client nss-pam-ldapd openssh-ldap fprintd-pam -y

[root@client01 ~]# rpm -qi sudo |grep -i version

Version     : 1.8.23

2.客户端加入 OpenLDAP 服务端

1

2

3

[root@client01 log]# echo '192.168.1.131 ldap01.pwb.com ldap01' >> /etc/hosts

[root@client01 ~]#  authconfig --savebackup=openldap.bak #备份 authconfig --restorebackup=openldap.bak(还原)

[root@client01 ~]#  authconfig --enableldap --enableldapauth --enablemkhomedir --enableforcelegacy --disablesssd --disablesssdauth --disableldaptls --enablelocauthorize --ldapserver=ldap01.pwb.com --ldapbasedn="dc=ldap01,dc=pwb,dc=com" --enableshadow --update

3.修改 nsswitch.conf 配置文件,添加 sudu 查找顺序

1

2

3

4

[root@client01 ~]# cp /etc/nsswitch.conf /etc/nsswitch.conf.baks 

[root@client01 ~]# cat >> /etc/nsswitch.conf << EOF

> sudoers:    ldap files

> EOF

4.修改 sudo-ldap.conf 配置文件,添加支持后端 OpenLDAP 验证 sudo 的参数

1

2

3

4

[root@client01 ~]# cat >> /etc/sudo-ldap.conf << EOF 

> SUDOERS_BASE ou=sudoers,dc=ldap01,dc=pwb,dc=com

> uri ldap://ldap01.pwb.com

> EOF

5.验证 OpenLDAP 账号通过 sudo 提取系统用户权限  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

[root@client01 log]# ssh manager01@192.168.1.132  #192.168.1.132是客户端的机器IP

manager01@192.168.1.132's password:

Creating directory '/home/manager01'.

[manager01@client01 ~]$ sudo -l

匹配 %2$s 上 %1$s 的默认条目:

    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE TNPUTRC KDEDIR

    LS COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE\"", env_keep+="LC_COLLATE

    LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER

    LC_TELEPHONE", env keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",

    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, !visiblepw, always_set_home, match_group_by_gid,

    always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",

    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION

    LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",

    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",

    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

 

用户 manager01 可以在 client01 上运行以下命令:

    (ALL) NOPASSWD: ALL

[manager01@client01 ~]$ sudo cat /etc/passwd   #验证 OpenLDAP 账号通过 sudo 提取系统用户权限

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

 

抄自于:http://wiki.shileizcc.com/confluence/pages/viewpage.action?pageId=40566794 

相关文章
|
3月前
|
Linux Shell Apache
LDAP学习笔记之七:Centos7 搭建openldap+图形界面
LDAP学习笔记之七:Centos7 搭建openldap+图形界面
|
Unix Linux Shell
《Linux/UNIX OpenLDAP实战指南》——2.7 OpenLDAP用户以及与用户组相关的配置
添加用户和用户组的方式有两种。一种是将系统用户通过migrationtools工具生成LDIF文件并结合ldapadd命令导入OpenLDAP目录树中,生成OpenLDAP用户。另一种通过自定义LDIF文件并通过OpenLDAP命令进行添加或者修改操作。
3786 0
|
Linux Apache PHP
LDAP的安装与使用
openldap的安装与使用
682 1
|
数据安全/隐私保护 Ubuntu 网络协议
|
存储 MySQL 关系型数据库
LDAP入门
LDAP入门 首先要先理解什么是LDAP,当时我看了很多解释,也是云里雾里,弄不清楚。在这里给大家稍微捋一捋。 首先LDAP是一种通讯协议,LDAP支持TCP/IP。
1830 0
|
测试技术 网络安全 开发工具