4

Gogs集成LDAP

 2 years ago
source link: https://shidawuhen.github.io/2022/04/07/Gogs%E9%9B%86%E6%88%90LDAP/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

上一篇文章Gogs安装教程讲了Gogs的安装过程,本次讲Gogs如何集成LDAP。Gogs为何要集成LDAP呢?

轻型目录访问协议英文Lightweight Directory Access Protocol缩写LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。

只看定义大家可能不理解LDAP的作用,举个例子有利于大家理解。公司有很多不同的系统,都需要员工用账号密码进行登录,如果只用一个相同的账号、密码便能够登录所有系统,无论对员工还是对公司的管理都会方便很多。LDAP便能实现这个能力,在LDAP上创建用户,各个系统可以集成LDAP,然后用户便可用LDAP上创建的账号、密码登录了。

环境配置如下:

Centos:7.6

安装openldap

openldap安装简单,使用一下命令即可:

# yum 安装相关包
sudo yum install -y openldap openldap-clients openldap-servers

# 复制一个默认配置到指定目录下,并授权,这一步一定要做,然后再启动服务,不然生产密码时会报错
sudo cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

# 授权给ldap用户,此用户yum安装时便会自动创建
sudo chown -R ldap. /var/lib/ldap/DB_CONFIG

# 启动服务,先启动服务,配置后面再进行修改
sudo systemctl start slapd
sudo systemctl enable slapd

# 查看状态,正常启动则ok
systemctl status slapd

修改openldap配置

修改openldap配置比较麻烦,网上找到一个同学的配置完全准确,帮助解决了很大问题。openldap配置都保存在/etc/openldap/slapd.d目录下的cn=config文件夹内。sdapd.d中的文件为:

image-20220406214623951

安装openldap后,会有三个命令用于修改配置文件,分别为ldapadd, ldapmodify, ldapdelete,顾名思义就是添加,修改和删除。而需要修改或增加配置时,则需要先写一个ldif后缀的配置文件,然后通过命令将写的配置更新到slapd.d目录下的配置文件中去。

修改配置时,建议使用root权限。建议大家除了密码外,所有操作都按照教程配置,等熟悉后,再进行修改。

su -
# 生成管理员密码,记录下这个密码,后面需要用到。记得changepwd.ldif和changedomain.ldif都改为自己的密码
slappasswd -s 3**

输出加密数据:{SSHA}4ACfk50lflEdr/+HZCxHJPw0yCSVDq4f

# 增加密码,记得使用自己的
cd ~
vim changepwd.ldif

----------------------------------------------------------------------
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}4ACfk50lflEdr/+HZCxHJPw0yCSVDq4f
----------------------------------------------------------------------


# 这里解释一下这个文件的内容:
# 第一行执行配置文件,这里就表示指定为 cn=config/olcDatabase={0}config 文件。你到/etc/openldap/slapd.d/目录下就能找到此文件
# 第二行 changetype 指定类型为修改
# 第三行 add 表示添加 olcRootPW 配置项
# 第四行指定 olcRootPW 配置项的值
# 在执行下面的命令前,你可以先查看原本的olcDatabase={0}config文件,里面是没有olcRootPW这个项的,执行命令后,你再看就会新增了olcRootPW项,而且内容是我们文件中指定的值加密后的字符串

# 执行命令,修改ldap配置,通过-f执行文件
ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif

# 查看多了olcRootPW
cat /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif


# 我们需要向 LDAP 中导入一些基本的 Schema。这些 Schema 文件位于 /etc/openldap/schema/ 目录中,schema控制着条目拥有哪些对象类和属性,可以自行选择需要的进行导入,
# 依次执行下面的命令,导入基础的一些配置,我这里将所有的都导入一下,其中core.ldif是默认已经加载了的,不用导入
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

# 修改域名,新增changedomain.ldif, 这里我自定义的dc为yaobili,管理员用户账号为admin。
# 如果要修改,则将下面相应的dc=yaobili,dc=com都改为自己的值。
# 此处注意一点,每组之间需要有空行。如果执行失败,可删除空行后重新添加空行。
# 记得修改olcRootPW为自己的密码
vim changedomain.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=yaobili,dc=com" read by * none

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

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}4ACfk50lflEdr/+HZCxHJPw0yCSVDq4f

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=yaobili,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=yaobili,dc=com" write by * read
-------------------------------------------------------------------------

# 执行命令,修改配置
ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif

# 查看
cat /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif


#然后,启用memberof功能
# 新增add-memberof.ldif, #开启memberof支持并新增用户支持memberof配置
vim 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}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf
-------------------------------------------------------------


# 新增refint1.ldif文件
vim refint1.ldif
-------------------------------------------------------------
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint
-------------------------------------------------------------


# 新增refint2.ldif文件
vim refint2.ldif
-------------------------------------------------------------
dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember manager owner
-------------------------------------------------------------


# 依次执行下面命令,加载配置,顺序不能错
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add-memberof.ldif
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif


#创建一个叫做 yaobili company 的组织,并在其下创建一个 admin 的组织角色(该组织角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元
# 新增配置文件
vim base.ldif
----------------------------------------------------------
dn: dc=yaobili,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Yaobili Company
dc: yaobili

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

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

dn: ou=Group,dc=yaobili,dc=com
objectClass: organizationalRole
cn: Group
----------------------------------------------------------

# 执行命令,添加配置, 这里要注意修改域名为自己配置的域名,然后需要输入上面我们生成的密码
ldapadd -x -D cn=admin,dc=yaobili,dc=com -W -f base.ldif

命令执行成功的样式:

image-20220406214858475

phpldapadmin

# yum安装时,会自动安装apache和php的依赖。
# 注意: phpldapadmin很多没更新了,只支持php5,如果你服务器的环境是php7,则会有问题,页面会有各种报错
yum install -y phpldapadmin

# 修改apache的phpldapadmin配置文件
# 修改如下内容,放开外网访问,这里只改了2.4版本的配置,因为centos7 默认安装的apache为2.4版本。所以只需要改2.4版本的配置就可以了
# 如果不知道自己apache版本,执行 rpm -qa|grep httpd 查看apache版本

vim /etc/httpd/conf.d/phpldapadmin.conf
-----------------------------------------------------------------
<IfModule mod_authz_core.c>
# Apache 2.4
Require all granted
</IfModule>
-----------------------------------------------------------------

# 修改配置用DN登录ldap
vim /etc/phpldapadmin/config.php
-----------------------------------------------------------------
# 398行,默认是使用uid进行登录,我这里改为cn,也就是用户名
$servers->setValue('login','attr','cn');

# 460行,关闭匿名登录,否则任何人都可以直接匿名登录查看所有人的信息
#$servers->setValue('login','anon_bind',false);

# 519行,设置用户属性的唯一性,这里我将cn,sn加上了,以确保用户名的唯一性 - 不改
$servers->setValue('unique','attrs',array('mail','uid','uidNumber','cn','sn'));
-----------------------------------------------------------------


# 启动apache,要是报错,看80端口是不是被占用了
systemctl start httpd

systemctl enable httpd

# 访问ldapadmin
http://122.51.225.162/ldapadmin

出现该页面,表示成功,使用admin和对应的密码即可登录。

image-20220407112907094

创建ldap用户

按如下操作,创建一个用户:

image-20220407000519499

image-20220407000548532

image-20220407000614906

image-20220407000644644

image-20220407000718817

image-20220407000749421

image-20220407001021587

image-20220407001322851

image-20220407001357651

image-20220407001510233

Gogs集成LDAP

添加认证源

在Gogs中添加LDAP认证源:

image-20220407113223844

image-20220407113306868

image-20220407113320796

使用LDAP中创建的user,在Gogs中进行添加,添加完毕后,可用对应的账号、密码登录。

image-20220407002732168

image-20220407002555138

image-20220407002444994

image-20220407002454020


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK