之所以对openldap花了两天时间研究,主要因为想把公司是用的几个开源系统是用一个账号打通(jenkin,nexus,运维平台spug等),编译安装的时候遇到不少问题,这里记录下来以备后用。
之所以对openldap花了两天时间研究,主要因为想把公司是用的几个开源系统是用一个账号打通(jenkin,nexus,运维平台spug等),编译安装的时候遇到不少问题,这里记录下来以备后用。
一:下载源码并编译和安装
1,下载最新的源码:wget https://openldap.org/software/download/OpenLDAP/openldap-release/openldap-2.6.10.tgz
2,是用如下选项进行编译:
CFLAGS="-Wformat -Wformat-security" \
./configure --prefix=/usr/local/openldap \
--enable-syslog --enable-modules --enable-dynamic \
--enable-slapd --with-tls=openssl --enable-backends=mod \
--enable-mdb=mod --enable-overlays=mod --enable-syncprov=mod \
--enable-memberof=mod --enable-refint=mod --enable-auditlog=mod \
--enable-accesslog=mod --enable-unique=mod --enable-ppolicy=mod --enable-mdb=yes \
--enable-wt=no --with-cyrus-sasl=no
编译选项禁用 --enable-wt=no --with-cyrus-sasl=no 禁用 wiretiger 引擎 是因为openldap 基本用不到,禁用 cryrus 验证,只是用基本类型验证,cyrus 验证也基本用不到,如果编译
了cyrus 而不启动,启动服务的时候会报一堆警告。 之所以在 ./configure 前面加上 CFLAGS="-Wformat -Wformat-security" ,如果不加 -Wformat 在make的时候会报错导致编译中断(可以和gcc版本有关)
3,make depend
4,make install
执行上面步骤,如果中间有库的依赖,安装相应库即可,比如 centos上需要安装 yum install -y libtool-ltdl-devel unixODBC-devel
二:编辑 配置文件
1,修改 /usr/local/openldap/etc/openldap/slapd.conf 添加,具体完整配置文件见附件
suffix "dc=sbmplc,dc=com"
# 管理员 DN 与密码(替换 rootpw 为 slappasswd 生成的哈希)
rootdn "cn=admin,dc=sbmplc,dc=com"
rootpw {SSHA}XiMfWk7m6QxXID50bOvaAAi+PWhc3ajE
三:创建账号,创建数据目录
1,useradd -s /bin/false ldap -M
2, mkdir -p /usr/local/openldap/var/openldap-data
3,chown -R ldap:ldap /usr/local/openldap/var
四: 创建slapd.servie 启动脚本
1,编辑 vim /usr/lib/systemd/system/slapd.service 加入如下选项
[Unit]
Description=OpenLDAP Server Daemon
Documentation=man:slapd
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/openldap/var/run/slapd.pid
ExecStart=/usr/local/openldap/libexec/slapd -h "ldap:/// ldapi:///" -f /usr/local/openldap/etc/openldap/slapd.conf
ExecReload=/bin/kill -HUP $MAINPID
# 确保运行时目录存在
#ExecStartPre=-/bin/mkdir -p /usr/local/openldap/var/run
#ExecStartPre=/bin/chown ldap:ldap /usr/local/openldap/var/run
# 根据你的设置指定用户和组
User=ldap
Group=ldap
# 安全设置
#NoNewPrivileges=yes
PrivateTmp=yes
#ProtectSystem=strict
#ProtectHome=true
#ReadWritePaths=/usr/local/openldap/var/lib/ldap /usr/local/openldap/var/run
[Install]
WantedBy=multi-user.target
五:让普通用户绑定1024下的端口
1,默认情况下,普通用户是不能启动1024以下的端口,如果启动会报错:
2,要让普通用户启动 openldap默认的389端口是用如下:
systemctl edit slapd.service 在打开的编辑器中输入如下选项
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=no
保存后是用systemctl start slapd.service 即可
注意:
是用 setcap 'cap_net_bind_service=+ep' /usr/local/openldap/libexec/slapd 设置 setcap是不起作用的,还需确认 systemd 没有清除 capabilities。
默认情况下,systemd 会清除非 root 用户进程的所有 capabilities,除非你显式放开。即是用systemctl edit slapd.service 设置overring文件,执行systemctl edit slapd.service 编辑的路径文件为:/etc/systemd/system/slapd.service.d/override.conf
六:创建用户,这里以uid=shitian,ou=tech,dc=smplc,dc=com 为例创建shitian这个用户
1,默认openldap的数据库(mdb ,dbd数据库早已经弃用,新版本的openldap请使用自带的mdb数据库)
2,默认情况下 mdb库中没有 dc=smplc,dc=com 后最(在 slapd.conf 模式下,dc=sbmplc,dc=com 是 suffix,但它自己并没有作为条目存在于数据库里)
LDAP 在添加条目时要求父条目必须存在。所以你不能直接添加 ou=tech,dc=sbmplc,dc=com,除非 dc=sbmplc,dc=com 已经存在于数据库中。
3,建立/tmp/base.ldif 文件,文件内容如下:
dn: dc=sbmplc,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: sbmplc
dc: sbmplc
/usr/local/openldap/bin/ldapadd -x -D "cn=admin,dc=sbmplc,dc=com" -W -f /tmp/base.ldif
# 输入 rootdn 对应密码
如果 rootpw 已经在 slapd.conf 中设置,你必须使用对应密码。
这条命令会真正创建 dc=sbmplc,dc=com 条目,作为数据库的顶级条目。
4,创建并导入OU /tmp/ou_tech.ldif
dn: ou=tech,dc=sbmplc,dc=com
objectClass: top
objectClass: organizationalUnit
ou: tech
导入:/usr/local/openldap/bin/ldapadd -x -D "cn=admin,dc=sbmplc,dc=com" -W -f /tmp/ou_tech.ldif
5,创建并导入shitian这个账号 /tmp/user_shitian.ldif
dn: uid=shitian,ou=tech,dc=sbmplc,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: shitian
cn: shitian
sn: shitian
mail: shitian@sbmplc.com
userPassword: {SSHA}bUZVuUbT55ETGjQ3CzCQZKMfGQVoYA5u
/usr/local/openldap/bin/ldapadd -x -D "cn=admin,dc=sbmplc,dc=com" -W -f /tmp/user_shitian.ldif
设置加密的密码方法为: /usr/local/openldap/sbin/slappasswd -s 'abc123'