部署LDAP
需要先安装Docker,并创建相应的目录。
1
2
|
mkdir -p /data/docker/ldap/data
mkdir -p /data/docker/ldap/conf
|
容器化部署OpenLdap
1
2
3
4
5
6
7
8
9
10
11
|
docker run \
-d -p 389:389 -p 636:636 \
--name openldap \
--restart=always \
-v /data/docker/ldap/data:/var/lib/ldap \
-v /data/docker/ldap/conf:/etc/ldap/slapd.d \
--env LDAP_ORGANISATION="snoopyops.top" \
--env LDAP_DOMAIN="snoopyops.top" \
--env LDAP_BASE_DN="dc=snoopyops,dc=top" \
--env LDAP_ADMIN_PASSWORD="PassW0rd" \
osixia/openldap
|
部署管理页面
可以使用phpldapadmin
对LDAP进行管理。
1
2
3
4
5
6
7
|
docker run \
-d -p 8080:80 -p 8443:443 \
--name phpldapadmin \
--link openldap:ldap-host \
--env PHPLDAPADMIN_HTTPS=false \
--env PHPLDAPADMIN_LDAP_HOSTS=ldap-host \
osixia/phpldapadmin
|
部署Nginx
代理管理页面
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
|
upstream pla {
server 10.20.0.56:8080 max_fails=3 fail_timeout=3 weight=3;
}
server {
listen 80 ;
server_name pla-ops.snoopyops.top;
index index.html index.htm index.jsp ;
rewrite ^/(.*)$ https://$server_name/$1 ;
}
server {
listen 443 ssl ;
server_name pla-ops.snoopyops.top;
ssl_certificate /etc/nginx/cert/wildcard-snoopyops-top_fullchain.pem;
ssl_certificate_key /etc/nginx/cert/wildcard-snoopyops-top_key.pem;
ssl_session_timeout 5m ;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
ssl_prefer_server_ciphers on;
index index.html index.htm index.jsp;
#include iplist/iplist.txt;
access_log /data/nginx/logs/pla-ops.snoopyops.top.access.log json;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://pla;
}
}
|
做完域名解析后,通过pla-ops.snoopyops.top
可访问LDAP
用户名为cn=admin,dc=snoopyops,dc=top
密码为PassW0rd
注意:LDAP应通过白名单限制访问范围,防止被攻击。
LDAP创建组织及用户
创建People组织
创建组织:
- 在
dc=snoopyops,dc=top
下点击Create a child entry
按钮
- 选择
Default
ObjectClasses
选择organizationalUnit
,然后点击Proceed
- 从上而下填写,RDN 选择
ou(ou)
- 然后开始正式的人员信息填写

创建用户
点击People
,选择Create a child entry
按钮,再选择Default
创建普通用户:
- 在
People
之下点击Create a child entry
按钮
- 选择
Default
ObjectClasses
选择inetOrgPerson
,然后点击Proceed
- 从上而下填写,
RDN
选择 User Name(uid)
- 然后开始正式的人员信息填写
- cn:zhangs
- sn:zhangs
- displayName:张三
- 电子邮件:zhangs@qq.com
- ou:People
- 密码:123456
- User Name:zhangs

创建用户组
为了精准授权,我们可以通过用户组进行授权,比如创建jenkins
用户组,将用户加入到jenkins
用户组中,用户可以登录jenkins
。并不是每个LDAP用户都可以登录jenkins
。
先创建Group
组织,创建方法与创建People
组织相同。
点击刚刚创建的Group
,选择Create a child entry
按钮,再选择Default
创建普通用户:
- 在
People
之下点击Create a child entry
按钮
- 选择
Default
ObjectClasses
选择groupOfUniqueNames
,然后点击Proceed
- 从上而下填写,RDN 选择
cn(cn)
- 然后开始填写组信息
- cn:jenkins
- uniqueMember:点击后边的搜索框,选择将要包含的用户

集成到其他应用
jumpserver
登录jumpserver
后,点击系统设置
—>认证设置
—>LDAP

jenkins
Jenkins
启用了 ldap
登陆之后,默认是登录用户就是管理员权限,尽管我们还可以通过更细化权限划分的插件来实现管控,但是这仍然让人觉得不那么优雅。
因此,在 Jenkins
这里,打算采用基于应用分组的方式进行配置。通过上文创建用户组的教成,先把`jenkins·用户组创建出来。
创建完成后的架构模式如下:

登录Jenkins
后,直接点击系统管理
—>全局安全配置
,按照下面的内容进行配置即可。



配置完成,点击Test LDAP settings
,此时可以用其中一个账号密码进行测试。
OpenVPN
向Jenkins
一样,创建一个vpn
用户组
参考VPN部署文档集成LDAP插件,此处不赘述,配置如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
cat /etc/openvpn/auth/ldap.conf
<LDAP>
URL ldap://10.20.0.56:389
BindDN cn=admin,dc=snoopyops,dc=top
Password PassW0rd
Timeout 15
TLSEnable no
FollowReferrals yes
</LDAP>
<Authorization>
BaseDN "ou=People,dc=snoopyops,dc=top"
SearchFilter "uid=%u"
RequireGroup true
<Group>
BaseDN "ou=Group,dc=snoopyops,dc=top"
SearchFilter "cn=vpn"
MemberAttribute uniqueMember
</Group>
</Authorization>
|
密码管理
通过self-service-password
服务,可为用户提供web
页面,实现用户自助修改密码的功能。
准备配置文件。
1
2
3
4
|
mkdir -p /data/docker/self-service-password/config
docker run --name selfServicePassword -itd docker.io/ltbproject/self-service-password:1.5.0
docker cp selfServicePassword:/var/www/conf/config.inc.php /data/docker/self-service-password/config/
docker rm -f selfServicePassword
|
修改配置文件,主要做如下修改
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
|
# LDAP相关配置
$ldap_url = "ldap://10.20.0.56";
$ldap_starttls = false;
$ldap_binddn = "cn=admin,dc=snoopyops,dc=top";
$ldap_bindpw = 'PassW0rd';
$ldap_base = "ou=People,dc=snoopyops,dc=top";
$ldap_login_attribute = "uid";
$ldap_fullname_attribute = "cn";
$ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";
$ldap_use_exop_passwd = false;
$ldap_use_ppolicy_control = false;
# 邮箱相关配置
$mail_from = "ops@snoopyops.top";
$mail_from_name = "账号重置密码";
$mail_signature = "";
$notify_on_change = true;
$mail_sendmailpath = '/usr/sbin/sendmail';
$mail_protocol = 'smtp';
$mail_smtp_debug = 0;
$mail_debug_format = 'html';
$mail_smtp_host = 'smtp.feishu.cn';
$mail_smtp_auth = true;
$mail_smtp_user = 'ops@snoopyops.top';
$mail_smtp_pass = 'B5Gps73vm4owuULdd';
$mail_smtp_port = 465;
# 用于加密或签名操作,设置为随机字符
$keyphrase = "ks8lajsskjxJUs22";
|
运行self-service-password
服务。
1
|
docker run -p 9080:80 --restart=always --name selfServicePassword -v /data/docker/self-service-password/config:/var/www/conf -itd docker.io/ltbproject/self-service-password:1.5.0
|
配置Nginx
。
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
|
upstream password-ops {
server 10.20.0.56:9080 max_fails=3 fail_timeout=3 weight=3;
}
server {
listen 80 ;
server_name password-ops.snoopyops.top;
index index.html index.htm index.jsp ;
rewrite ^/(.*)$ https://$server_name/$1 ;
}
server {
listen 443 ssl ;
server_name password-ops.snoopyops.top;
ssl_certificate /etc/nginx/cert/wildcard-snoopyops-top_fullchain.pem;
ssl_certificate_key /etc/nginx/cert/wildcard-snoopyops-top_key.pem;
ssl_session_timeout 5m ;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
ssl_prefer_server_ciphers on;
index index.html index.htm index.jsp;
access_log /data/nginx/logs/password-ops.snoopyops.top.access.log json;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://password-ops;
}
}
|
做完域名解析后,访问域名,可通过邮件的方式自助修改密码
