apache+svn+openldap 整合实现认证

时间:2022-07-17 19:20:29

环境说明:
- apache作为前端访问入口和功能整合
- svn的认证使用apache代理openLDAP完成
- svn的权限和授权受限于svn本身的机制,目前任然使用其原生配置文件方式。
- openLDAP提供用户身份认证数据提供和用户统一管理

ps:系统环境为 Centos 7.0


一、yum仓库配置

rm -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache

二、openldap配置

1、安装openldap包

yum install -y openldap openldap-clients openldap-servers migrationtools

2、配置openldap server

vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif

修改两行:
olcSuffix: dc=hongxue,dc=com
olcRootDN: cn=root,dc=hongxue,dc=com

添加一行:
olcRootPW: 123456

3、配置监控数据库配置文件

vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif

将olcAccess中的cn及dc修改成自己的配置

olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth"
read by dn.base="cn=root,dc=hongxue,dc=com" read by * none

4、准备LDAP数据库

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap.ldap /var/lib/ldap

5、测试配置文件

[root@centos7-200 ~]# slaptest -u
57e7c444 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif"
57e7c444 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif"
config file testing succeeded # 测试通过

6、启动及设置开机自启动启动服务

systemctl start slapd
systemctl enable slapd

7、查看启动状态及监听端口

systemctl status slapd.service
netstat -anpt |grep slapd

8、添加下面的LDAP服务器(也可按照自己的需求进行添加)

cd /etc/openldap/schema/

ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f core.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f ppolicy.ldif

9、修改配置文件migrate_common.ph

cd /usr/share/migrationtools/
vim migrate_common.ph

修改61行:
$NAMINGCONTEXT{'group'} = "ou=Groups";
修改71行:
$DEFAULT_MAIL_DOMAIN = "hongxue.com";
修改74行:
$DEFAULT_BASE = "dc=hongxue,dc=com";
修改90行:
$EXTENDED_SCHEMA = 1;

10、生成域名DIT base.ldif文件

/usr/share/migrationtools/migrate_base.pl > /root/base.ldif

11、加载base.ldif文件到openldap数据库

ldapadd -x -W -D "cn=root,dc=hongxue,dc=com" -f /root/base.ldif

12、创建用户并设置密码

mkdir /home/guests
useradd -d /home/guests/ldapuser1 ldapuser1
useradd -d /home/guests/ldapuser2 ldapuser2
useradd -d /home/guests/hongxue hongxue

echo 'password' | passwd --stdin hongxue
echo 'password' | passwd --stdin ldapuser1
echo 'password' | passwd --stdin ldapuser2

13、过滤出用户信息并保存

getent passwd | tail -n 3 > /root/users
getent shadow | tail -n 3 > /root/shadow
getent group | tail -n 3 > /root/groups

14、通过用户信息并生成ldif文件
修改 /usr/share/migrationtools/migrate_passwd.pl 文件的188行,将/etc/shadow改为/root/shadow,接着生成ldif文件,如下:

cd /usr/share/migrationtools/
./migrate_passwd.pl /root/users > users.ldif
./migrate_passwd.pl /root/groups > groups.ldif

15、更新这些用户和组的LDIF文件到LDAP数据库

ldapadd -x -W -D "cn=root,dc=hongxue,dc=com" -f users.ldif
ldapadd -x -W -D "cn=root,dc=hongxue,dc=com" -f groups.ldif

16、搜索LDAP DIT的所有记录

ldapsearch -x -b "dc=hongxue,dc=com" -H ldap://127.0.0.1

三、安装Apache服务

yum -y install httpd

四、安装Subversion服务

ps:下面安装的mod_dav_svn包这边介绍下:
Apache httpd module for Subversion server

yum -y install subversion
yum -y install mod_dav_svn

五、配置httpd及subversion服务

安装完成之后在 /etc/httpd/conf.modules.d 目录下会生成一个叫做 10-subversion.conf 的模板

1、拷贝subversion.conf模板

cp /etc/httpd/conf.modules.d/10-subversion.conf /etc/httpd/conf.d/subversion.conf

2、authz_svn和dav_svn模块
打开subversion.conf文件后默认有加载authz_svn和dav_svn模块,模块的路径为 /etc/httpd/modules

apache+svn+openldap 整合实现认证

3、配置subversion.conf

下列配置中有几点做下说明:
1)SVNParentPath:svn服务路径
2)AuthzSVNAccessFile:svn的权限配置文件
3)AuthLDAPURL:搭建的openldap url地址
4)AuthLDAPBindDN:配置 openldap的cn、dc
5)AuthLDAPBindPassword:配置openldap的管理员密码

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dontdothat_module modules/mod_dontdothat.so

<Location /opt/svn>
DAV svn
SVNParentPath /opt/svn
SVNListParentPath On
AuthzSVNAccessFile /opt/svn/authz

AuthBasicProvider ldap
AuthType Basic
AuthName "Subversion repository"
AuthLDAPURL "ldap://192.168.1.200:389/dc=hongxue,dc=com?uid?sub?(objectClass=*)"
AuthLDAPBindDN "cn=root,dc=hongxue,dc=com"
AuthLDAPBindPassword "123456"
Require valid-user

</Location>

4、启动Apache服务

systemctl start httpd.service
systemctl status httpd.service

如有报错:Unknown Authn provider: ldap
解决:yum -y install mod_ldap

5、svn服务配置

mkdir /opt/svn                    # 创建svn版本库目录
svnserve -d -r /opt/svn # 启动svn服务
svnadmin create Test # 创建一个svn版本库
chown apache.apache -R /opt/svn # 授权,不然web会有errorlog

6、svn授权

vim /opt/svn/authz
添加如下内容:

[groups]
admin=hongxue
users=ldapuser1,ldapuser2

[/]
@admin = rw

[Test:/]
@users = r

六、通过openldap用户访问svn

1、admin用户hongxue访问 /

apache+svn+openldap 整合实现认证

admin用户hongxue访问 /Test-1
apache+svn+openldap 整合实现认证


2、普通用户ldapuser1访问 /Test

apache+svn+openldap 整合实现认证

普通用户ldapuser1访问 /test-1,由于未配置该项目的权限,所有访问拒绝

apache+svn+openldap 整合实现认证

至此已经结束,有兴趣的朋友可是通过svn工具来上传下载看看。


参考文档:
http://blog.chinaunix.net/uid-21926461-id-5676013.html
http://www.linuxidc.com/Linux/2015-03/114627.htm