1、 首先,需要安装配置openldap:
yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
在/openldap目录下只保留slapd.conf cert schem slapd.d 4个文件
cd /etc/openldap
创建管理员密码:
[root@ylkj openldap]# slappasswd
New password:
Re-enter new password:
{SSHA}cM5gJrd3iDG2p13B+f1gpFGH3pFP6hWh(这个复制到配置文件slapd.conf中)
vim slapd.conf
修改一下配置:
suffix "dc=my-domain,dc=com"
checkpoint 1024 15
rootdn "cn=Manager,dc=my-domain,dc=com"
改为
suffix "dc=www,dc=example,dc=com"
checkpoint 1024 15
rootdn "cn=Manager,dc=www,dc=example,dc=com"
rootpw {SSHA}cM5gJrd3iDG2p13B+f1gpFGH3pFP6hWh
完成,检查配置文件
[root@ylkj openldap]# slaptest -f slapd.conf
56e182f3 bdb_db_open: warning - no DB_CONFIG file found in directory /var/lib/ldap: (2).(看这里,显示DB_CONFIG没找到 )
Expect poor performance for suffix "dc=my-domain,dc=com".
56e182f3 bdb_db_open: database "dc=my-domain,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
56e182f3 backend_startup_one (type=bdb, suffix="dc=my-domain,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)
解决方法: cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
同时修改 /var/lib/ldap/的权限,待会ldap启动时会在下面生成一些文件,不然报错
chown -R ldap.ldap /var/lib/ldap
继续检查配置文件
[root@ylkj openldap]# slaptest -f slapd.conf
56e183c1 bdb_db_open: database "dc=my-domain,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
56e183c1 backend_startup_one (type=bdb, suffix="dc=my-domain,dc=com"): bi_db_open failed! (2)(这个文件需要登slapd启动时,才会生成 所以现在没有 不用管)
slap_startup failed (test would succeed using the -u switch)(这个文件需要登slapd启动时,才会生成 所以现在没有 不用管)
当然也可以用加上-u查看 是没错的
[root@ylkj openldap]# slaptest -f slapd.conf -u
config file testing succeeded
删掉slapd.d下的文件,重新生成 不然待会启动时会报错
rm -rf slapd.d/* ,
不能把slapd.d 这个目录给删了,否则进行下面一步时也会出错
[root@ylkj openldap]# slaptest -f slapd.conf -F slapd.d -u
config file testing succeeded
同时修改slapd.d的属主
chown -R ldap.ldap slapd.d
接下来启动slapd, 哈哈 不容易啊
[root@ylkj openldap]# service slapd start
Starting slapd: [ OK ]
接下来我们需要创建用户并把用户导入到ldap里面去
useradd user1;useradd user2;useradd user3
同时给用户创建密码(不要忘了这步,不然弄好也是白忙活)
echo “密码”| passwd --stdin user1
echo “密码”| passwd --stdin user2
echo “密码”| passwd --stdin user3
安装及配置迁移工具
[root@openldap-master openldap]# yum install migrationtools -y
[root@openldap-master openldap]# cd /usr/share/migrationtools/
[root@openldap-master migrationtools]# vi migrate_common.ph
70 # Default DNS domain
71 $DEFAULT_MAIL_DOMAIN = "www.example.com";
72
73 # Default base
74 $DEFAULT_BASE = "dc=www,dc=example,dc=com";
主要的概念:
dn:唯一区分名
dc:所属区域
ou:所属组织
cn/uid:全名/登录ID
运行脚本migrate_base.pl,它会创建根项,并为 Hosts、Networks、Group和 People 等创建低一级的组织单元,指定为base.ldif文件,这里我们只有下面这3个
[root@openldap-master migrationtools]# ./migrate_base.pl >base.ldif
[root@openldap-master migrationtools]#cat base.ldif (你可以看一下这个文件的生成内容)
接下来创建用户和组的数据库文件
[root@openldap-master migrationtools]# grep ^user /etc/passwd >user
[root@openldap-master migrationtools]# ./migrate_passwd.pl user ./user.ldif
[root@openldap-master migrationtools]# grep ^user /etc/group >group
[root@openldap-master migrationtools]# ./migrate_group.pl group ./group.ldif
[root@openldap-master migrationtools]# ll base.ldif user.ldif group.ldif
迁移系统用户到ldap数据库
ldapadd -D "cn=Manager,dc=www,dc=example,dc=com" -W -x -f /usr/share/migrationtools/base.ldif
Enter LDAP Password:
adding new entry "dc=www,dc=example,dc=com"
adding new entry "ou=People,dc=www,dc=example,dc=com"
adding new entry "ou=Group,dc=www,dc=example,dc=com"
ldapadd -D "cn=Manager,dc=www,dc=example,dc=com" -W -x -f /usr/share/migrationtools/user.ldif
Enter LDAP Password:
adding new entry "uid=user1,ou=People,dc=www,dc=example,dc=com"
adding new entry "uid=user2,ou=People,dc=www,dc=example,dc=com"
adding new entry "uid=user3,ou=People,dc=www,dc=example,dc=com"
ldapadd -D "cn=Manager,dc=www,dc=example,dc=com" -W -x -f /usr/share/migrationtools/group.ldif
Enter LDAP Password:
adding new entry "cn=user1,ou=People,dc=www,dc=example,dc=com"
adding new entry "cn=user2,ou=People,dc=www,dc=example,dc=com"
adding new entry "cn=user3,ou=People,dc=www,dc=example,dc=com"
如果出现错误:
ldap_bind: Invalid credentials (49)
就表示你要么给出了错误的”cn=”条目,要么给出了错误的密码
Enter LDAP Password:(输入你刚才设置的密码),正确之后会显示:
查看导入的用户: ldapsearch -x -b "dc=www,dc=example,dc=com"
记下这个 dn 的内容
# user1, People(请注意这,不是group,不要弄错了), www.ulink.com
dn: uid=user1,ou=People,dc=www,dc=ulink,dc=com
接下来在web页面添加用户,其实现在可以把之前在服务器添加的用户给删掉(安全起见)图二输入密码和账号为空,不能输
dn 输入刚才记下的
下面的请按我的设置一样的,我尝试改了个,出错了(导致我重弄了5,6遍)
phpldapadmin安装
yum安装apache+php环境
yum install httpd php php-bcmath php-gd php-mbstring php-xml php-ldap
yum安装phpldapadmin
yum install phpldapadmin #要有epel源
修改配置文件,增加
vi /etc/httpd/conf/httpd.conf
ServerName www.ulink.com
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.10.0/24
Allow from ::1
修改phpldapadmin配置文件
1
2
3
4 [root@openldap-master ~]# vi /etc/phpldapadmin/config.php
# line 397: uncomment, line 398: make it comment
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');
输入ip或域名/ldapadmin进行访问,填上ldap管理员的密码,然后在里面添加用户即可,要想用户生效,还需去redmine的ldap用户认证下去配置
检查已安装版本
#检查是否安装了低版本的SVN
[root@localhost /]# rpm -qa subversion
#卸载旧版本SVN
[root@localhost modules]# yum remove subversion
安装SVN
[root@localhost modules]# yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql
确认已安装了svn模块
[root@localhost /]# cd /etc/httpd/modules
[root@localhost modules]# ls | grep svn
mod_authz_svn.so
mod_dav_svn.so
验证安装
检验已经安装的SVN版本信息
[root@localhost modules]# svnserve --version
svnserve,版本 1.6.11 (r934486)
代码库创建
SVN软件安装完成后还需要建立SVN库
[root@localhost modules]# mkdir -p /home/user/svn/project1
[root@localhost modules]# svnadmin create /home/user/svn/project1
执行上面的命令后,自动建立project库,查看文件夹/home/user/svn/project1发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。
配置代码库
进入上面生成的文件夹conf下,进行配置
[root@localhost modules]# cd /home/user/svn/project1/conf
用户密码passwd配置
[root@localhost password]# cd /home/user/svn/project1/conf
[root@admin conf]# vi passwd
修改passwd为以下内容:
[users]
# harry = harryssecret
# sally = sallyssecret
hw=123456
权限控制authz配置
[root@admin conf]# vi authz
目的是设置哪些用户可以访问哪些目录,向authz文件追加以下内容:
#设置[/]代表根目录下所有的资源
[/]
hw=rw
服务svnserve.conf配置
[root@admin conf]# vi svnserve.conf
追加以下内容:
[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限
auth-access=write
#密码数据库的路径
password-db=passwd
#访问控制文件
authz-db=authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm=/home/user/svn/
配置防火墙端口
[root@localhost conf]# vi /etc/sysconfig/iptables
添加以下内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
保存后重启防火墙
[root@localhost conf]# service iptables restart
启动SVN
svnserve -d -r /home/user/svn/
测试
SVN服务已经启动,使用客户端测试连接。
客户端连接地址:svn://192.168.10.254
用户名/密码: hw/123456
测试创建文件夹等操作。
我们现在结合svn+ldap
在svn目录下,创建多个项目
# svnadmin create project2
# svnadmin create project3
# svnadmin create project4
# svnadmin create project5
# ls
project1 project2 project3 project4 project5
# 创建authz.conf文件,作为工程权限控制的配置文件。(配置语法请参考:http://svnbook.red-bean.com/en/1.5/svn.serverconfig.pathbasedauthz.html)
# vi authz.conf
Authz.conf代码
1. [groups]
2. admin=hw
3.
4. [/]
5. @admin=rw
6. *=
7. #*=r
8.
9.
10. [project1:/]
11. hw=r
完成以上后,待用,后续使用apache整合。
现在针对apache,做配置
编辑httpd.conf,加入
#这里如果写成/svn,访问时报错
Forbidden
You don't have permission to access /svn/ on this server.
DAV svn
SVNListParentPath on
SVNParentPath /home/user/svn/
# AuthUserfile /home/user/svn/conf/passwd
AuthzSVNAccessFile /home/user/svn/authz.conf
# 在ldap找不到账号的情况下可以使用其它的认证方式(如,密码文件)
AuthzLDAPAuthoritative off
# openLDAP的管理账户
AuthLDAPBindDN "cn=Manager,dc=www,dc=ulink,dc=com"
AuthLDAPBindPassword ******(ldap的管理员密码)
AuthBasicProvider ldap
# 认证数据来源:"ou=rd,dc=cq,dc=feinno,dc=com" 下所有子entity的uid作为认证用户名
AuthLDAPURL "ldap://192.168.10.254:389/ou=People,dc=www,dc=ulink,dc=com?uid?sub?(objectClass=*)"
#这个uid如果写成cn,访问 ip/svn/ 时会弹出一个验证界面,不断验证 不能成功
# http 基本认证
AuthType Basic
AuthName "ok"
Require valid-user
# 设置目录权限,实现列表所有工程目录
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
还有一个问题就是不能直接在svn目录下生成库文件,否则在ldap认证时会报错
[Wed Mar 16 18:02:55 2016] [error] [client 192.168.10.200] (20014)Internal error: Can't open file '/home/user/svn/project1/format': No such file or directory, referer: http://192.168.10.254/svn/
[Wed Mar 16 18:02:55 2016] [error] [client 192.168.10.200] Could not fetch resource information. [500, #0], referer: http://192.168.10.254/svn/
我所碰到的就是这三个问题(记得查看下httpd的错误日志,很有用),另外网页上访问时是这样的 ip/svn/,输入你的ldap账号和密码就行了
效果图,注意一下网页缓存
ldap用户自己更改密码
openldap 2.4 版本 系统认证无法更改密码,错误提示:
openldap: LDAP password information update failed: Insufficient access
tail /var/log/securce
passwd: pam_unix(passwd:chauthtok): user "test" does not exist in /etc/passwd
解决方案:
在 sldap.conf 中加入:
access to attrs=userPassword
by self write
by anonymous auth
by dn.base="cn=Manager,dc=www,dc=ulink,dc=com" write
by * none
access to *
by self write
by dn.base="cn=Manager,dc=www,dc=ulink,dc=com" write
by * read
上面行最主要的加在database config 前面,否则不生效。
然后执行
rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d
service slapd restart
编辑配置文件 vim /etc/phpldapadmin/config.php
这里设为dn登录方式,如果设成了uid登录方式,用户可以改密码,但是ldap管理员登录不了
这样虽然能登陆,但是改密码会报错(可以改得了密码)
正确方式:
如果要重新导入用户需要删除/var/lib/ldap下的除了DB_CONFIG 下的所有文件在把
Sldap.d下的所有文件删除 之后重新导入三个ldif (user.ldif,basc.ldif,group.ldif)
重新生成sldap.d下的文件slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
之后重新启动sqlap文件
重新导入的用户生效