当机器成千上百台增加的时候,如果需要对机器内一台一台的使用密码或者密钥登录,也是一件痛苦的事情,今天分享下使用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
|