ldap+phpldapadmin+svn

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ldap+phpldapadmin+svn相关的知识,希望对你有一定的参考价值。

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

创建管理员密码: 

[[email protected] 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


完成,检查配置文件


[[email protected] 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


继续检查配置文件

[[email protected] 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查看 是没错的

[[email protected] openldap]# slaptest -f slapd.conf  -u

config file testing succeeded


删掉slapd.d下的文件,重新生成 不然待会启动时会报错

rm -rf  slapd.d/* ,

不能把slapd.d 这个目录给删了,否则进行下面一步时也会出错


[[email protected] openldap]# slaptest -f slapd.conf  -F slapd.d -u

config file testing succeeded


同时修改slapd.d的属主

chown -R ldap.ldap slapd.d


接下来启动slapd, 哈哈 不容易啊


[[email protected] 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


安装及配置迁移工具


[[email protected] openldap]# yum install migrationtools -y

[[email protected] openldap]# cd /usr/share/migrationtools/


[[email protected] 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个

[[email protected] migrationtools]# ./migrate_base.pl >base.ldif

[[email protected] migrationtools]#cat base.ldif  (你可以看一下这个文件的生成内容)


接下来创建用户和组的数据库文件

[[email protected] migrationtools]# grep ^user /etc/passwd >user

[[email protected] migrationtools]# ./migrate_passwd.pl user ./user.ldif

[[email protected] migrationtools]# grep ^user /etc/group >group

[[email protected] migrationtools]# ./migrate_group.pl group ./group.ldif

[[email protected] 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

 

<Directory /usr/share/phpldapadmin/htdocs>

  Order Deny,Allow

  Deny from all

  Allow from 127.0.0.1 192.168.10.0/24

  Allow from ::1

</Directory>


修改phpldapadmin配置文件



1

2

3

4 [[email protected] ~]# 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

[[email protected] /]# rpm -qa subversion

#卸载旧版本SVN

[[email protected] modules]# yum remove subversion

安装SVN

[[email protected] modules]# yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql

确认已安装了svn模块

[[email protected] /]# cd /etc/httpd/modules

[[email protected] modules]# ls | grep svn

mod_authz_svn.so

mod_dav_svn.so

验证安装

检验已经安装的SVN版本信息 

[[email protected] modules]# svnserve --version

svnserve,版本 1.6.11 (r934486)

代码库创建

SVN软件安装完成后还需要建立SVN库 

[[email protected] modules]# mkdir -p /home/user/svn/project1

[[email protected] modules]# svnadmin create /home/user/svn/project1

执行上面的命令后,自动建立project库,查看文件夹/home/user/svn/project1发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。

配置代码库

进入上面生成的文件夹conf下,进行配置 

[[email protected] modules]# cd /home/user/svn/project1/conf

用户密码passwd配置

[[email protected] password]# cd /home/user/svn/project1/conf

[[email protected] conf]# vi   passwd

修改passwd为以下内容:

[users]

# harry = harryssecret

# sally = sallyssecret

hw=123456

权限控制authz配置

[[email protected] conf]# vi   authz

目的是设置哪些用户可以访问哪些目录,向authz文件追加以下内容:

#设置[/]代表根目录下所有的资源 

[/]

hw=rw

服务svnserve.conf配置

[[email protected] 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/

配置防火墙端口

[[email protected] conf]# vi /etc/sysconfig/iptables

添加以下内容: 

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT

保存后重启防火墙 

[[email protected] 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.


<Location /svn/>

         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

    </Location>

还有一个问题就是不能直接在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文件

重新导入的用户生效


本文出自 “学习linux” 博客,请务必保留此出处http://10265013.blog.51cto.com/10255013/1752676

以上是关于ldap+phpldapadmin+svn的主要内容,如果未能解决你的问题,请参考以下文章

ldap第二天-yum安装LDAP + phpLDAPadmin

搭建openldap与phpldapadmin

搭建ldap服务器及web管理服务--phpldapadmin

Linux系统下安装配置 OpenLDAP + phpLDAPadmin

ldap 报错整理

Centos6.8OpenLDAP+PhpLdapAdmin部署