0 为什么用,区别在哪, 我们的主要目的是什么?
1 安装在哪?
2 相关模块, 数据流如何联动
3 初始配置,配置文件, 参数详解
4 平时的使用,如何使用,(为什么要 添加 最初的那个, 不添加又如何)
5 可能的配置, for future
why, in_lico
用户管理服务
可以这样讲:市面上只要你能够想像得到的所有工具软件,全部都支持 LDAP协议。比如说你公司要安装一个项目管理工具,那么这个工具几乎必然支持 LDAP协议,你公司要安装一个 bug管理工具,这工具必然也支持 LDAP协议,你公司要安装一套软件版本管理工具,这工具也必然支持 LDAP协议。 LDAP协议的好处就是你公司的所有员工在所有这些工具里共享同一套用户名和密码,来人的时候新增一个用户就能自动访问所有系统,走人的时候一键删除就取消了他对所有系统的访问权限,这就是 LDAP。
有些领域并不像前端世界那么潮那么性感,但是缺了这个环节又总觉得很别扭。如果深入到运维的世界,你会发现大部分工具还活在上个世纪,产品设计完全反人类,比如 cn, dc, dn, ou这样的命名方式,如果不钻研个一天两天,鬼知道它在说什么,比如说 dns, dns是什么鬼?域名吗?不是,它只是某个懒惰的工程师起了 dn这么一个缩写,再加一个复数,就成了 dns,和域名服务器没有任何关系; cn是什么?中国的缩写?你想多了,这和中国没有任何关系。经过一系列这样疯狂的洗脑之后,你才能逐渐明白 LDAP到底想干什么.( latest_tutorial_2018)
树形用户目录,树形存储结构,对组织管理建模符合直觉。
Lightweight Directory Access Protocol, 来自 x.500 协议族,更轻量,更简单, 核心就是 DIT (Directory Information Tree)
DN 的两种设置
ldap的信息模型
【重要部分】
LDAP的信息模型是建立在”条目”(entries)的基础上。一个条目是一些属性的集合,并且具有一个全局唯一的”可区分名称”DN,一个条目可以通过DN来引用。每一个条目的属性具有一个类型和一个或者多个值。类型通常是容易记忆的名称,比如”cn”是通用名称(common name) ,或者”mail”是电子邮件地址。条目的值的语法取决于属性类型。比如,cn属性可能具有一个值”Babs Jensen” 。一个mail属性可能包含”bbs@kevin.com” 。一个jpegphoto属性可能包含一幅JPEG(二进制)格式的图片。
LDAP的objectClass
LDAP通过属性objectClass来控制哪一个属性必须出现或允许出现在一个条目中,它的值决定了该条目必须遵守的模式
规则。可以理解为关系数据库的表结构。接下来会用到的objectClass有
objectClass | 含义 |
---|---|
olcGlobal | 全局配置文件类型, 主要是cn=config.ldif 的配置项 |
top | 顶层的对象 |
organization | 组织,比如公司名称,顶层的对象 |
organizationalUnit | 重要, 一个目录节点,通常是group,或者部门这样的含义 |
inetOrgPerson | 重要, 我们真正的用户节点类型,person类型, 叶子节点 |
groupOfNames | 重要, 分组的group类型,标记一个group节点 |
olcModuleList | 配置模块的对象 |
LDAP常用关键字列表
ldap的entry是由各种字段构成,可以理解为关系数据库的字段。
关键字 | 英文全称 | 含义 |
---|---|---|
dc | Domain Component | 域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com |
uid | User Id | 用户ID,如“tom” |
ou | Organization Unit | 组织单位,类似于Linux文件系统中的子目录,它是一个容器对象,组织单位可以包含其他各种对象(包括其他组织单元),如“market” |
cn | Common Name | 公共名称,如“Thomas Johansson” |
sn | Surname | 姓,如“Johansson” |
dn | Distinguished Name | 惟一辨别名,类似于Linux文件系统中的绝对路径,每个对象都有一个惟一的名称,如“uid= tom,ou=market,dc=example,dc=com”,在一个目录树中DN总是惟一的 |
rdn | Relative dn | 相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson” |
c | Country | 国家,如“CN”或“US”等。 |
o | Organization | 组织名,如“Example, Inc.” |
跨平台, 静态数据快速查询, 在更新数据上不擅长.
基于 pull ,push 复制信息技术.
LDAP V3支持 SASL,SSL,TLS,
C/S 架构, server端 存储树, Client 提供操作工具,
LDAP 支持 TCP/IP , 分布式部署.
DIT Directory Information Tree —-数据库
Entry ——表的记录 (dn 的机构. 是 属性-值 的集合. )
同类产品
联想用的就是 https://authing.cn/ , 同样是一个集成了 ldap 的服务。
微软的 Active Directory
IBM 的 DSS (Directory ans Security Server)
Novell 的NDS (Novell Directory Service)
Netscape LDAP server
how does it work?
as a database
where
dnf -y install openldap-servers
[root@localhost openldap]# pwd
/etc/openldap
[root@localhost openldap]# ls
cacerts certs check_password.conf ldap.conf schema slapd.conf slapd.conf.origin slapd.d
[root@localhost openldap]# ls slapd.d/cn\=config
cn=config/ cn=config.ldif
[root@localhost openldap]# ls slapd.d/
'cn=config' 'cn=config.ldif'
[root@localhost openldap]# ls schema/
collective.ldif core.schema dyngroup.ldif java.schema openldap.ldif ppolicy.schema
collective.schema cosine.ldif dyngroup.schema misc.ldif openldap.schema
corba.ldif cosine.schema inetorgperson.ldif misc.schema pmi.ldif
corba.schema duaconf.ldif inetorgperson.schema nis.ldif pmi.schema
core.ldif duaconf.schema java.ldif nis.schema ppolicy.ldif
[root@localhost openldap]# rpm -ql openldap-servers | grep bin
/usr/sbin/slapacl
/usr/sbin/slapadd
/usr/sbin/slapauth
/usr/sbin/slapcat
/usr/sbin/slapd
/usr/sbin/slapdn
/usr/sbin/slapindex
/usr/sbin/slappasswd
/usr/sbin/slapschema
/usr/sbin/slaptest
- slapacl - verify access to attributes by inspecting the configuration of a DIT
- slapadd - add LDAP entries to a database - STOP SLAPD FIRST
- slapauth - verify SASL data against a DIT
- slapcat - export an LDIF from an LDAP database - STOP SLAPD FIRST
- slapd - stand-alone LDAP daemon
- slapdn - verify a DN against a DIT configuration
- slapindex - re-index an LDAP database - STOP SLAPD FIRST
- slappasswd - generate password
- slaptest - verify a slapd.conf file or a cn=config directory (slapd.d)
.
|-- certs
| |-- cert8.db
| |-- key3.db
| |-- password
| `-- secmod.db
|-- check_password.conf
|-- ldap.conf
|-- schema
| |-- collective.ldif
| |-- collective.schema
| |-- corba.ldif
| |-- corba.schema
| |-- core.ldif
| |-- core.schema
| |-- cosine.ldif
| |-- cosine.schema
| |-- duaconf.ldif
| |-- duaconf.schema
| |-- dyngroup.ldif
| |-- dyngroup.schema
| |-- inetorgperson.ldif
| |-- inetorgperson.schema
| |-- java.ldif
| |-- java.schema
| |-- misc.ldif
| |-- misc.schema
| |-- nis.ldif
| |-- nis.schema
| |-- openldap.ldif
| |-- openldap.schema
| |-- pmi.ldif
| |-- pmi.schema
| |-- ppolicy.ldif
| `-- ppolicy.schema
`-- slapd.d
|-- cn=config
| |-- cn=schema
| | `-- cn={0}core.ldif
| |-- cn=schema.ldif
| |-- olcDatabase={-1}frontend.ldif
| |-- olcDatabase={0}config.ldif
| |-- olcDatabase={1}monitor.ldif
| `-- olcDatabase={2}hdb.ldif
`-- cn=config.ldif
配置
配置
这些都在 /etc/openldap/slapd.conf 里配置。 可以看到是如下的 tree 结构。
针对 module,我们可以查看说明,不同的功能需要对应不同的 module。
module:
# Load dynamic backend modules
# - modulepath is architecture dependent value (32/64-bit system)
# - back_sql.la overlay requires openldap-server-sql package
# - dyngroup.la and dynlist.la cannot be used at the same time
modulepath /usr/lib/openldap
modulepath /usr/lib64/openldap
moduleload back_mdb.la
moduleload ppolicy.la
scheme:
he cn=schema entry holds all of the schema definitions that are hard-coded in slapd. As such, the values in this entry are generated by slapd so no schema values need to be provided in the config file. The entry must still be defined though, to serve as a base for the user-defined schema to add in underneath. Schema entries must have the olcSchemaConfig objectClass.
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
database:
- 示例一
以下内容都是属于 database 的,
```bash
database mdb ## 指定后端数据库
suffix “n2=lenovo,n1=gongsi”
suffix “dc=hpc,dc=com” ## 所有存在这个数据库里的信息 entry 后缀. checkpoint 1024 15 rootdn “uid=admin,dc=hpc,dc=com” ## rootdn 不收任何限制,能对这个数据库操作. rootpw {SSHA}1eNXf93MbfhzA/8nb0Syj6TBVHccCYQr
- 示例二
你也可以配置多个 database;
```bash
5. # BDB definition for the example.com
6. database bdb
7. suffix "dc=example,dc=com"
8. directory /usr/local/var/openldap-data
9. rootdn "cn=Manager,dc=example,dc=com"
10. rootpw secret
11. # indexed attribute definitions
12. index uid pres,eq
13. index cn,sn pres,eq,approx,sub
14. index objectClass eq
15. # database access control definitions
16. access to attrs=userPassword
17. by self write
18. by anonymous auth
19. by dn.base="cn=Admin,dc=example,dc=com" write
20. by * none
21. access to *
22. by self write
23. by dn.base="cn=Admin,dc=example,dc=com" write
24. by * read
33. # BDB definition for example.net
34. database bdb
35. suffix "dc=example,dc=net"
36. directory /usr/local/var/openldap-data-net
37. rootdn "cn=Manager,dc=example,dc=com"
38. index objectClass eq
39. access to * by users read
lico使用之配合认证
libuser 负责添加用户 luseradd (不一定要 在master Node)libuser official website
数据存到 openldap-server
nscld 负责 连接 server, 数据库里获取 user, group, passwd 等信息, 可以在 其他地方认证 nslcd : nss-pam-ldapd (officai website)
ldap-client 是独立的, 它可以对 ldap-server 里的数据 update, del, add, search 等操作。 更多是 search。
使用
## 启动
systemctl start slapd
## 开机启动
systemctl enable slapd
## 添加防火墙允许
firewall-cmd --add-service=ldap --permanent
firewall-cmd --reload
如果你搜索 OpenLDAP的安装指南,很不幸地告诉你,网上不管中文的英文的, 90%都是错的,它们都还活在上个世纪,它们会告诉你要去修改一个叫做 slapd.conf的文件,基本上看到这里,你就不用往下看了,这个文件早就被抛弃,新版的 OpenLDAP里根本就没有这个文件!取而代之的是 slapd.d的文件夹,然后另一部分教程会告诉你,让你修改这个文件夹下的某一个 ldif文件,看到这里,你也不用往下看了,你又看到了伪教程,因为这个文件夹下的所有文件的第一行都明确地写着:『 这是一个自动生成的文件,不要修改它!』你修改了它之后,它的 md5校验值会匹配不上,造成更多的问题。你应该用 ldapmodify来修改这个文件,而关于 ldapmodify的教程,更是累到吐血.
ldap主要命令有ldapadd, ldapmodify, ldapsearch. 我们用到的操作项有
option | 含义 |
---|---|
-H | ldap server地址, 可以是ldap://192.168.12.18:389 表示tcp, 可以是ldap:/// 表示本地的tcp, 可以是ldapi:/// 本地unix socket连接 |
-x | 启用简单认证,通过-D dn -w 密码的方式认证 |
-f | 指定要修改的文件 |
-a | 使用ldapmodify增加一个entry的时候等同于ldapadd |
-b | basedn 根目录, 将在此目录下查询 |
-Y EXTERNAL | 本地执行,修改配置文件,比如basedn, rootdn,rootpw,acl, module等信息 |
ldif文件
LDIF(LDAP Data Interchanged Format)的轻量级目录访问协议数据交换格式的简称,是存储LDAP 配置信息及目录内容的标准文本文件格式,之所以使用文本文件来存储这些信息是为了方便读取和修改,这也是其他大多数服务配置文件所采取的格式。通常用来交换数据并在OpenLDAP服务器之间互相交换数据,并且可以通过LDIF 实现数据文件的导入、导出以及数据文件的添加、修改、重命名等操作,这些信息需要按照LDAP 中schema 的规范进行操作,并会接受schema 的检查,如果不符合OpenLDAP schema 规范要求,则会提示相关语法错误。
LDIF 文件特点
LDIF 文件每行的结尾不允许有空格或者制表符。
LDIF 文件允许相关属性可以重复赋值并使用。
LDIF 文件以.ldif 结尾命名。
LDIF 文件中以#号开头的一行为注释,可以作为解释使用。
LDIF 文件所有的赋值方式为:属性:[空格]属性值。
LDIF 文件通过空行来定义一个条目,空格前为一个条目,空格后为另一个条目的开始。
LDIF 语法格式
比如我们添加数据库的内容,我们将加入如下内容:
- 一个叫做People的节点(用来存放users)
- 一个叫做Group的节点(用来存放groups)
- 一个组叫做develop
- 一个用户叫做huihui
创建下面的LDIF文件,并叫做add_content.ldif:
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups
dn: cn=develop,ou=Groups,dc=example,dc=com
objectClass: posixGroup
cn: develop
gidNumber: 5000
dn: uid=huihui,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
uid: huihui
sn: hui
givenName: huihui
cn: hui
uidNumber: 1000
gidNumber: 500
userPassword: 123456
loginShell: /bin/sh
homeDirectory: /home/users/huihui
tips:在你的目录中的uidNumber和gidNumber的值不与本地值冲突是很重要的。使用比较高的数值范围,比如从500开始。通过在ldap中设置较高的uid和gid值,允许你更容易地控制本地用户和ldap用户。
添加内容:
$ ldapadd -x -D cn=admin,dc=example,dc=com -w 123456 -f add_content.ldif
Enter LDAP Password: ********
adding new entry "ou=People,dc=example,dc=com"
adding new entry "ou=Groups,dc=example,dc=com"
adding new entry "cn=develop,ou=Groups,dc=example,dc=com"
adding new entry "uid=huihui,ou=People,dc=example,dc=com"
我们检查一下看看存储的数据是否正确:
$ ldapsearch -x -LLL -b dc=shannonai,dc=com 'uid=huihui'
dn: uid=huihui,ou=People,dc=shannonai,dc=com
uid: huihui
sn: hui
givenName: huihui
cn: huihui
uidNumber: 1000
gidNumber: 500
loginShell: /bin/bash
homeDirectory: /home/huihui
objectClass: inetOrgPerson
objectClass: posixAccount
slapadd
cat > lico.ldif << EOF
dn: dc=hpc,dc=com
dc: hpc
objectClass: top
objectClass: domain
dn: uid=admin,dc=hpc,dc=com
uid: admin
objectClass: top
objectClass: account
dn: ou=People,dc=hpc,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=hpc,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
EOF
slapadd -v -l ./lico.ldif -f /etc/openldap/slapd.conf -b "dc=hpc,dc=com" -wtest
ldapsearch -x -b 'dc=hpc,dc=com' '(objectClass=*)'
ldapmodify
- ldapmodify 更新命令, -H指定host,这里
ldapi:///
表示IPC (Unix-domain socket)协议, -f指定变更的内容。 命令文档: http://man7.org/linux/man-pages/man1/ldapmodify.1.html ```bash
cat > commongroup.sh << EOF dn: cn=g-users,ou=Group,dc=demo,dc=com objectClass: groupOfNames cn: g-users member: cn=ryan.miao,ou=后台组,ou=研发部门,ou=People,dc=demo,dc=com member: cn=hr-ryan,ou=HR,ou=People,dc=demo,dc=com EOF
我们来创建一个common group, 表示所有人都应该在的一个group。
ldapmodify -a -H ldap://172.17.0.2:389 -D “cn=admin,dc=demo,dc=com” -w admin -f commongroup.sh
创建addUserToGroup.sh, 把用户加入到g-users这个group, 以后所有人加入的默认group
cat > addUserToGroup.sh << EOF dn: cn=g-users,ou=Group,dc=demo,dc=com changetype: modify add: member member: cn=fang.huang,ou=HR,ou=People,dc=demo,dc=com member: cn=hr-ryan,ou=HR,ou=People,dc=demo,dc=com member: cn=someone,ou=后台组,ou=研发部门,ou=People,dc=demo,dc=com member: cn=tester.miao,ou=测试组,ou=研发部门,ou=People,dc=demo,dc=com EOF
执行
ldapmodify -H ldap:/// -x -D cn=admin,dc=demo,dc=com -w admin -f addUserToGroup.sh
查看 ldapsearch
[root@40e6bf0b50dc data]# ldapsearch -H ldap:/// -D cn=admin,dc=demo,dc=com -w admin -b dc=demo,dc=com -s sub “objectClass=groupOfNames”
g-admin, Group, demo.com
dn: cn=g-admin,ou=Group,dc=demo,dc=com objectClass: groupOfNames cn: g-admin member:: Y249cnlhbi5taWFvLG91PeWQjuWPsOe7hCxvdT3noJTlj5Hpg6jpl6gsb3U9UGVvcGxlL GRjPWRlbW8sZGM9Y29t member: cn=hr-ryan,ou=HR,ou=People,dc=demo,dc=com
g-users, Group, demo.com
dn: cn=g-users,ou=Group,dc=demo,dc=com objectClass: groupOfNames cn: g-users member:: Y249cnlhbi5taWFvLG91PeWQjuWPsOe7hCxvdT3noJTlj5Hpg6jpl6gsb3U9UGVvcGxlL GRjPWRlbW8sZGM9Y29t member: cn=hr-ryan,ou=HR,ou=People,dc=demo,dc=com member: cn=fang.huang,ou=HR,ou=People,dc=demo,dc=com member: cn=hr-miao,ou=HR,ou=People,dc=demo,dc=com member:: Y249c29tZW9uZSxvdT3lkI7lj7Dnu4Qsb3U956CU5Y+R6YOo6ZeoLG91PVBlb3BsZSxkY z1kZW1vLGRjPWNvbQ== member:: Y249dGVzdGVyLm1pYW8sb3U95rWL6K+V57uELG91PeeglOWPkemDqOmXqCxvdT1QZW9wb GUsZGM9ZGVtbyxkYz1jb20=
移除
cat > removeUserFromGroup.sh << EOF dn: cn=g-admin,ou=Group,dc=demo,dc=com changetype: modify delete: member member: cn=ryan.miao,ou=后台组,ou=研发部门,ou=People,dc=demo,dc=com EOF
执行
ldapmodify -H ldap:/// -x -D cn=admin,dc=demo,dc=com -w admin -f removeUserFromGroup.sh
<a name="J6O79"></a>
#### ldapsearch
- ldapsearch 查询语法, -H指定host, -D指定admin的账号,即rootdn, -w指定密码, -x启用认证,`-b` basedn, 查询的基础dn
```bash
# ldapsearch -H ldapi:/// -D "cn=admin,dc=demo,dc=com" -w admia
ldap_bind: Invalid credentials (49)
# ldapsearch -H ldapi:/// -D "cn=admin,dc=demo,dc=com" -w admin
# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
others commands
- ldapadd - add LDIF entries to an LDAP directory
- ldapauth - add LDIF entries to an LDAP directory
- ldapdelete - delete LDAP entries
- ldapmodify - modify existing LDAP entries
- ldapmodrdn - modify an LDAP entry’s DN
- ldappasswd - modify an entry’s password
- ldapsearch - search LDAP entries
- ldapwhoami - perform an LDAP Who Am I operation of a server
其他模式
configuration_choices其他应用
应用场景
1.网络服务:DNS服务
2.统一认证服务:
3.Linux PAM (ssh, login, cvs. . . )
4.Apache访问控制
5.各种服务登录(ftpd, php based, perl based, python based. . . )
6.个人信息类,如地址簿
7.服务器信息,如帐号管理、邮件服务等
示例:
门户中如何实现单点登录和统一身份认证?
《Liferay与CAS及LDAP》
统一身份认证服务
LDAP的应用简述—四种方面
统一身份认证
图形化界面工具
phpldapadmin 一个图形化界面管理工具
phpldapadmin_official_website
phpldapadmin_rpm
最近的工作
LimitNOFILE=8192
可以打开的 文件数目, 提升了连接数
[root@login ~]# systemctl status slapd
● slapd.service - OpenLDAP Server Daemon
Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-01-18 14:32:31 CST; 3 days ago
Docs: man:slapd
man:slapd-config
man:slapd-hdb
man:slapd-mdb
file:///usr/share/doc/openldap-servers/guide.html
Process: 1904916 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, status=0/SUCCESS)
Process: 1904599 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
Main PID: 1904972 (slapd)
Tasks: 18 (limit: 101361)
Memory: 116.0M
CGroup: /system.slice/slapd.service
└─1904972 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:/// ldaps:/// -f /etc/openldap/slapd.conf
Jan 21 21:17:10 login slapd[1904972]: conn=1005 op=70974 SRCH attr=member cn memberUid gidNumber
Jan 21 21:17:10 login slapd[1904972]: slap_global_control: unrecognized control: 1.3.6.1.4.1.4203.666.5.16
Jan 21 21:17:10 login slapd[1904972]: conn=1005 op=70974 SEARCH RESULT tag=101 err=0 nentries=1 text=
Jan 21 21:17:12 login slapd[1904972]: conn=1005 op=70975 SRCH base="dc=hpc,dc=com" scope=2 deref=0 filter="(&(objectClass=posixAccount)(uid=hpcadmin))"
Jan 21 21:17:12 login slapd[1904972]: conn=1005 op=70975 SRCH attr=uidNumber cn gecos uid objectClass homeDirectory gidNumber loginShell
Jan 21 21:17:12 login slapd[1904972]: conn=1005 op=70975 SEARCH RESULT tag=101 err=0 nentries=1 text=
Jan 21 21:17:12 login slapd[1904972]: conn=1005 op=70976 SRCH base="dc=hpc,dc=com" scope=2 deref=0 filter="(&(objectClass=posixGroup)(gidNumber=1000))"
Jan 21 21:17:12 login slapd[1904972]: conn=1005 op=70976 SRCH attr=member cn memberUid gidNumber
Jan 21 21:17:12 login slapd[1904972]: slap_global_control: unrecognized control: 1.3.6.1.4.1.4203.666.5.16
Jan 21 21:17:12 login slapd[1904972]: conn=1005 op=70976 SEARCH RESULT tag=101 err=0 nentries=1 text=
[root@login ~]# cat /usr/lib/systemd/system/slapd.service
[Unit]
Description=OpenLDAP Server Daemon
After=syslog.target network-online.target
Documentation=man:slapd
Documentation=man:slapd-config
Documentation=man:slapd-hdb
Documentation=man:slapd-mdb
Documentation=file:///usr/share/doc/openldap-servers/guide.html
[Service]
Type=forking
Environment="SLAPD_URLS=ldap:/// ldapi:/// ldaps:///" "SLAPD_OPTIONS="
EnvironmentFile=/etc/sysconfig/slapd
ExecStartPre=/usr/libexec/openldap/check-config.sh
ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS
LimitNOFILE=8192
[Install]
WantedBy=multi-user.target
Alias=openldap.service
## netstat -anlp | grep nslcd | grep 'ESTABLISHED' | wc -l
## 查看连接数
### 查看 进程 的句柄数 https://www.cnblogs.com/sxdcgaq8080/p/11136887.html
[root@login ~]# ps -ef | grep slapd
ldap 1904972 1 0 Jan18 ? 00:03:09 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:/// ldaps:/// -f /etc/openldap/slapd.conf
root 2940020 2939158 0 16:54 pts/11 00:00:00 grep --color=auto slapd
[root@login ~]# cat /proc/1904972/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size unlimited unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 63351 63351 processes
Max open files 8192 8192 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 63351 63351 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
[root@login ~]#
reference
- 官方文档: http://www.openldap.org/doc/admin24/guide.html
- 比官网更友好的ldap文档: http://www.zytrax.com/books/ldap
- 写的贼详细的ldap介绍: https://www.cnblogs.com/kevingrace/p/5773974.html
- 写的贼详细的ldap安装记录: https://www.cnblogs.com/kevingrace/p/9052669.html
- memberOf模块 https://www.jianshu.com/p/c877b317f294
- docker ldap: https://github.com/osixia/docker-openldap
more
限制,缺点,对内存,cpu 的要求—-future