博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
05-sudo权限配置
阅读量:7210 次
发布时间:2019-06-29

本文共 9402 字,大约阅读时间需要 31 分钟。

阅读目录

  1. 基础环境准备
  2. 服务端配置
  3. 客户端配置
  4. 客户端验证
  5. 附:sudo常见属性介绍
  6. 常见错误分析

1. 基础环境准备

本文接文章

2. 服务端配置

  1. 导入sudo schema

    openldap默认schema中不包含sudo所需要的数据结构,这时需要我们自行导入sudo schema文件。操作如下

    [root@mldap01 tmp]# rpm -ql sudo-1.8.6p3-27.el6.x86_64 | grep schema/usr/share/doc/sudo-1.8.6p3/schema.ActiveDirectory/usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP/usr/share/doc/sudo-1.8.6p3/schema.iPlanet[root@mldap01 tmp]# cp -a /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema

    690769-20180602235209538-549527133.png

    [root@mldap01 slapd.d]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.dconfig file testing succeeded[root@mldap01 slapd.d]# chown ldap.ldap -R /etc/openldap/slapd.d[root@mldap01 slapd.d]# /etc/init.d/slapd restartStopping slapd:                                            [  OK  ]Starting slapd:                                            [  OK  ]
  2. 验证openldap是否支持sudo

    查看OpenLDAP数据库目录中schema所产生的文件

    690769-20180602235220345-397022939.png

    查看sudo schema所支持的对象类型

    shell [root@mldap01 ~]# ldapsearch -LLLY EXTERNAL -H ldapi:/// -b cn={12}sudo,cn=schema,cn=config | grep NAME | awk '{print $4,$5}' | sort SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 NAME 'sudoCommand' NAME 'sudoHost' NAME 'sudoNotAfter' NAME 'sudoNotBefore' NAME 'sudoOption' NAME 'sudoOrder' NAME 'sudoRole' NAME 'sudoRunAs' NAME 'sudoRunAsGroup' NAME 'sudoRunAsUser' NAME 'sudoUser'

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

    sudoers的配置信息存放在ou=suders的子树中,默认OpenLDAP用户并没有指定sudo规则,openldap首先在目录树子树中寻找条目cn=defaults, 如果找到,那么所有的sudoOption属性都会被解析为全局默认值, 这类似于系统sudo(/etc/sudoers)文件中Defaults语句。

    当用户到OpenLDAP服务端中查询一个sudo用户权限时一般有两到三次查询。第一次查询解析全局配置,第二次查询匹配用户名或者用户所在的组(特殊标签ALL也在此次查询中匹配),如果没有找到相关匹配项,则发出第三次查询,此次查询返回所有包含用户组的条目并检查该用户是否存在于这些组中。接下来创建openldap的sudoers子树。具体命令如下。

    [root@mldap01 ~]# cat << EOF | ldapadd -x -D "cn=Manager,dc=gdy,dc=com" -W> dn: ou=sudoers,dc=gdy,dc=com> objectClass: organizationalUnit> objectClass: top> ou: sudoers> > dn: cn=default,ou=sudoers,dc=gdy,dc=com> objectClass: sudoRole> cn: default> description: Default sudoOption's go here> sudoOption: requiretty> sudoOption: !visiblepw> sudoOption: always_set_home> sudoOption: env_reset> sudoOption: env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"> sudoOption: env_keep+="MALL 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_TELEPHOME"> 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=gdy,dc=com> objectClass: sudoRole> cn: %dba> sudoUser: %dba> sudoRunAsUser: oracle> sudoRunAsUser: grid> sudoOption: !authenticate> sudoCommand: /bin/bash> > dn: cn=%app,ou=sudoers,dc=gdy,dc=com> objectClass: sudoRole> cn: %app> sudoUser: %app> sudoHost: ALL> sudoRunAsUser: appman> sudoOption: !authenticate> sudoCommand: /bin/bash> > dn: cn=%admin,ou=sudoers,dc=gdy,dc=com> 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=gdy,dc=com> objectClass: top> objectClass: sudoRole> cn: %limit> sudoCommand: /usr/bin/chattr> sudoHost: limit.gdy.com> sudoOption: !authenticate> sudoRunAsUser: ALL> sudoUser: %limit> EOFEnter LDAP Password: adding new entry "ou=sudoers,dc=gdy,dc=com"adding new entry "cn=default,ou=sudoers,dc=gdy,dc=com"adding new entry "cn=%dba,ou=sudoers,dc=gdy,dc=com"adding new entry "cn=%app,ou=sudoers,dc=gdy,dc=com"adding new entry "cn=%admin,ou=sudoers,dc=gdy,dc=com"adding new entry "cn=%limit,ou=sudoers,dc=gdy,dc=com"

    以上操作中,读者不难发现app组可以通过sudo切换到系统appman用户下,而且也不需要输入验证密码,同理admin组里面的用户只能通过sudo执行允许的命令,其他越权命令不允许执行。dba组里面的用户可以通过sudo命令切换到系统oracle和grid用户下,且不需要输入验证密码。limit组里面的用户只允许在limit.gdy.com机器上通过sudo执行一条命令,且不需要提供验证密码,其他任何机器都不能使用sudo命令执行命令。manager组里面的用户可以在任何主机上执行sudo命令,没有任何限制,如果要求OpenLDAP用户提示输入密码,只需要将!authenticate中的感叹号去掉即可。

  4. 添加OpenLDAP用户到app组和manager组中

    [root@mldap01 ~]# cat << EOF | ldapadd -D "cn=Manager,dc=gdy,dc=com" -c -x -Wdn: cn=app,ou=Group,dc=gdy,dc=com objectClass: posixGroupcn: appgidNumber: 10005dn: cn=manager,ou=Group,dc=gdy,dc=comobjectClass: posixGroupcn: managergidNumber: 10006dn: uid=jboss,ou=People,dc=gdy,dc=comobjectClass: accountobjectClass: posixAccountobjectClass: shadowAccountcn: jbossuid: jbossuidNumber: 20006gidNumber: 10005userPassword: {CRYPT}$6$eRYFmeDr$siXSlXkO8OEhzHsLvlslFJZpmLnW1ajWU3wG3b4DVAdP6jYJDpUwwJW2juEir3wbpjU6t2h7sSWfRARb2xJ.G1homeDirectory: /home/jbossloginShell: /bin/bashdn: uid=manager01,ou=People,dc=gdy,dc=comobjectClass: accountobjectClass: posixAccountobjectClass: shadowAccountcn: manager01uid: manager01uidNumber: 20007gidNumber: 10006userPassword: {CRYPT}$6$yTg3xJfA$VpThv3kvPG1uFw2.n/VgTnk8W05PED9CdEq.RXbz7SdjGd30z51lyuiBUFfd4F8HGQvWV3pWlplqATQh90fpL.homeDirectory: /home/manager01loginShell: /bin/bashEOFEnter LDAP Password: adding new entry "cn=app,ou=Group,dc=gdy,dc=com"adding new entry "cn=manager,ou=Group,dc=gdy,dc=com"adding new entry "uid=jboss,ou=People,dc=gdy,dc=com"adding new entry "uid=manager01,ou=People,dc=gdy,dc=com"
  5. 通过ldapsearch指令查看jboss用户及app组相关信息

    ```shell
    [root@mldap01 ~]# ldapsearch -x -LLL uid=jboss
    dn: uid=jboss,ou=people,dc=gdy,dc=com
    objectClass: account
    objectClass: posixAccount
    objectClass: shadowAccount
    cn: jboss
    uid: jboss
    uidNumber: 20006
    gidNumber: 10005
    homeDirectory: /home/jboss
    loginShell: /bin/bash

    [root@mldap01 ~]# ldapsearch -x -LLL cn=app

    dn: cn=app,ou=Group,dc=gdy,dc=com
    objectClass: posixGroup
    cn: app
    gidNumber: 10005
    ```

3. 客户端配置

  1. 查看当前sudo版本是否支持openldap的sudo规则,不支持的版本需要进行升级

    [user1@test01 openldap]$ rpm -qi sudo  | grep -i version Version     : 1.8.6p3                           Vendor: CentOS// 如果sudo版本为1.7.4p5则需要对sudo进行升级,否则无法支持openldap服务器sudo规则的匹配[user1@test01 openldap]$ sudo -VSudo version 1.8.6p3Sudoers policy plugin version 1.8.6p3Sudoers file grammar version 42Sudoers I/O plugin version 1.8.6p3   //sudo版本的信息
  2. 客户端加入OpenLDAP服务端

    本文略,具体参考

  3. 修改nsswitch.conf配置文件,添加sudo查找顺序,命令如下

    [root@mldap01 ~]# cat >> /etc/nsswitch.conf << EOF> sudoers:      ldap files> EOF[root@mldap01 ~]# cat /etc/nsswitch.conf | grep -i sudoerssudoers:      ldap files
  4. 修改sudo-ldap.conf配置文件,添加支持后端openldap验证sudo的参数,命令如下:

    [root@mldap01 ~]# cat >> /etc/sudo-ldap.conf << EOF> SUDOERS_BASE ou=Sudoers,dc=gdy,dc=com> EOF[root@mldap01 ~]# cat /etc/sudo-ldap.conf | grep -i Sudoers## SUDOERS_BASE base##  Multiple SUDOERS_BASE lines may be specified, in which#sudoers_base ou=SUDOers,dc=example,dc=com## SUDOERS_DEBUG debug_level#sudoers_debug 1uri ldap://mldap01.gdy.comSUDOERS_BASE ou=sudoers,dc=gdy,dc=com

4. 客户端验证

验证OpenLDAP帐号通过sudo提取系统用户权限

```shellldif格式的appman用户及组dn: uid=appman,ou=people,dc=gdy,dc=comuid: appmancn: appmanobjectClass: accountobjectClass: posixAccountobjectClass: topobjectClass: shadowAccountuserPassword: {CRYPT}$6$2v5NKeJj$e1G81HKtTa0fnNX1nqhX1ym/63/X0lHEnobGd0ZBHiwUhcy9SlF8RC.6bPH.CtEbfEVSnn.rRBkRWCAisUrgn/shadowLastChange: 17675shadowMin: 0shadowMax: 99999shadowWarning: 7loginShell: /bin/bashuidNumber: 30000gidNumber: 30000homeDirectory: /home/appmandn: cn=appman,ou=Group,dc=gdy,dc=comobjectClass: posixGroupobjectClass: topcn: appmanuserPassword: {crypt}xgidNumber: 30000[root@test01 ~]# ssh jboss@127.0.0.1jboss@127.0.0.1's password: Last login: Thu May 24 13:49:07 2018 from localhost[jboss@test01 ~]$ sudo -lMatching Defaults entries for jboss on this host:    requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MALL 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_TELEPHOME", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin:/bin:/usr/sbin:/usr/bin, !visiblepw, always_set_home,    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC 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/binUser jboss may run the following commands on this host:    (appman) NOPASSWD: /bin/bash[jboss@test01 ~]$ sudo -i -u appman[appman@test01 ~]$        # 切换成功```

5. 附:sudo常见属性介绍

sudo常见的属性有以下几个

  • sudoCommand:可执行的二进制命令,如useradd、userdel、mount、umount等。
  • sudoHost:可在哪些机器上执行sudoCommand定义的BASH命令。
  • sudoNotAfter:起始时间sudo规则匹配。
  • sudoNotBefore:结束时间sudo规则匹配。
  • sudoOption:定义超过自身权限及切换至其他用户时,是否需要输入当前用户密码。
  • sudoOrder:sudo规则执行顺序,其属性是一个整数。
  • sudoRole:定义的规则。
  • sudoRunAS:可切换到定义的用户身份下执行BASH命令。
  • sudoRunAsGroup:可切换到定义所属组并具有该组的权限。
  • sudoRunAsUser:定义可切换至哪些用户下执行命令。
  • sudoUser:限制哪些用户或哪些组内的成员具有sudo相关规则。

6. 常见错误分析

  1. 例1,报错/home/appman: No such file or directory

    [jboss@test01 ~]$ sudo -i -u appmansudo: unable to change directory to /home/appman: No such file or directorysudo: unable to execute /bin/bash: No such file or directory

    解决方法:在本机创建appman的家目录就可以了

转载于:https://www.cnblogs.com/cishi/p/9127572.html

你可能感兴趣的文章
【深度学习再突破】让计算机一眼认出“猫”:哈佛提出新高维数据分析法
查看>>
C++程序设计基础(7)位运算
查看>>
MSDN-9月杂志推荐
查看>>
【原理】解析一致性哈希算法
查看>>
用爬虫分析互联网大数据行业薪资情况
查看>>
【解放日报】除了CEO首席执行官,你了解CIO吗?
查看>>
git 安装 on centos7
查看>>
Node.js入门以及第一个helloworld程序.
查看>>
6月20日云栖精选夜读丨国内首家!阿里云宣布全面提供IPv6服务
查看>>
改造房车走天下,这个阿里妹子不一般
查看>>
沃尔玛正测试货架扫描机器人,并称不会取代人类员工
查看>>
除了汪峰,还有哪些明星跨界做智能硬件
查看>>
Ubuntu 16.04安装UML工具StarUML 2
查看>>
勒索病毒入侵中国, Splunk建议网络立即进行区分和隔离设置
查看>>
应“云”而生--云时代的运维新理念
查看>>
RFID能否让实体零售业度过“寒冬”?
查看>>
Swagger2接口注释参数使用数组
查看>>
“IP的力量”专题论坛成功举办,聚焦行业共话IP与VR AR技术新融合
查看>>
Ubuntu下使用UFW配置防火墙(简化iptables的操作)
查看>>
OpenStack快速入门-queens版本
查看>>