正常在企业的环境中,会遇到账户统一管理的事情,当手下就不几台服务器时在每个机器上都创建一遍好像也没多大事事情,但当人经常更换,或者服务器达到上百台的时候这个账号的管理将会是噩梦,今天就来一起安装OpenLdap来达到网络统一账号管理和验证的目的。

什么是LDAP?

LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议。目录是一个特殊的数据库,它的数据经常被查询,但是不经常更新。其专门针对读取、浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。比如 DNS 协议便是一种最被广泛使用的目录服务。

LDAP 中的信息按照目录信息树结构组织,树中的一个节点称之为条目(Entry),条目包含了该节点的属性及属性值。条目都可以通过识别名 dn 来全局的唯一确定1,可以类比于关系型数据库中的主键。比如 dn 为 uid=teddy,ou=People,dc=ethercap,dc=com 的条目表示在组织中一个名字叫做 teddy 的员工,其中 uid=teddy 也被称作相对区别名 rdn。

属性名 是否必填 描述
cn 该条目被人所熟知的通用名(Common Name)
sn 该条目的姓氏
o 该条目所属的组织名(Organization Name)
mobile 该条目的手机号码
description 该条目的描述信息

下面是一个典型的 LDAP 目录树结构,其中每个节点表示一个条目。接下来将按照这个结构来配置一个 LDAP 服务。

LDAP server搭建

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//安装软件
yum -y install openldap openldap-servers openldap-clients

//配置/etc/openldap/slapd.conf
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
database bdb
suffix "dc=hostname,dc=com"
rootdn "cn=ffff,dc=hostname,dc=com"
rootpw esdfdsf


//数据会存放到/var/openldap-data/ 中
//id2entry.bdb 一开始会没有,使用JXplorer即可自动生成这个文件

// 记得/var/openldap-data/DB_CONFIG
cp /usr/share/openldap-servers/DB_CONFIG.example /var/openldap-data/DB_CONFIG

//加入到service管理体系中
systemctl enable slapd
systemctl start slapd

//导入用户组
dn: dc=ethercap,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Server World
dc: ethercap

dn: ou=people,dc=ethercap,dc=com
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=ethercap,dc=com
objectClass: organizationalUnit
ou: groups

ldapadd -Y EXTERNAL -H ldapi:/// -f front.ldif

//添加用户
cat /etc/passwd | grep yk > /tmp/passwd.in
/usr/share/migrationtools/migrate_passwd.pl /tmp/passwd.in > /tmp/passwd.ldif

//发现dc不对,可以通过 修改
vi /usr/share/migrationtools/migrate_common.ph
$DEFAULT_BASE = "dc=ethercap,dc=com";

//查看生成文件,没什么毛病
dn: uid=yk,ou=People,dc=ethercap,dc=com
uid: yk
cn: yk
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$eZc1Mzdw$HBvCDOC1KEWIO699dLCNl1
shadowLastChange: 17722
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/yk

//导入用户到ldap
ldapadd -x -D "cn=admin,dc=ethercap,dc=com" -W -f /tmp/passwd.ldif

导入后的效果

LdapClient 客户端配置

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
//安装客户端必备软件
yum install -y oddjob-mkhomedir oddjob openssh-ldap

//开启相关配置选项 /etc/sysconfig/authconfig
USELDAP=yes
USELDAPAUTH=yes
USEMD5=no
USESHADOW=yes
USELOCAUTHORIZE=yes

//配置ldap /etc/openldap/ldap.conf
URI ldap://URL/
BASE dc=ethercap,dc=com
BINDDN cn=admins

//配置centos验证方式/etc/nsswitch.conf文件,修改为ldap验证
passwd: files ldap
shadow: files ldap
group: files ldap

//加入到service管理
chkconfig oddjobd on

//启动服务
service messagebus start
service oddjobd start

//启用自动创建目录
authconfig --enablemkhomedir --update

//修改ssdh加入命令 两条都得有缺一不可!
AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper
AuthorizedKeysCommandUser root

//手动添加/etc/pam.d/password-auth和system-auth
session optional pam_oddjob_mkhomedir.so umask=0077

//重启服务 生效配置
service nslcd restart
service sshd restart

采坑总结,自动家目录创建依靠pam_oddjob_mkhomedir.so来实现,前期,使用之前确保oddjobd 是运行状态,否则报错!

1
2
3
4
5
6
7
8
yk@dev:~$ service oddjobd status
Redirecting to /bin/systemctl status oddjobd.service
● oddjobd.service - privileged operations for unprivileged applications
Loaded: loaded (/usr/lib/systemd/system/oddjobd.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2018-07-11 17:37:39 CST; 4h 59min ago
Main PID: 15108 (oddjobd)
CGroup: /system.slice/oddjobd.service
└─15108 /usr/sbin/oddjobd -n -p /var/run/oddjobd.pid -t 300

修改sshd_config重启后报错,单纯查看状态无法知道错误信息,可以通过下面的命令查看

1
`which sshd` -D -d