1.方案说明
- apache作为前端访问入口和功能整合
- svn的认证使用apache代理openLDAP完成
- svn的权限和授权受限于svn本身的机制,目前任然使用其原生配置文件方式。
- openLDAP提供用户身份认证数据提供和用户统一管理
2.环境及软件
2.1.操作系统准备
操作系统:centos-6.3 64位
因为在部署整个环境中经常需要安装一些系统的组件,所以,这里先配置好yum的仓库,便于后面安装设置。
yum仓库设置
1.centos-6.3安装包FTP准备
在网络内任务服务器上,解压操作系统的ISO文件(如:/pub/centos/6.3),并把对应的包文件夹暴露为FTP服务(访问地址如:ftp://192.168.30.33/pub/centos/6.3/x86_64/)
2.设置操作系统的yum仓库
# cd /etc/yum.repos.d/
# 如果文件不存在则创建文件:centos6.3_x86_64.repo
# touch centos6.3_x86_64.repo
# 使用VI编辑设置仓库
# vi centos6.3_x86_64.repo
[centos6.3]
name=centos6.3
baseurl=ftp://192.168.30.33/pub/centos/6.3/x86_64/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
以上配置中,gpgcheck=0表示访问不需要验证;enabled=1表示本仓库可用。
3.安装必须的组件
# yum install openssl
# yum install gcc
如果后续在各软件安装过程中,出现错误提示需要依赖某组件或找不到某组件,请使用yum search 和 yum install 进行安装。
2.2.软件准备
软件所有内网共享地址:\\192.168.30.202\public_resources\topic\apache_svn_openldap_phpldapadmin
- httpd-2.2.21.tar.gz (下载地址:http://apache.etoak.com//httpd/httpd-2.2.23.tar.gz )
- subversion-1.7.9.tar.bz2
- db-5.3.15.tar.gz(bdb)
- openldap-2.4.35.tgz
- phpldapadmin-1.2.3.zip
- sqlite-amalgamation-3071602.zip
# mkdir /data/packages
# cd /data/packages
拷贝或下载一下文件到/data/packages目录,待用。
3.安装openLDAP
安装BDB
LDAP采用openLDAP,因为其依赖DBD,所以我们先安装BDB。
# cd /data/packages
# tar -zxvf db-5.2.15.tar.gz
# db-5.3.15/build_unix
# ../dist/configure
# make
# make install
如果出现错误:configure: error: C compiler cannot create executables
解决办法:yum install glibc-devel
安装完成后,安装目录在:/usr/local/BerkeleyDB.5.3
# 设置系统级动态链接
# cd /etc/ld.so.conf.d
# touch bdb.conf
# echo /usr/local/BerkeleyDB.5.3/lib > bdb.conf
# ldconfig
安装openLDAP
# cd /data/packages
tar -xzvf openldap-2.4.35.tgz
cd openldap-2.4.35
./configure --prefix=/usr/local/openldap CPPFLAGS="-I/usr/local/BerkeleyDB.5.3/include" LDFLAGS="-L/usr/local/BerkeleyDB.5.3/lib"
make depend
make
make install
安装完成后目录在:/usr/local/openldap/
配置openLDAP
# 新建LDAP数据存储目录
# mkdir /data/openldap/data
openLDAP一般只需要配置:/usr/local/openldap/etc/openldap/slapd.conf 文件,主要是设置根,认证,名称等基础信息。如下:
# vi /usr/local/openldap/etc/openldap/slapd.conf
# 默认的schema只有core,增加两个常用的schema,用于建立用户信息。 include /usr/local/openldap/etc/openldap/schema/core.schema include /usr/local/openldap/etc/openldap/schema/cosine.schema include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema ####################################################################### # BDB database definitions ####################################################################### # 使用bdb作为存储 database bdb # 顶层节点DN配置 suffix "dc=feinno,dc=com" # 管理员DN rootdn "cn=Manager,dc=feinno,dc=com" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. # 密码,这里设置的是123456,请根据其情况设置 rootpw 123456 # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. # 存储路径 directory /data/openldap/data # Indices to maintain # 索引配置 index objectClass eq以上内容是需要修改和配置的,其他参数主要是权限配置,可以暂不配置。完成配置后,请保持退出。
# 配置环境变量,用户后续的LDAP操作
# vi /etc/profile
在文件结尾加入:
export PATH=$PATH:/usr/local/openldap/bin
保持退出
# soruce /etc/profile
启动openLDAP
# /usr/local/openldap/libexec/slapd
# 停止openLDAP
# killall slapd
验证和使用openLDAP
1.命令行方式使用ldif文件建立根组织DN
# mkdir /data/openldap/ldif
# cd /data/openldap/ldif
# vi feinno.com.ldif
dn:dc=feinno,dc=com objectclass:top objectclass:dcObject objectclass:organization o:feinno dc:feinno保存退出
# 命令方式创建根DN entity:"dc=feinno,dc=com",使用rootdn的账户和密码(前面slapd.conf文件中配置)
# ldapadd -x -D "cn=Manager,dc=feinno,dc=com" -W -f feinno.com.ldif
Enter LDAP Password:
adding new entry "dc=feinno,dc=com"
......
# 查询已经创建的entity
# ldapsearch -x -b 'dc=feinno,dc=com' '(objectclass=*)'
......
2.使用桌面客户端工具
推荐使用桌面工具:
- LDAPAdmin 下载地址:http://www.ldapadmin.org/
- Apache LDAP studio 下载地址:http://directory.apache.org/apacheds/
这里使用LDAPAdmin 做操作演示。
我们Demo的LDAP结构如下:
建立连接:
创建组织结构单元:
建立部门节点:
3.使用B/S的phpLDAPAdmin
请参见后面第7节
4.安装Apache
安装
apache是整个SVN和LDAP的前端,这里打开其动态加载功能(DSO)
# yum install openldap-devel zlib-devel expat-devel
# cd /data/packages
# tar -xzvf httpd-2.2.23.tar.gz
# cd httpd-2.2.23
# ./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared=all --enable-dav=share --enable-dav-fs --with-ldap --enable-ldap --enable-authnz-ldap
# make
# make install
安装完成后,目录在:/usr/local/apache2
# 设置环境变量,方面后面操作
# vi /etc/profile
在文件结尾加入:
export PATH=$PATH:/usr/local/apache2/bin
保持退出
# soruce /etc/profile
基本配置
主配置文件:/usr/local/apache2/conf/httpd.conf
1、修改ServerName,防止DNS查找失败错误
# If your host doesn't have a registered DNS name, enter its IP address here.
ServerName localhost:80
2、打开server-status配置,支持apache 状态检查。
请确保主配置文件中存在配置行:
LoadModule status_module modules/mod_status.so
在主配置文件结尾加入:
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order allow,deny
Allow from all
</Location>
系统服务和自启动
# apache 服务和自启动
Apache加入到系统服务里面:
# cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd
修改httpd
在文件头部加入如下内容:
###
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 90 90
# description:http server
###
保存
# chkconfig --add httpd
# chkconfig --level 35 httpd on
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
验证
# apachectl start
# 打开浏览器访问:http://ip
如果现实:It work! 表示安装成功。
# 关闭apache,等待配置
# apachectl stop
5.安装SVN
安装
# subversion1.7.9的编译依赖 SQLITE的算法
# cd /data/packages
# tar -xjvf subversion-1.7.9.tar.bz2
# cd subversion-1.7.9
# mkdir sqlite-amalgamation
# cd..
# unzip sqlite-amalgamation-3071602.zip
# cp sqlite-amalgamation-3071602/sqlite3.c subversion-1.7.9/sqlite-amalgamation/
# cd subversion-1.7.9
# ./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion --with-apr=/usr/local/apache2 --with-apr-util=/usr/local/apache2
# make
# make install
安装成功后,安装目录在:/usr/local/subversion
# 设置环境变量
# vi /etc/profile
在文件结尾加入:
export PATH=/usr/local/subversion/bin:$PATH
保持退出
# soruce /etc/profile
创建和配置仓库
# 创建SVN仓库目录
# mkdir /data/svn/repositories
# cd /data/svn/repositories
# 创建测试工程
# svnadmin create project1
# svnadmin create project2
# svnadmin create project3
# svnadmin create project4
# svnadmin create project5
# ls
project1 project2 project3 project4 project5 project6
# 创建authz.conf文件,作为工程权限控制的配置文件。(配置语法请参考:http://svnbook.red-bean.com/en/1.5/svn.serverconfig.pathbasedauthz.html)
# vi authz.conf
[groups] admin=zhangpu [/] @admin=rw *= #*=r [project1:/] zhangpu=r libingyang=r *=
完成以上后,待用,后续使用apache整合。
6.配置apache+svn+ldap
# 采用HOST方式配置,打开主配置文件httpd.conf文件中对host配置的引用注释。
# vi /usr/local/apache2/conf
Include conf/extra/httpd-vhosts.conf
保存退出
# 配置vhost
# cd /usr/local/apache2/conf/extra
# vi httpd-vhosts.conf
NameVirtualHost *:80 LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <VirtualHost *:80> ServerAdmin [email protected] ServerName svn.acooly.com ErrorLog logs/svn.feinno.com-error_log CustomLog logs/svn.feinno.com-access_log common <Location /svn> # SVN配置 DAV svn SVNListParentPath on SVNParentPath /data/svn/repositories/ AuthzSVNAccessFile /data/svn/repositories/authz.conf # 在ldap找不到账号的情况下可以使用其它的认证方式(如,密码文件) AuthzLDAPAuthoritative off # openLDAP的管理账户 AuthLDAPBindDN "cn=Manager,dc=feinno,dc=com" AuthLDAPBindPassword 123456 AuthBasicProvider ldap # 认证数据来源:"ou=rd,dc=cq,dc=feinno,dc=com" 下所有子entity的uid作为认证用户名 AuthLDAPURL "ldap://localhost:389/ou=rd,dc=cq,dc=feinno,dc=com?uid?sub?(objectClass=*)" # http 基本认证 AuthType Basic AuthName "feinno Subversion repository" Require valid-user # 设置目录权限,实现列表所有工程目录 Options Indexes FollowSymLinks Order allow,deny Allow from all </Location> </VirtualHost>完成配置后,保存退出。