玖叶教程网

前端编程开发入门

OpenLDAP部署(openldap memberof)

CentOS 7中可能默认提供了openLDAP-server包,本教程是以ALmaLINUX(8.5)部署

1.安装OpenLDAP

由于CentOS8的仓库中取消了对OpenLDAP-server包的支持.这里使用Symas提供的第三方仓库

dnf -y install wget net-tools tar unzip 
wget -O /etc/yum.repos.d/openldap.repo https://repo.symas.com/configs/SOFL/rhel8/sofl.repo

2.建立源的缓存

dnf makecache

3.安装openldap

dnf install -y symas-openldap-servers symas-openldap-clients

4.自启动并启动openldap

systemctl enable slapd
systemctl start slapd

5.openLDAP基础

openLDAP中使用slappasswd来生成密码哈希,再将哈希写入配置文件来修改密码

设置OpenLDAP的管理员根密码,此密码用于整个安装过程

slappasswd -s hao12345678
New password: 
Re-enter new password: 
{SSHA}8FIP/p+sQ5pxECw5bKbHC7WNbnEzpb4+

6.创建chrootpw.ldif文件,写入如下配置(如:vi /tmp/chrootpw.ldif)

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}8FIP/p+sQ5pxECw5bKbHC7WNbnEzpb4+

第一行:执行配置文件,这里表示指定为cn=config/olcDatabase={0}config文件.你可以在/etc/openldap/slapd.d目录下就能找到此文件

第二行 changetype指定类型为修改

第三行 add表示添加olcRootPW配置项

第四行 指定olcRootPW配置项的值

在执行ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif之前,olcDatabase={0}config文件,里面是没有olcRootPW这个项.执行看,再次查看,会发现已经添加有此项

注释:

(1).dn配置文件,这里指定为/etc/openldap/slapd.d/cn=config/olcDatabase={0}config文件

(2).changetype指定类型为 modity,更改

(3).add表示添加 olcRootPW配置项

(4).指定olcRootPW配置荐的值

执行如下命令将配置中的操作动态载入openLDAP服务器

ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
#输出如下内容表示成功
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

7.导入基本schema

openldap server默认提供了一些基本schema位于/etc/openldap/schema目录下,这些schema控制着条目拥有哪些对象类和属性,可以自行选择需要的进入导入,这里将所有schema都导入进入

ls /etc/openldap/schema/*.ldif | xargs -I {} ldapadd -Y EXTERNAL -H ldapi:/// -f {}

8.修改域并创建域管理帐户

使用slappasswd命令为域管理员帐户创建密码,记录哈希

首先要生成经处理后的目录管理者明文密码

创建chdomain.ldif文件并写入如下配置

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to *
   by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
   by dn.base="cn=admin,dc=mfyxw,dc=com" read
   by * none

dn:olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mfyxw,dc=com

dn:olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN:cn=admin,dc=mfyxw,dc=com

dn:olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}8FIP/p+sQ5pxECw5bKbHC7WNbnEzpb4+

dn:olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
   by dn="cn=admin,dc=mfyxw,dc=com" write
   by anonymous auth
   by self write
   by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to *
   by dn="cn=admin,dc=mfyxw,dc=com" write
   by * read

olcSuffix:用于保存域信息,更新为自己的域

olcRootDN: 根的DN(唯一识别名),根的区别名,它用于根管理员在此节点下做所有的管理

olcRootPW: LDAP的管理员的根的密码,刚才执行slappasswd命令生成的加密内容

9.载入修改

ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
#如下是运行成功
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

modifying entry "olcDatabase={2}mdb,cn=config"

启用memberof模块(开启memberof支持并新增用户支持memberof配置)

这个模块的作用是当你建一个组的时候,把一些用户添加到这个组里去,它会自动给这些用户添加一个memberOf属性,有很多应用需要检查这个属性

10.创建add_memberof.ldif文件并写入如下配置

dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap

dn: olcOverlay={0}memberof,olcDatabase={2}mdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf

11.创建refint1.ldif文件并写入如下配置

dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint

12.创建refint2.ldif文件并写入如下配置

dn: olcOverlay=refint,olcDatabase={2}mdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayconfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember manager owner

13.依次执行如下命令

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add_memberof.ldif
输出结果:adding new entry "cn=module{0},cn=config"

输出结果:adding new entry "olcOverlay={0}memberof,olcDatabase={2}mdb,cn=config"

dapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
输出结果:modifying entry "cn=module{0},cn=config"

ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
输出结果:adding new entry "olcOverlay=refint,olcDatabase={2}mdb,cn=config"

14.创建组织及管理角色

下面来创建一个叫做Maple的组织,并在其下创建一个admin的组织角色(该组织角色内的用户具有管理整个LDAP的权限)和People和Group两个组织单元

创建base.ldif文件并写入如下配置

dn: dc=mfyxw,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: maple
dc: mfyxw

dn: cn=admin,dc=mfyxw,dc=com
objectClass: organizationalRole
cn: admin

dn: ou=People,dc=mfyxw,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mfyxw,dc=com
objectClass: organizationalRole
cn: Group

载入修改

ldapadd -x -D cn=admin,dc=mfyxw,dc=com -W -f base.ldif
Enter LDAP Password: 
adding new entry "dc=mfyxw,dc=com"

adding new entry "cn=admin,dc=mfyxw,dc=com"

adding new entry "ou=People,dc=mfyxw,dc=com"

adding new entry "ou=Group,dc=mfyxw,dc=com"

通过以上的所有步骤,就已经设置好了一个LDAP目录树:其中基准dc=mfyxw,dc=com是该树的根节点,其下有一个管理域cn=admin,dc=mfyxw,dc=com和两个组织单元ou=People,dc=mfyxw,dc=com和ou=Group,dc=mfyxw,dc=com


15.关闭匿名访问

创建disabled_anon.ldif文件并添加如下配置

dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon

dn: cn=config
changetype: modify
add: olcRequires
olcRequires: authc

dn: olcDatabase={-1}frontend,cn=config
changetype:modify
add: olcRequires
olcRequires: authc

载入修改

ldapadd -Y EXTERNAL -H ldapi:/// -f disabled_anon.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

modifying entry "cn=config"

modifying entry "olcDatabase={-1}frontend,cn=config"

通过以上的所有

16.安装phpLDAPadmin

此业务需要增加php-ldap模块支持

使用Remi提供的仓库的php,使用如下命令安装

dnf install -y dnf-utils https://rpms.remirepo.net/enterprise/remi-release-8.rpm
#查询php的版本
dnf module list php -y

#重置php列表
dnf module list reset php -y  

#启用php8.1     
dnf -y module enable php:remi-7.4

#安装php81-php-ldap
dnf -y install php74-php-ldap 

17.添加nginx的源

vi /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

18.安装nginx

dnf makecache && dnf -y install nginx

19.安装php

dnf -y install php74 php74-php-ldap php-fpm php-ldap php-xml php-cli php-common php-devel

修改php-fpm的www.conf文件

vi /etc/php-fpm.d/www.conf

;listen = /run/php-fpm/www.sock
listen = 127.0.0.1:9000

由于CentOS8中默认不提供openLDAP-serers包,phpLDAPadmin包也默认不提供

可以直接在Release- leenooks/phpLDAPadmin上下载release包

phpLDAPadmin的github地址: https://github.com/leenooks/phpLDAPadmin/releases

cd /usr/share/nginx/html && \
wget https://github.com/leenooks/phpLDAPadmin/archive/refs/tags/1.2.6.3.tar.gz

将下载好的包移动到Nginx的web根目录下,解压并重命名为pla

tar xf 1.2.6.3.tar.gz && mv phpLDAPadmin-1.2.6.3 phpLDAPadmin && \
cp phpLDAPadmin/config/config.php.example phpLDAPadmin/config/config.php && \
chown -R nginx.nginx /usr/share/nginx/html

本次配置中使用二级域名mapleldap访问该业务,设置好DNS解析后在Nginx中根据实际情况增加配置

(/etc/nginx/nginx.conf)

server {
    listen 443 ssl;
    server_name mapleldap.mfyxw.com;
    root /usr/share/nginx/html/phpLDAPadmin/htdocs/;
    
    location / {
        index index.php;
        
        location ~ \.php(.*)$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
            fastcgi_param HTTPS on;
            include fastcgi_params;        
        }                                        
    }
}

20.启动nginx和php

systemctl enable php-fpm && systemctl start php-fpm && \
  systemctl enable nginx && systemctl start nginx

phpLDAPadmin目录下的config目录,将config.php.example复制为config.php

配置DN登录(修改/usr/share/nginx/html/phpLDAPadmin/config/config.php)

默认使用UID或DN登录,修改为cn

$servers->setValue('login','attr','cn');

关闭匿名

$servers->setValue('login','anon_bind',false);

设置用户属性的唯一性,这里使用了cn和sn,以确保用户名的唯一性

$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));

去除警告信息

$config->custom->appearance['hide_template_warning'] = true;

服务验证

执行命令,查看是否安装成功

[root@servertest tmp]# ldapsearch -H ldap://192.168.80.33:389 -w H@oskksk7777 -D "cn=admin,dc=mfyxw,dc=com" -b "dc=mfyxw,dc=com"
#或者使用下面命令,会提示输入密码
[root@servertest tmp]#ldapsearch -H ldap://192.168.80.33:389 -W -D "cn=admin,dc=mfyxw,dc=com" -b "dc=mfyxw,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=mfyxw,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# mfyxw.com
dn: dc=mfyxw,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Maple Company
dc: mfyxw

# admin, mfyxw.com
dn: cn=admin,dc=mfyxw,dc=com
objectClass: organizationalRole
cn: admin

# People, mfyxw.com
dn: ou=People,dc=mfyxw,dc=com
objectClass: organizationalUnit
ou: People

# Group, mfyxw.com
dn: ou=Group,dc=mfyxw,dc=com
objectClass: organizationalRole
cn: Group
ou: Group

# search result
search: 2
result: 0 Success

# numResponses: 5
# numEntries: 4

-H

执行主机IP及端口

-w

绑定DN的密码

-D

所绑定的服务器的DN

-b

指定搜索起始点

附上忘记管理员密码修改方法

生成管理员密码

slappasswd -s H@oskksk7777
{SSHA}r+OePPYRhIopx6qw1WNC1bQ3gCzi8E1h

创建修改管理员根密码文件: changerootpw.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}r+OePPYRhIopx6qw1WNC1bQ3gCzi8E1h

运行如下命令修改管理员根密码

[root@servertest tmp]# ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

创建域管理员密码文件changedomain.ldif

dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}0ainWmcTshqjOR8nyNyhknYChWBfcHxp

运行如下命令修改域管理员密码

[root@servertest tmp]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chandomainpw.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}mdb,cn=config"

为LDAP用户设置密码

ldappasswd -H ldapi:/// -Y EXTERNAL -S "cn=maple,ou=people,dc=mfyxw,dc=com"

查看ldap版本号及检测

slapd -VV
slaptest -u

加载日志模块

创建日志模块文件 loglevel.ldif

dn: cn=config
changetype: modify
replace: olclogLevel
olcLogLevel: stats

运行如下命令添加日志

[root@servertest tmp]# ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

配置rsyslog.conf

cat <<EOF> /etc/rsyslog.conf
local4.* /var/log/slapd.log
EOF

创建日志文件并授权

touch /var/log/slapd.log
chown ldap.ldap /var/log/slapd.log

重启rsyslog

systemctl restart rsyslog

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言