首页 > 其他分享 >LDAP学习笔记之八:openLDAP sudo权限

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

时间:2024-09-26 11:25:35浏览次数:3  
标签:cn 之八 sudo ldap01 dc openLDAP root LC

一、openLDAP sudo权限常见属性

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

[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支持的对象类型

可能出现的错误

[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组

[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:%limit
dn: 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权限

[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界面查看

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

4.添加索引

[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.安装依赖包

[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 服务端

[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 查找顺序

[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 的参数

[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 提取系统用户权限  

[root@client01 log]# ssh [email protected]  #192.168.1.132是客户端的机器IP
[email protected]'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 

  

"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少



标签:cn,之八,sudo,ldap01,dc,openLDAP,root,LC
From: https://blog.51cto.com/u_8901540/12118047

相关文章

  • OPENLDAP部署完整版(Linux)附一键式脚本
    (一)环境信息1,系统环境2,域信息(本章节使用)(二)应用部署1,ladp部署1、yum方式安装OpenLDAP服务2、拷贝数据库配置配置文件,并启动服务3、slappasswd生成OpenLDAP管理员密码4、导入基本的模式5、在OpenLDAPDB上配置域信息2,安装phpLDAPadmin实现通过Web管理LDAP服务1,部署httpd2,部署php应......
  • JAVA基础之八-方法变量作用域和编译器
    本文主要讨论方法中变量作用域。不涉及类属性变量、静态变量、线程变量共享等。虽然知道某类变量的作用域非常重要,但是没有太多需要说的,因为许多东西是显而易见,不言自明。 在大部分情况下,或者在老一点版本中,java语法看起来都比较正常,或者说相对古典。但是随着JAVA版本的迭代,......
  • linux运维之用户管理 堡垒机+普通用户sudo提权
    一、简介普通用户通过堡垒机登录linux服务器,不允许使用root用户登录堡垒机;普通用户登录后,限制普通用户使用一些命令,如禁止使用某些命令,仅允许使用部分命令等;普通用户不知道root密码,普通用户不能修改root密码;二、sudoers配置0.添加一个测试用户#添加用户useraddalibaby#设置密码......
  • /etc/sudoers文件中的哪些配置会影响系统安全?
    /etc/sudoers文件中的配置对系统安全有很大影响用户权限配置:允许哪些用户使用sudo执行特权命令。如果配置不当,可能导致未经授权的用户获得管理员权限。例如:rootALL=(ALL:ALL)ALL%adminALL=(ALL)ALL%sudoALL=(ALL:ALL)ALL在这个例子中,root用户、admi......
  • 服务器运维-sudo权限控制的sudoers配置文件详细说明以及利用sudo对用户账号分组权限控
    一、服务器运维-sudo权限控制的sudoers配置文件详细说明1.sudo权限控制的sudoers配置文件详细说明:[root@test~]#cat/etc/sudoers##Sudoersallowsparticularuserstorunvariouscommandsastherootuser,withoutneedingtherootpassword.##该文件允许特定......
  • HJ44 Sudoku
    真开心,之前写过华为的数独题,直接提交就OK了=v=1#include<bits/stdc++.h>2usingnamespacestd;3inta[10][10],mp[10][10][10],cnt_mp[10][10],num_sta=0,ans[10][10];4boolb[10],fg[10],fd=0;5structSta{6intx,y;7}sta[100];8structID{9......
  • Linux提权-70种sudo提权汇总
    Linux提权-sudo命令有sudo的权限,我们该如何进行提权呢?跟着红队笔记大佬,汇总了一下当我们有sudo-l时,70条命令可以提权的sudo风暴视频连接:https://www.bilibili.com/video/BV1DV4y1U7bT/?share_source=copy_web&vd_source=385653377c3ce2be6b055cc4a2e9c3cf1)CVE-2019-14......
  • linux中,解决使用sudo时,自定义path路径不生效的问题
    问题当我们在非root用户下,需要使用root权限的时候,通常在前面加sudo就可以了但是,今天遇到了一个小问题,就是我明明已经配置了go的bin目录在PATH变量中,还是配置在/etc/profile中,在root用户下,是可以执行go命令的按理说,用sudogo应该也是没问题的但是,我发现,当我......
  • 详解Linux命令--sudo
    sudo命令是Linux中最常用的命令之一,用于以其他用户的身份执行命令。本文将详细介绍sudo命令的用法,并给出具体的示例。1.基本语法sudo的基本语法如下:sudo[options]command[arguments...][options]:可选参数,用于控制sudo的行为。command:要执行的命令。[arguments...]......
  • linux sudo提权
    方法一、1.创建普通用户usernameuseraddusername2.执行以下命令以编辑sudoers文件,实际是vi/etc/sudoersvisudo找到该行内容rootALL=(ALL)ALL,添加username用户,保存退出:wqrootALL=(ALL)ALLusernameALL=(ALL)ALL方法二、1.创建普通用户u......