本文系统:Centos6.5_x64
ip:192.168.28.139
客户端:192.168.28.141
一、ldap的部署、用户信息的存储
二、利用ldap数据库用户登录其他主机
三、快速登录主机(无需输入密码)
推荐大家可以先了解下AD域的结构,一些概念性的东西,比如树、林、组织单位、资源等
openldap 可以看作是nis的升级,把他想象成资料库的一种就好了
一、ldap的部署、用户信息的存储
1、安装openldap
1
|
[root@master ~]
# yum install openldap openldap-devel openldap-servers openldap-clients -y
|
2、配置文件模版
1
|
[root@master ~]
# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
|
修改配置文件
1
2
3
4
5
6
7
|
[root@master ~]
# vim /etc/openldap/slapd.conf
26 pidfile
/var/run/openldap/slapd
.pid
27 argsfile
/var/run/openldap/slapd
.args
28 loglevel 1
115 suffix
"dc=lansgg,dc=com"
117 rootdn
"cn=admin,dc=lansgg,dc=com"
121 rootpw adminpw
|
这里管理员的密码使用了明文,也可以使用加密形式,方法如下:
1
2
3
4
|
[root@master ~]
# slappasswd
New password:
Re-enter new password:
{SSHA}7EJGErpaeX3Zd6rxfxVzNVwSm2UC1e
/T
|
将密文串替换成adminpw即可;
你也可以指定加密方式:
1
2
3
4
|
[root@master ~]
# slappasswd -h {md5}
New password:
Re-enter new password:
{MD5}cOdqFdoA5jAa3nGMyUFveQ==
|
loglevel表示日志级别:这里为1,表示所有日志;一般正式环境配置256即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
-1 记录所有的信息
0 不记录debug
1 跟踪功能调用的信息
2 包处理的debug信息
4 丰富的debug信息
8 连接管理信息
16 包的收发信息
32 搜索过滤的处理过程
64 配置文件的处理过程
128 访问控制列表处理过程
256 连接、操作及其结果的统计数据
512 向客户端返回的结果的统计信息
1024 与shell后端的通信信息
2048 显示记录条目的分析信息
4096 数据库缓存处理信息
8192 数据库索引
16384 从服务器数据同步资源消耗处理信息
|
配置ldap日志输出
1
2
3
4
5
6
7
8
9
|
[root@master ~]
# vim /etc/rsyslog.conf
## ldap
local4.*
/var/log/ldap
.log
[root@master ~]
# /etc/init.d/rsyslog restart
[root@master ~]
# /etc/init.d/slapd start
正在启动 slapd: [确定]
[root@master ~]
# netstat -natpul |grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 53482
/slapd
tcp 0 0 :::389 :::* LISTEN 53482
/slapd
|
拷贝数据文件
1
2
3
|
[root@master openldap]
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@master ~]
# chown ldap:ldap /var/lib/ldap/DB_CONFIG
[root@master openldap]
# /etc/init.d/slapd restart
|
推荐步骤:
1
2
|
[root@master ~]
# rm /etc/openldap/slapd.d/*
/etc/init
.d
/slapd
restart
|
没有这步,当下面导入数据的时候会报错,(49)
测试下配置
1
2
|
[root@master openldap]
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config
file
testing succeeded
|
3、数据录入
服务器正常运作后,就可以录入信息了。信息的录入有三种方法,一种是手工录入,一种是.ldif文件格式录入,一种是脚本自动录入。
1>、手动录入:
建立DN:( Distinguished Name,每个叶子结点到根的路径就是DN)
1
2
3
4
5
6
7
8
9
|
[root@master openldap]
# ldapadd -x -D 'cn=admin,dc=lansgg,dc=com' -W
Enter LDAP Password:
dn:
dc
=lansgg,
dc
=com
objectClass: dcObject
objectClass: organization
dc
: lansgg
o: Corporation
description: d Corporation
adding new entry
"dc=lansgg,dc=com"
#结束以ctrl+d
|
建立RDN:(Relative Distinguished Name,叶子结点本身的名字是RDN)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@master openldap]
# ldapadd -x -D 'cn=admin,dc=lansgg,dc=com' -W
Enter LDAP Password:
dn: uid=qq,
dc
=lansgg,
dc
=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: qq
cn: qq
sn: qq
telephoneNumber: 138888888
description: openldap
test
telexNumber: tex-8888888
street: my street
postOfficeBox: postofficebox
displayName: qqdisplay
homePhone: home1111111
mobile: mobile99999
mail:qq@qq.com
adding new entry
"uid=qq,dc=lansgg,dc=com"
|
手动已经录入,进行查看:
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
|
[root@master ~]
# ldapsearch -x -b 'dc=lansgg,dc=com' |more
# extended LDIF
#
# LDAPv3
# base <dc=lansgg,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# lansgg.com
dn:
dc
=lansgg,
dc
=com
objectClass: dcObject
objectClass: organization
dc
: lansgg
o: Corporation
description: d Corporation
# qq, lansgg.com
dn: uid=qq,
dc
=lansgg,
dc
=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: qq
cn: qq
sn: qq
telephoneNumber: 138888888
description: openldap
test
telexNumber: tex-8888888
street: my street
postOfficeBox: postofficebox
displayName: qqdisplay
homePhone: home1111111
mobile: mobile99999
mail: qq@qq.com
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries:
|
2>、文件方式:
这里将系统帐号导出成ldif文件形式,使用MigrationTools工具
The MigrationTools are a set of Perl scripts for migrating users, groups, aliases, hosts, netgroups, networks, protocols, RPCs, and services from existing nameservices (flat files, NIS, and NetInfo) to LDAP.
1
2
3
4
5
6
7
8
|
yum -y
install
migrationtools
cd
/usr/share/migrationtools/
[root@master migrationtools]
# vim migrate_common.ph
70
# Default DNS domain
71 $DEFAULT_MAIL_DOMAIN =
"lansgg.com"
;
72
73
# Default base
74 $DEFAULT_BASE =
"dc=lansgg,dc=com"
;
|
导出:
1
2
3
|
.
/migrate_base
.pl >
/tmp/base
.ldif
.
/migrate_passwd
.pl
/etc/passwd
>
/etc/passwd
.ldif
.
/migrate_group
.pl
/etc/group
>
/etc/group
.ldif
|
ldif文件导入ldap:
1
2
3
|
ldapadd -x -w adminpw -D
'cn=admin,dc=lansgg,dc=com'
-f
/tmp/base
.ldif
ldapadd -x -w adminpw -D
'cn=admin,dc=lansgg,dc=com'
-f
/tmp/passwd
.ldif
ldapadd -x -w adminpw -D
'cn=admin,dc=lansgg,dc=com'
-f
/tmp/group
.ldif
|
查看导入的数据:
1
|
[root@master ~]
# ldapsearch -x -b 'dc=lansgg,dc=com'
|
二、利用ldap数据库用户登录其他主机
意思就是客户端的登录帐号存储于ldap Server端;
客户端: 安装ldap客户端
1
|
[root@master ~]
# yum -y install openldap openldap-clients nss-pam-ldapd pam_ldap
|
增加BIND策略,避免LDAP无法连接时无法开机
1
|
echo
"bind_policy soft"
>>
/etc/openldap/ldap
.conf
|
自动建立主目录:
PAM提供了一个pam_mkhomedir.so的模块,当执行这个模块时,它会检查PAM客户端用户的主目录是否存在,如果不存在则自动建立。
修改/etc/pam.d/login,在pam_selinux.so下面添加一行。
1
|
session required pam_mkhomedir.so skel=
/etc/skel/
umask
=0022
|
该方法特别适合使用网络账号的服务器,如使用NIS,LDAP等的域账号
也有人是这么写的:echo "session required pam_mkhomedir.so skel=/etc/skel umask=0077" >> /etc/pam.d/system-auth
客户端认证设置:
1.交互式配置:
1
|
authconfig-tui
|
2.命令行配置:
示例:authconfig --enablemkhomedir --disableldaptls --enableldap --enableldapauth --ldapserver=ldap://192.168.28.139,ldap://10.84.126.150,ldap://192.168.200.10 --ldapbasedn="ou=Common Linux servers,dc=lansgg,dc=org" --update
这里配置为:
1
2
3
4
|
[root@master pam.d]
# authconfig --enableldap --enableldapauth --enablemkhomedir --enableforcelegacy --disablesssd --disablesssdauth --ldapserver=192.168.28.139 --ldapbasedn="dc=lansgg,dc=com" --update
正在启动 nslcd: [确定]
正在启动 oddjobd: [确定]
[root@master pam.d]
#
|
在服务端新增个测试帐号:
1
2
|
useradd
tom
echo
"tom"
|
passwd
--stdin tom
|
然后导出,截取出刚新增的帐号信息,编辑为新的ldif文件,我的个人、组信息分别截取到c.ldif,g.ldif;然后导入(我个人是这样的,省的写ldif文件)
1
2
|
/usr/share/migrationtools/migrate_passwd
.pl
/etc/passwd
>
/tmp/mod
.ldif
/usr/share/migrationtools/migrate_group
.pl
/etc/group
-f gol.ldif
|
这是我截取的tom帐号信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@master ~]
# cat c.ldif
dn: uid=tom,ou=People,
dc
=lansgg,
dc
=com
uid: tom
cn: tom
objectClass: account
objectClass: posixAccount
objectClass:
top
objectClass: shadowAccount
userPassword: {crypt}$6$SeOQGWMf$
/4Zw96
.1qB20Mx1xY2693u7.ct9ThfA5NdEaghtohy4ibaomKBisivPeT02sNR0LRnn6BmBPF8N06I
/V8mnPk
.
shadowLastChange: 16307
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell:
/bin/bash
uidNumber: 502
gidNumber: 502
homeDirectory:
/home/tom
[root@master ~]
# cat g.ldif
dn: cn=tom,ou=Group,
dc
=lansgg,
dc
=com
objectClass: posixGroup
objectClass:
top
cn: tom
userPassword: {crypt}x
gidNumber: 502
|
进行导入:
1
2
3
|
[root@master ~]
# ldapadd -x -D "cn=admin,dc=lansgg,dc=com" -w adminpw -f c.ldif
[root@master ~]
# ldapadd -x -w adminpw -D 'cn=admin,dc=lansgg,dc=com' -f g.ldif
adding new entry "cn=tom,ou=Group,
dc
=lansgg,
dc
=com
|
在服务器使用tom登录客户端(客户端是没有这个帐号的)
1
2
3
4
|
[root@master ~]
# ssh tom@192.168.28.143
reverse mapping checking getaddrinfo
for
bogon [192.168.28.143] failed - POSSIBLE BREAK-IN ATTEMPT!
tom@192.168.28.143's password:
Last login: Sat Aug 23 22:58:17 2014 from 192.168.28.139
|
可以看到正确登录(需要输入密码)
三、快速登录主机(无需输入密码)
1
2
3
4
5
6
7
|
cp
/usr/share/doc/sudo-1
.8.6p3
/schema
.OpenLDAP
/etc/openldap/schema/sudo
.schema
vim
/etc/openldap/slapd
.conf
18 include
/etc/openldap/schema/sudo
.schema
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/*
/etc/init
.d
/slapd
restart
|
编辑sudo权限的ldif文件
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
|
[root@master ~]
# vim sudo.ldif
dn: ou=sudoers,
dc
=lansgg,
dc
=com
objectClass:
top
objectClass: organizationalUnit
ou: sudoers
dn: cn=defaults,ou=sudoers,
dc
=lansgg,
dc
=com
objectClass:
top
objectClass: sudoRole
cn: defaults
sudoOption: !visiblepw
sudoOption: always_set_home
sudoOption: env_reset
sudoOption: requiretty
dn: cn=tom,ou=sudoers,
dc
=lansgg,
dc
=com
objectClass:
top
objectClass: sudoRole
cn: tom
sudoCommand: ALL
sudoHost: ALL
sudoOption: !authenticate
sudoRunAsUser: ALL
sudoUser: tom
|
导入:
1
2
3
4
5
6
|
[root@master ~]
# ldapadd -x -w adminpw -D "cn=admin,dc=lansgg,dc=com" -f sudo.ldif
adding new entry
"ou=sudoers,dc=lansgg,dc=com"
adding new entry
"cn=defaults,ou=sudoers,dc=lansgg,dc=com"
adding new entry
"cn=tom,ou=sudoers,dc=lansgg,dc=com"
|
客户端编辑:
Nsswitch.conf文件通常控制着用户(在passwd中)、口令(在shadow中)、主机IP和组信息(在group中)的搜索。下面的列表描述了nsswitch.conf文件控制搜索的大多数信息(Info项)的类型。
1
2
3
4
5
6
7
|
vim
/etc/sudo-ldap
.conf
55
#uri ldap://ldapserver
56 uri ldap:
//192
.168.28.139
63
#sudoers_base ou=SUDOers,dc=example,dc=com
64 sudoers_base ou=sudoers,
dc
=lansgg,
dc
=com
vim
/etc/nsswitch
.conf
64 sudoers: ldap files
|
服务器测试:登录客户端,然后成功sudo (无需密码)
1
2
3
4
5
6
|
[root@master ~]
# ssh tom@192.168.28.143
reverse mapping checking getaddrinfo
for
bogon [192.168.28.143] failed - POSSIBLE BREAK-IN ATTEMPT!
tom@192.168.28.143's password:
Last login: Sat Aug 23 23:15:27 2014 from 192.168.28.150
[tom@c1 ~]$
sudo
su
[root@c1 tom]
#
|
测试成功~
管理工具也有很多,比如ldapadmin
本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1544951