单独安装svn服务:

安装svn软件

yum install subversion

创建根目录

mkdir -p /var/www/svn

创建版本库repos

svnadmin create /var/www/svn/repos

查看是否安装成功,出现版本信息为成功

svnserve --version

修改vim /var/www/svn/repos/conf/svnserve.conf 配置文件  

去掉如下几行的注释
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
###################################################################
anon-access = none      # 使非授权用户无法访问
auth-access = write          # 使授权用户有写权限
password-db = passwd           # 指明密码文件路径
authz-db = authz # 访问控制文件
####################################################################

修改passwd文件

[users]

# harry = harryssecret
# sally = sallyssecret user1 = 123
user2 = 123 用户名 = 密码
各语句都必须顶格写, 左侧不能留空格, 否则会出错.

修改authz认证文件

vim /var/www/svn/repos/conf/auth
[groups] admin = user1 [repos:/] @admin = rw user2 = r 将用户添加到组,可以添加多个用户,用户之间用逗号分开 各语句都必须顶格写, 左侧不能留空格, 否则会出错.

启动svn服务:

svnserve -d -r /var/www/svn/

访问地址:

svn://ip/repos

至此单独svn的部署完毕!  

Apache+SVN配置

  

开始安装步骤:

安装subversionhttpd mod_dav_svn

yum install httpd -y 

yum install subversion mod_dav_svn -y

安装好svn后svn的配置文件默认在Apache的目录/etc/httpd/conf.d/下

[root@localhost~]# ll /etc/httpd/conf.d/
总用量 20
-rw-r--r-- 1 root root 1796 4月 17 2014 perl.conf
-rw-r--r--. 1 www www 674 10月 31 2014 php.conf
-rw-r--r-- 1 www www 392 7月 18 23:24 README
-rw-r--r-- 1 www www 1663 8月 16 15:47 subversion.conf
-rw-r--r-- 1 www www 299 7月 12 19:00 welcome.conf  

打开配置文件subversion.conf

[root@localhost conf.d]# more subversion.conf    

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so #
# Example configuration to enable HTTP access for a directory
# containing Subversion repositories, "/var/www/svn". Each repository
# must be both:

文件开头这两行为加载svn模块,如果没有则表示安装不成功.

让apache支持svn访问,并制定svn的版本库目录位置

vim /etc/httpd/conf.d/subversion.conf

<Location /repos>                             #创建的svn根目录
DAV svn
SVNPath /var/www/svn/repos/            #svn版本库路径
AuthType Basic
AuthName "svn"
AuthUserFile /var/www/svn/repos/conf/passwd   #svn的密码文件路径
Require valid-user
</Location>  

创建svn版本库:

mkdir -p /var/www/svn

svnadmin create /var/www/svn/repos

chown -R apache:apache /var/www/svn/repos

repos目录下会生成七个文件:

[root@localhost ]# ll /var/www/svn/repos/
总用量 28
drwxr-xr-x 2 www www 4096 8月 16 13:00 conf
drwxr-xr-x 3 www www 4096 8月 16 16:42 dav
drwxr-sr-x 6 www www 4096 8月 16 16:42 db
-r--r--r-- 1 www www 2 8月 15 18:37 format
drwxr-xr-x 2 www www 4096 8月 15 18:37 hooks
drwxr-xr-x 2 www www 4096 8月 15 19:28 locks
-rw-r--r-- 1 www www 229 8月 15 18:37 README.txt

添加用户分配权限

创建svn的账号,并制定密码文件:

htpasswd –c /var/www/svn/repos/conf/passwd  admin

//例如创建用户名为admin,会提示输入密码,密码最好有点复杂强度。

//注意这里的路径一定要和上面/etc/httpd/conf.d/subversion.conf文件中的路径一样,参数“-c”的意思是创建这个文件,再次创建其他账号的时候不要再加“-c”否则文件会被覆盖掉。

创建权限控制文件 authz,也可以直接使用默认文件  

[groups]        				#定义组

manager = admin
yanfa = user1,user2      #组名为yanfa,组内的成员为user1,user2
ceshi = test1,test2 [repos:/] #定义用户或组对svn根目录的权限
@manager = rw           #manager组有读和写的权限
* = r [repos:/yanfa]
@admin = rw
@yanfifa = rw
* = r
[repos:/ceshi]
@ceshi = rw
* = r

这里的文件夹repos:/yanfa和repos:/ceshi 并不是在svn根目录下创建的,而是由有读写权限的用户上传上去的。

至此,svn+Apache搭建完毕,启动服务

/etc/init.d/httpd start
svnserve -d -r /var/www/svn/ #svn默认端口为3690,关闭svn可以killall svnserve

访问svn地址并跟踪日志信息:

http://ip地址/repos

[root@localhost ~]# ls -lh /etc/httpd/logs/
总用量 104K
-rw-r--r-- 1 root root 211K 8月 16 18:26 access_log
-rw-r--r-- 1 root root 395K 8月 16 18:26 error_log

Linux下实现客户端修改SVN密码 

  

  

注意:
1、ChangePasswd.ini、ChangePasswd.cgi文件必须放在apache的cgi-bin(根据自己电脑上的路径来,我的是/var/www/cgi-bin)下。
2、修改密码文件的所有者是apache,如果不是,执行chown apache:apache passwd(密码文件)。
3、如果密码是用htpasswd -c 或-m所建,执行htpasswd -b /var/www/svn/repos/conf/passwd usrname password更新。

一、创建ChangePasswd.ini文件

创建一个空文件:
touch /var/www/cgi-bin/ChangePasswd.ini  
a.将以下内容复制到ChangePasswd.ini中
b.注意将文件中authuserfile、logfile处改为你自己的路径。第一行为所建用户和密码文件的路径。第二行为修改密码的日志的路径(该文件是自己建的)。
cat /var/www/cgi-bin/ChangePasswd.ini
[path]
authuserfile=/var/www/svn/repos/conf/passwd
logfile=/var/www/cgi-bin/ChangePasswd.log
[setup]
pwdminlen=
[html]
title=SVN用户密码自助修改
description=SVN用户密码自助修改
yourname=用户名
oldpwd=旧密码
newpwd1=新密码
newpwd2=确认新密码
btn_change=修 改
btn_reset=重 置 changepwdok=成功修改密码
changepwdfailed=修改密码失败
servererror=服务器错误
passmustgreater=新密码位数必须大于
twopassnotmatched=两密码不一致
entername=请输入用户名
enterpwd=密码未输入
errorpwd=你的密码不正确
back=返回

ChangePasswd.ini文件内容

二、创建ChangePasswd.cgi文件并设置其权限

创建一个空文件:

touch /var/www/cgi-bin/ChangePasswd.cgi
a.将以下内容复制到ChangePasswd.cgi中,设置其权限为755(可执行)
b.命令:chmod 755 ChangePasswd.cgi.
c.文件中126行改为自己的ChangePasswd.ini文件存放位置; my $inifile = "/var/www/cgi-bin/ChangePasswd.ini";
[root@localhost~]# cat /var/www/cgi-bin/ChangePasswd.cgi
#!/usr/bin/perl -w use strict;
use CGI;
my $time = localtime;
my $remote_id = $ENV{REMOTE_HOST} || $ENV{REMOTE_ADDR};
my $admin_email = $ENV{SERVER_ADMIN}; my $cgi = new CGI;
my $pwd_not_alldiginal = "密码不能全为数字";
my $pwd_not_allchar = "密码不能全为字符";
my $user_not_exists ="该用户不存在";
my $file_not_found ="文件不存在,请联系管理员"; my $authuserfile;
my $logfile;
my $pwdminlen;
my $title;
my $description;
my $yourname;
my $oldpwd;
my $newpwd1;
my $newpwd2;
my $btn_change;
my $btn_reset; my $changepwdok;
my $changepwdfailed;
my $oldpwderror;
my $passmustgreater;
my $twopassnotmatched;
my $entername;
my $enterpwd;
my $errorpwd;
my $back; &IniInfo; if ($cgi -> param())
{#
my $User = $cgi->param('UserName');
my $UserPwd = $cgi->param('OldPwd');
my $UserNewPwd = $cgi->param('NewPwd1');
my $MatchNewPwd = $cgi->param('NewPwd2'); if (!$User)
{&Writer_Log("Enter no user name");
&otherhtml($title,$entername,$back);}
elsif (!$UserPwd )
{&Writer_Log("Enter no OldPasswd");
&otherhtml($title,$enterpwd,$back); }
elsif (length($UserNewPwd)<$pwdminlen)
{&Writer_Log("Password's length must greater than".$pwdminlen);
&otherhtml($title,$passmustgreater.$pwdminlen,$back);}
elsif ($UserNewPwd =~/^\d+$/)
{&Writer_Log("New Passwd isn't all diginal");
&otherhtml($title,$pwd_not_alldiginal,$back);}
elsif ($UserNewPwd =~/^[A-Za-z]+$/)
{&Writer_Log("New Passwd isn't all char");
&otherhtml($title,$pwd_not_allchar,$back);}
elsif ($UserNewPwd ne $MatchNewPwd)
{&Writer_Log("Two new passwords are not matched");
&otherhtml($title,$twopassnotmatched,$back);}
else
{if($authuserfile)
{#
open UserFile, "<$authuserfile" or die "打开文件失败:$!";
while (<UserFile>)
{#
my $varstr=$_; if($varstr =~/($User)/)
{#
my $eqpos =index($varstr, ":");
my $UserName = substr($varstr,,$eqpos);
my $cryptpwd = substr($varstr,$eqpos + ,); next if($UserName ne $User); if(crypt($UserPwd,$cryptpwd) eq $cryptpwd)
{#a
my $rc = system("/usr/bin/htpasswd -b $authuserfile $User $UserNewPwd");
if ($rc == )
{#
&Writer_Log( $User.":Change Passwd");
&otherhtml($title,$changepwdok,$back);
}#
else
{#
&Writer_Log( $User.":Change Passwd Failed");
&otherhtml($title,$changepwdfailed,$back);
}#
exit;
}#a
else
{#b
&Writer_Log("Old Passwd is Incorrect ");
&otherhtml($title,$errorpwd,$back);
}#b
exit;
}#
else
{#
if(eof)
{ &Writer_Log($User.":no this user");
&otherhtml($title,$user_not_exists,$back);
exit;
}
else
{next;}
}#
}#
close UserFile;
}#
else
{#
&Writer_Log($authuserfile.":no found");
&otherhtml($title,$file_not_found,$back);
}#
}
}#
else
{&Index_Html;} sub IniInfo{
my $inifile = "/var/www/cgi-bin/ChangePasswd.ini";
open CGI_INI_FILE, "<$inifile" or die "打开文件失败:$!";;
while (<CGI_INI_FILE>)
{
my $eqpos =index($_,'=');
my $len = length($_); if ($_ =~/authuserfile/)
{$authuserfile= substr($_, $eqpos + , $len - $eqpos -);}
elsif ($_ =~/logfile/)
{$logfile= substr($_, $eqpos + );}
elsif ($_ =~/pwdminlen/)
{$pwdminlen= substr($_, $eqpos + );}
elsif ($_ =~/title/)
{$title = substr($_, $eqpos + );}
elsif ($_ =~/description/)
{$description = substr($_, $eqpos + );}
elsif ($_ =~/yourname/)
{$yourname = substr($_, $eqpos + );}
elsif ($_ =~/oldpwd/)
{$oldpwd= substr($_, $eqpos + );}
elsif ($_ =~/newpwd1/)
{$newpwd1= substr($_, $eqpos + );}
elsif ($_ =~/newpwd2/)
{$newpwd2= substr($_, $eqpos + );}
elsif ($_ =~/btn_change/)
{$btn_change = substr($_, $eqpos + );}
elsif ($_ =~/btn_reset/)
{$btn_reset = substr($_, $eqpos + );}
elsif ($_ =~/changepwdok/)
{$changepwdok = substr($_, $eqpos + );}
elsif ($_ =~/changepwdfailed/)
{$changepwdfailed = substr($_, $eqpos + );}
elsif ($_ =~/oldpwderror/)
{$oldpwderror = substr($_, $eqpos + );}
elsif ($_ =~/passmustgreater/)
{$passmustgreater = substr($_, $eqpos + );}
elsif ($_ =~/twopassnotmatched/)
{$twopassnotmatched = substr($_, $eqpos + );}
elsif ($_ =~/entername/)
{$entername = substr($_, $eqpos + );}
elsif ($_ =~/enterpwd/)
{$enterpwd= substr($_, $eqpos + );}
elsif ($_ =~/errorpwd/)
{$errorpwd= substr($_, $eqpos + );}
elsif ($_ =~/back/)
{$back = substr($_, $eqpos + );}
}
close CGI_INI_FILE;
} sub Index_Html
{
print "Content-type: text/html\n\n";
print <<END_OF_PAGE;
<html >
<head>
<title>$title</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body> <HR> <center><h1>$description</h1>
</center>
<form method="POST" enctype="multipart/form-data" action="/cgi-bin/ChangePasswd.cgi">
<br>
<TABLE align="center">
<TR><TD class="t_text">$yourname</TD><TD><input type="text" name="UserName" /></TD></TR>
<TR><TD class="t_text">$oldpwd</TD><TD><input type="password" name="OldPwd" /></TD></TR>
<TR><TD class="t_text">$newpwd1</TD><TD><input type="password" name="NewPwd1" /></TD></TR>
<TR><TD class="t_text">$newpwd2</TD><TD><input type="password" name="NewPwd2" /></TD></TR>
</TABLE>
<br>
<TABLE align="center">
<TR><TD><input type="submit" name="chgpasswd" value="$btn_change"> <input type="reset" value="$btn_reset"></TD></TR>
</TABLE>
</form>
<HR>
<font color="#FF0000">注意:新密码位数必需大于$pwdminlen,且为字母与数字组合</font> </body>
</html>
END_OF_PAGE
} sub otherhtml{
print "Content-type: text/html\n\n"; print <<END_OF_PAGE;
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>$_[]</title>
</head> <body>
<p align="center"><font size="">$_[]</font></p>
<p align="center"><a href="/cgi-bin/ChangePasswd.cgi"><font size="">$_[]</font></a></p> <HR>
</body> </html>
END_OF_PAGE
} sub Writer_Log{
if($logfile)
{
my $loginfo ="[".$time."] "." [".$remote_id."] "." || ".$_[];
open LOGFILE,">>$logfile" or die "Couldn't open LOG FILE for writing: $!";
print LOGFILE ("$loginfo\n");
close LOGFILE;
}
}

ChangePasswd.cgi文件内容

创建ChangePasswd.log文件并设置其权限。

进入目标位置(即你想创建ChangePasswd.log的位置),如: /var/www/cgi-bin(根据自己的位置定),创建一个名为ChangePasswd.log的文件并赋予该文件写的权限:
 
命令:
chmod 666 ChangePasswd.log 
四、修改密码
通过http://ip/cgi-bin/ChangePasswd.cgi修改密码

#80对应自己设置的端口。
至此,apache+svn及客户端更改密码配置完成,如有错误查看日志解决!
 
 

参考文档:

http://blog.163.com/dk_linux/blog/static/2032261662014101110411064/

http://blog.sina.com.cn/s/blog_dbc555ef0102v73r.html

  

centos apache svn配置的更多相关文章

  1. CentOS 6.5 Apache+SVN配置

    yum -y install subversion #安装SVN svnserve -- version #查看svn版本信息确定是否安装 yum -y install httpd #安装Apache ...

  2. centos7+apache+svn配置 踩坑,注意权限问题。apache应用目录checkout应用 必须用这个命令:svn co file:///home/svn/test/ test ,通过svn add * &&commit 及任意修改都是不行的

    阅读帮助 命令提示符 [root@server-002 ~]# 表示当前服务root用户执行的命令 [svn@server-002 ~]$ 表示普通用户svn执行的命令 [root@localhost ...

  3. 运维之Centos apache vsftpd配置

    安装Apache yum install httpd -y chkconfig httpd on service httpd start 配置一下iptables iptables -I INPUT ...

  4. CentOS下Apache+SVN+LDAP的安装与配置

    上班接近4个月了,在公司做配置管理工程师,主要是在Linux下对公司的源代码以及项目发布进行管理.4个月接触了好多新知识,也对各种工具的集成使用搞得云里来雾里去的,所以打算自己搭建一套环境,进行测试. ...

  5. CentOS6.5 yum安装 apache+svn安装配置

    首页是关于svn的备份和还原 比较快捷的方式: 备份:svnadmin hotcopy /opt/svn/svntest/ /var/tmp/svntest_20120604 --clean-logs ...

  6. 在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)

    [题外话] 闲的无聊竟然想尝试测试自己做的项目在不同操作系统上的性能表现,所以决定试试在Linux上部署Apache和Mono的环境.由于平时很少接触Linux,所以从网上找了几篇文章(附在相关链接中 ...

  7. 在Linux(Ubuntu/openSUSE/CentOS)下配置ASP.NET(Apache + Mono)转载+补充

    错误:Network error: Connection refused 解决办法: 执行 $sudo apt-get install openssh-server 安装ssh协议 执行ifconfi ...

  8. Centos下安装配置LAMP(Linux+Apache+MySQL+PHP)

    Centos下安装配置LAMP(Linux+Apache+MySQL+PHP)   关于LAMP的各种知识,还请大家自行百度谷歌,在这里就不详细的介绍了,今天主要是介绍一下在Centos下安装,搭建一 ...

  9. CentOS 7安装配置Apache HTTP Server

    原文 CentOS 7安装配置Apache HTTP Server   RPM安装httpd # yum -yinstall httpd //安装httpd会自动安装一下依赖包: apr apr-ut ...

随机推荐

  1. 012.对netmap API的解读

    一.简要说明: 1.netmap API主要为两个头文件netmap.h 和netmap_user.h ,当解压下载好的netmap程序后,在./netmap/sys/net/目录下,本文主要对这两个 ...

  2. Mac安装Windows 10的简明教程

    每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...

  3. git 设置代理服务器

    git可以通过以下命令设置代理服务器 git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:proxypo ...

  4. netty4虚拟内存不断飙升

    去年升级过一个老的netty3的程序到netty4,近期突然注意到一个问题,就是这个程序随着时间虚拟内存会不断升高.之前升级的时候担心存在内存泄露,所以还特意用jstate跟踪过gc回收的情况,并没有 ...

  5. css3实现3D立体翻转效果

    1.在IE下无法显示翻转效果,火狐和谷歌可以 /*样式css*/ .nav-menu li { display: inline; } .nav-menu li a { color: #fff; dis ...

  6. 虚拟机linux上网问题

    VMware中虚拟机网络的三种设置 1.桥接(bridged)(设置上网比较繁琐,但是在嵌入式开发中比较有用)2.NAT(上网比较简单,但是不能用于嵌入式开发中)3.Host only (该模式下仅主 ...

  7. AC日记——约瑟夫问题 codevs 1282

    1282 约瑟夫问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description 有编号从1到N的N个小 ...

  8. 15-前端开发之JavaScript

    什么是 JavaScript ? JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出 ...

  9. Java 基础【13】 文件(文件夹) 创建和删除

    使用 java.io.file 创建文件(文件夹),算是 java 最基础的知识,但实战项目中还是需要知晓细节. 比如 File 类中的 mkdir() 和 mkdirs() 的区别. JDK API ...

  10. ECMAScript 5(ES5)中bind方法简介备忘

    一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...