05-sudo权限配置
阅读目录
- 基础环境准备
- 服务端配置
- 客户端配置
- 客户端验证
- 附:sudo常见属性介绍
- 常见错误分析
1. 基础环境准备
本文接文章openldap服务端安装配置
2. 服务端配置
导入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

[root@mldap01 slapd.d]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
[root@mldap01 slapd.d]# chown ldap.ldap -R /etc/openldap/slapd.d
[root@mldap01 slapd.d]# /etc/init.d/slapd restart
Stopping slapd: [ OK ]
Starting slapd: [ OK ]
验证openldap是否支持sudo
查看OpenLDAP数据库目录中schema所产生的文件

查看sudo schema所支持的对象类型
[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'
定义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
> EOF
Enter 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中的感叹号去掉即可。添加OpenLDAP用户到app组和manager组中
[root@mldap01 ~]# cat << EOF | ldapadd -D "cn=Manager,dc=gdy,dc=com" -c -x -W
dn: cn=app,ou=Group,dc=gdy,dc=com
objectClass: posixGroup
cn: app
gidNumber: 10005 dn: cn=manager,ou=Group,dc=gdy,dc=com
objectClass: posixGroup
cn: manager
gidNumber: 10006 dn: uid=jboss,ou=People,dc=gdy,dc=com
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: jboss
uid: jboss
uidNumber: 20006
gidNumber: 10005
userPassword: {CRYPT}$6$eRYFmeDr$siXSlXkO8OEhzHsLvlslFJZpmLnW1ajWU3wG3b4DVAdP6jYJDpUwwJW2juEir3wbpjU6t2h7sSWfRARb2xJ.G1
homeDirectory: /home/jboss
loginShell: /bin/bash dn: uid=manager01,ou=People,dc=gdy,dc=com
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: manager01
uid: manager01
uidNumber: 20007
gidNumber: 10006
userPassword: {CRYPT}$6$yTg3xJfA$VpThv3kvPG1uFw2.n/VgTnk8W05PED9CdEq.RXbz7SdjGd30z51lyuiBUFfd4F8HGQvWV3pWlplqATQh90fpL.
homeDirectory: /home/manager01
loginShell: /bin/bash
EOF
Enter 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"
通过ldapsearch指令查看jboss用户及app组相关信息
[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. 客户端配置
查看当前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 -V
Sudo version 1.8.6p3
Sudoers policy plugin version 1.8.6p3
Sudoers file grammar version 42
Sudoers I/O plugin version 1.8.6p3 //sudo版本的信息
客户端加入OpenLDAP服务端
本文略,具体参考openldap客户端安装
修改nsswitch.conf配置文件,添加sudo查找顺序,命令如下
[root@mldap01 ~]# cat >> /etc/nsswitch.conf << EOF
> sudoers: ldap files
> EOF
[root@mldap01 ~]# cat /etc/nsswitch.conf | grep -i sudoers
sudoers: ldap files
修改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 1
uri ldap://mldap01.gdy.com
SUDOERS_BASE ou=sudoers,dc=gdy,dc=com
4. 客户端验证
验证OpenLDAP帐号通过sudo提取系统用户权限
```shell
ldif格式的appman用户及组
dn: uid=appman,ou=people,dc=gdy,dc=com
uid: appman
cn: appman
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {CRYPT}$6$2v5NKeJj$e1G81HKtTa0fnNX1nqhX1ym/63/X0lHEnobGd0ZBHiwUhcy9SlF8RC.6bPH.CtEbfEVSnn.rRBkRWCAisUrgn/
shadowLastChange: 17675
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 30000
gidNumber: 30000
homeDirectory: /home/appman
dn: cn=appman,ou=Group,dc=gdy,dc=com
objectClass: posixGroup
objectClass: top
cn: appman
userPassword: {crypt}x
gidNumber: 30000
[root@test01 ~]# ssh jboss@127.0.0.1
jboss@127.0.0.1's password:
Last login: Thu May 24 13:49:07 2018 from localhost
[jboss@test01 ~]$ sudo -l
Matching 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/bin
User 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,报错/home/appman: No such file or directory
[jboss@test01 ~]$ sudo -i -u appman
sudo: unable to change directory to /home/appman: No such file or directory
sudo: unable to execute /bin/bash: No such file or directory
解决方法:在本机创建appman的家目录就可以了
05-sudo权限配置的更多相关文章
- sudo权限配置
首先要禁止root的用户登录ssh 在ssh配置文件里面把root用户no掉,一般公司不允许用第三方软件直接root登陆. 一.linux给用户添加sudo权限: 有时候,linux下面运行sudo ...
- 04.Linux-CentOS系统sudo权限配置
visudo权限配置普通用户的使用权限范围配置文件: (请根据自己公司需求配置) [root@localhost ~]# visudo ## Allow root to run any command ...
- Linux用户配置sudo权限
Linux用户配置sudo权限 创建sudo权限用户 #useradd supope #passwd supope #visudo #supope ALL=(ALL) AL ...
- blfs(systemd版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/stab ...
- blfs(systemv版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/8.3/ ...
- PHP 执行命令时sudo权限的配置
PHP 执行命令时sudo权限的配置 1.先写一个PHP文件 <?php system('whoami'); 先看自己的apache2的用户是谁,下面是笔者的截图,笔者使用apche2的用户是w ...
- Linux用户配置sudo权限(visudo)
sudo的工作过程如下: 1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限 2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认 ...
- Linux 账号管理与 ACL 权限配置
要登陆 Linux 系统一定要有账号与口令才行,否则怎么登陆,您说是吧?不过, 不同的使用者应该要拥有不同的权限才行吧?我们还可以透过 user/group 的特殊权限配置, 来规范出不同的群组开发项 ...
- 05: zabbix 监控配置
目录:zabbix其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...
- CentOS学习笔记--账号管理与权限配置
Linux 的账号管理与权限配置 管理员的工作中,相当重要的一环就是『管理账号』啦! 使用者标识符: UID 与 GID 虽然我们登陆 Linux 主机的时候,输入的是我们的账号,但是其实 Linux ...
随机推荐
- Java架构师最关键三个思维转变方式,框架的合理运用
很久没有写思维的文章,特别是在写完思维的逻辑和思维的框架后,对于理论层面的自己也不太想写,但是对于实际案例层面的写起来又比较花时间,而且案例基本在IT专业领域不是所有人都能看明白. 我们前面写过思维的 ...
- NFS客户端挂载
关于NFS挂载#卸载: umount -fl /挂载名称#重新挂载:mount -t nfs -o rw,noac 10.8.16.11:/vx/SJOA-APP /挂载名称 #mount –v查看当 ...
- C# Command命令(行为型模式)+队列 实现事务,带异步命令重试机制和生命周期
一.简介 耦合是软件不能抵御变变化的根本性原因,不仅实体对象与实体对象之间有耦合关系(如创建性设计模式存在的原因),对象和行为之间也存在耦合关系. 二.实战 1.常规开发中,我们经常会在控制器中或者M ...
- Android动态添加Fragment
Android动态添加Fragment 效果图如下: 项目结构图如下: Fragment1: package com.demo.dongtaifragment; import android.app. ...
- JVM 监控,调优,调试
JVM监控工具 Java的安装包自带了很多优秀的工具,善用这些工具对于监控和调试Java程序非常有帮助.常用工具如下: jps 用途:jps用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启 ...
- 从零开始学 Web 之 CSS(二)文本、标签、特性
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...
- angular监听dom渲染完成,判断ng-repeat循环完成
一.前言 最近做了一个图片懒加载的小插件,功能需要dom渲染完成后,好获取那些需要懒加载的dom元素.那么问题来了,如果只是感知静态的dom用ready,onload都可以,但项目用的angular, ...
- Python程序每日一练习
问题一:做为Apple Store App独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用Python如何生成200个激活码(或者优惠券)? 简介:通用唯一识别码(英语:Unive ...
- jsonp请求
发起一个jsonp请求 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&q ...
- 【ichart】简单的统计图表ichart.js的使用
1.首先下载,点击下载 2.只需要这一个js,粘贴赋值到自己项目中即可. 3.引入js <script type="text/javascript" src=" ...