当机器成千上百台增加的时候,如果需要对机器内一台一台的使用密码或者密钥登录,也是一件痛苦的事情,今天分享下使用OpenLDAP实现一个帐号任何机器及应用都可登录。

一.OpenLDAP安装及配置

1.安装依赖包及软件安装

1
yum 
install 
-y openldap openldap-servers openldap-clients openldap-devel

2.配置文件配置

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
cp 
/usr/share/openldap-servers/slapd
.conf.obsolete 
/etc/openldap/slapd
.conf
cp 
/usr/share/openldap-servers/DB_CONFIG
.example 
/var/lib/ldap/DB_CONFIG 
cp 
/usr/share/doc/sudo-1
.8.6p3
/schema
.OpenLDAP  
/etc/openldap/schema/sudo
.schema
 
#修改/etc/openldap/slapd.conf文件
找到include         
/etc/openldap/schema/core
.schema在下面增加
include         
/etc/openldap/schema/sudo
.schema
 
#找到database        bdb修改下面的几行
database        bdb
suffix          
"dc=abc,dc=com"
checkpoint      1024 15
rootdn          
"cn=admin,dc=abc,dc=com"
rootpw          admin
loglevel        1
#说明:
    
database      bdb  说明使用Berkeley DB
    
suffix        
"dc=abc,dc=com"  
域名就是abc.com
    
checkpoint    1024 15 就是每1M或者每15分钟将缓存刷进磁盘
    
rootdn        
"cn=admin,db=abc,dc=com"  
管理员是adnin
    
rootpw        admin       管理员的密码就是admin
    
loglevel      1            日志级别是1
     
#日志级别
Any (-1, 0xffffffff) 
//
开启所有的dug 信息  
Trace (1, 0x1) 
//
跟踪trace 函数调用  
Packets (2, 0x2) 
//
与软件包的处理相关的dug 信息  
Args (4, 0x4) 
//
全面的debug 信息  
Conns (8, 0x8) 
//
链接数管理的相关信息  
BER (16, 0x10) 
//
记录包发送和接收的信息  
Filter (32, 0x20) 
//
记录过滤处理的过程  
Config (64, 0x40) 
//
记录配置文件的相关信息  
ACL (128, 0x80) 
//
记录访问控制列表的相关信息  
Stats (256, 0x100) 
//
记录链接、操作以及统计信息  
Stats2 (512, 0x200) 
//
记录向客户端响应的统计信息  
Shell (1024, 0x400) 
//
记录与shell 后端的通信信息  
Parse (2048, 0x800) 
//
记录条目的分析结果信息  
Sync (16384, 0x4000) 
//
记录数据同步资源消耗的信息  
None (32768, 0x8000) 
//
不记录  
 
#在文件最后增加如下,允许用户自行修改密码
access to attrs=shadowLastChange,userPassword
        
by self write
        
by * auth
access to *
        
by * 
read

3.配置OpenLDAP日志

1
2
echo 
"local4.*          /var/log/sldap.log" 
>>
/etc/rsyslog
.conf
/etc/init
.d
/rsyslog 
restart

4.初始化OpenLDAP

1
2
3
4
5
service slapd start
rm 
-rf 
/etc/openldap/slapd
.d/*
slaptest -f 
/etc/openldap/slapd
.conf -F 
/etc/openldap/slapd
.d 
chown 
-R ldap:ldap 
/etc/openldap/slapd
.d/
service slapd restart

5.检查服务

1
netstat 
-ntlup |
grep 
:389

二.迁移用户(将本地的用户和组迁移到OpenLDAP)

1.安装迁移工具

1
2
3
4
5
6
7
8
9
10
yum 
install 
migrationtools -y
cd 
/usr/share/migrationtools/
[root@kvm242 migrationtools]
# ls
migrate_aliases.pl              migrate_all_offline.sh  migrate_group.pl            migrate_profile.pl
migrate_all_netinfo_offline.sh  migrate_all_online.sh   migrate_hosts.pl            migrate_protocols.pl
migrate_all_netinfo_online.sh   migrate_automount.pl    migrate_netgroup_byhost.pl  migrate_rpc.pl
migrate_all_nis_offline.sh      migrate_base.pl         migrate_netgroup_byuser.pl  migrate_services.pl
migrate_all_nis_online.sh       migrate_common.ph       migrate_netgroup.pl         migrate_slapd_conf.pl
migrate_all_nisplus_offline.sh  migrate_common.ph.ori   migrate_networks.pl
migrate_all_nisplus_online.sh   migrate_fstab.pl        migrate_passwd.pl

2.配置迁移工具,修改migrate_common.ph 71、73行

1
2
3
4
$DEFAULT_MAIL_DOMAIN = 
"abc.com"
;
 
# Default base 
$DEFAULT_BASE = 
"dc=abc,dc=com"
;

3.导出用户,我这里只导出user1

1
2
3
4
5
6
7
8
9
10
11
12
13
cd 
/usr/share/migrationtools/
grep 
'user1' 
/etc/passwd 
passwd
.
in
grep 
'user1' 
/etc/group 
> group.
in
.
/migrate_base
.pl > 
/tmp/base
.ldif
.
/migrate_passwd
.pl  
passwd
.
in 
/tmp/passwd
.ldif
.
/migrate_group
.pl  group.
in 
/tmp/group
.ldif
#这里生成了3个OpenLDAP数据
/tmp/base
.ldif 
/tmp/passwd
.ldif 
/tmp/group
.ldif
 
导入数据:
ldapadd -x -D 
"cn=admin,dc=abc,dc=com" 
-W -f 
/tmp/base
.ldif
ldapadd -x -D 
"cn=admin,dc=abc,dc=com" 
-W -f 
/tmp/passwd
.ldif
ldapadd -x -D 
"cn=admin,dc=abc,dc=com" 
-W -f 
/tmp/group
.ldif

4.导入sudo基础库

vim /tmp/sudo.ldif

dn: ou=SUDOers,dc=abc,dc=com

objectClass: top

objectClass: organizationalUnit

description: SUDO Configuration Subtree

ou: SUDOers

dn: cn=defaults,ou=SUDOers,dc=abc,dc=com

objectClass: top

objectClass: sudoRole

cn: defaults

description: Default sudoOption's go here

sudoOption: visiblepw

sudoOption: always_set_home

sudoOption: env_reset

dn: cn=root,ou=SUDOers,dc=abc,dc=com

objectClass: top

objectClass: sudoRole

cn: root

sudoUser: root

sudoHost: ALL

sudoRunAsUser: ALL

sudoCommand: ALL

sudoOption: !visiblepw

sudoOption: always_set_home

sudoOption: env_reset

dn: cn=%wheel,ou=SUDOers,dc=abc,dc=com

objectClass: top

objectClass: sudoRole

cn: %wheel

sudoUser: %wheel

sudoHost: ALL

sudoRunAsUser: ALL

sudoCommand: ALL

sudoOption: !authenticate

sudoOption: !visiblepw

sudoOption: always_set_home

sudoOption: env_reset

sudoOption: requiretty

dn: cn=%confops,ou=SUDOers,dc=abc,dc=com

objectClass: top

objectClass: sudoRole

cn: %confops

sudoUser: %confops

sudoHost: ALL

sudoRunAsUser: ALL

sudoOption: !authenticate

sudoOption: !visiblepw

sudoOption: always_set_home

sudoOption: env_reset

sudoCommand: ALL

sudoCommand: !/bin/passwd

dn: cn=%confdev,ou=SUDOers,dc=abc,dc=com

objectClass: top

objectClass: sudoRole

cn: %confdev

sudoUser: %confdev

sudoHost: ALL

sudoRunAsUser: ALL

sudoOption: !authenticate

sudoOption: !visiblepw

sudoOption: always_set_home

sudoOption: env_reset

sudoCommand: /sbin/service

sudoCommand: !/bin/passwd

sudoCommand: /etc/init.d/tomcat

sudoCommand: /bin/kill

sudoCommand: /usr/bin/pkill

sudoCommand: /usr/bin/killall

sudoCommand: /etc/init.d/confservice

sudoCommand: /bin/su - app -s /bin/bash

sudoCommand: /bin/su - tomcat -s /bin/bash

dn: cn=%confqa,ou=SUDOers,dc=abc,dc=com

objectClass: top

objectClass: sudoRole

cn: %confqa

sudoUser: %confqa

sudoHost: ALL

sudoRunAsUser: ALL

sudoOption: !authenticate

sudoOption: !visiblepw

sudoOption: always_set_home

sudoOption: env_reset

sudoCommand: /sbin/service

sudoCommand: !/bin/passwd

sudoCommand: /etc/init.d/confservice

sudoCommand: /bin/kill

sudoCommand: /usr/bin/pkill

sudoCommand: /usr/bin/killall

sudoCommand: /bin/su - app -s /bin/bash

sudoCommand: /bin/su - tomcat -s /bin/bash

sudoCommand: /etc/init.d/tomcat

dn: cn=zabbix,ou=SUDOers,dc=abc,dc=com

objectClass: top

objectClass: sudoRole

cn: zabbix

sudoHost: ALL

sudoUser: zabbix

sudoOption: !authenticate

sudoOption: !visiblepw

sudoOption: always_set_home

sudoOption: env_reset

sudoRunAsUser: root

sudoCommand: !/bin/passwd

sudoCommand: /etc/init.d/tomcat

sudoCommand: /etc/init.d/confservice

sudoCommand: /usr/bin/nmap

sudoCommand: /usr/local/zabbix-ztc/bin/sudo-*

dn: cn=admin,ou=SUDOers,dc=abc,dc=com

objectClass: top

objectClass: sudoRole

cn: admin

sudoHost: ALL

sudoRunAsUser: ALL

sudoOption: !authenticate

sudoOption: !visiblepw

sudoOption: always_set_home

sudoOption: env_reset

sudoCommand: ALL

sudoCommand: !/bin/passwd

sudoUser: admin

导入sudo.ldif

1
ldapadd -x -D 
"cn=admin,dc=abc,dc=com" 
-W -f 
/tmp/sudo
.ldif

从上面可以看到会生成

SUDOers    (OU)

%confdev    (cn)

%confops    (cn)

%confqa    (cn)

%wheel     (cn)

admin     (cn)

defaults    (cn)

root      (cn)

zabbix    (cn)

因此只需要建立组confdev,然后将用户拉入confdev组即可有相应的权限,同理zabbix用户也有zabbix相应的权限

二.客户端部署

CentOS 6

1
2
3
4
5
6
yum -y 
install 
openldap openldap-clients nss-pam-ldapd pam_ldap python-simplejson 
sudo 
libselinux-python
echo 
"session required pam_mkhomedir.so skel=/etc/skel umask=0077" 
>> 
/etc/pam
.d
/system-auth
authconfig --savebackup=auth.bak
authconfig --enablemkhomedir --disableldaptls --enableldap --enableldapauth --ldapserver=ldap:
//192
.168.10.242 --ldapbasedn=
"dc=abc,dc=com"  
--update
echo 
-e 
"uri ldap://192.168.10.242\nSudoers_base ou=SUDOers,dc=abc,dc=com" 
/etc/sudo-ldap
.conf
echo 
"Sudoers: files ldap" 
>>  
/etc/nsswitch
.conf

CentOS 5

1
2
3
4
5
6
yum -y 
install 
openldap openldap-clients nss_ldap python-simplejson 
sudo 
libselinux-python
echo 
"session required pam_mkhomedir.so skel=/etc/skel umask=0077" 
>> 
/etc/pam
.d
/system-auth
authconfig --savebackup=auth.bak
authconfig --enableldap --enableldapauth --enablemkhomedir --ldapserver=192.168.10.242 --ldapbasedn=
"dc=abc,dc=com"  
--update
echo 
"Sudoers_base ou=SUDOers,dc=abc,dc=com" 
>> 
/etc/ldap
.conf
echo 
"Sudoers: files ldap" 
>> 
/etc/nsswitch
.conf