SVN密码在线自主修改

为了进一步提高SVN管理规范和账号安全性,要求用户能自主修改SVN的登录密码,而默认SVN好像是不提供这个功能的,所以只能另辟蹊径,参考网上资料,利用PHP来,实现通过HTTP访问的方式在线自主修改密码功能。

  一、SVN配置文件  

1.1 修改SVN配置文件

[root@svnback172 svn]#vim /etc/httpd/conf.d/svn.conf

#之前安装SVN的时候,已经手动创建这个文件了,详细可以参考‘SVN安装篇

添加如下代码:

<Directory "/var/www/html/sample">
        Require valid-user
        AuthType Basic
        AuthName "svn tools"
        AuthUserFile /data/svn/sample/.htpasswd
</Directory>

参数说明:

    <Directory " ">:指定实现SVN密码修改功能的PHP页面路径,下面会手动创建

    AuthUserFile :指定SVN账号密码的文件,重点就是针对该文件进行修改操作

  二、配置PHP修改页面  

2.1 创建存放PHP页面的目录,每个库一个单独目录,便于管理

[root@svnback172 svn]#mkdir /var/www/html/sample && cd /var/www/html/sample

注意:PHP页面需要放在http的根目录下,因为到时候修改SVN密码是用http页面进行在线修改的。

2.2 手动创建PHP页面,修改密码的功能就是这个页面实现的

[root@svnback172 svn]#vim index.php
<?php
//经过 AuthType Basic 认证的用户名
$username = $_SERVER["PHP_AUTH_USER"];
//经过 AuthType Basic 认证的密码 
$authed_pass = $_SERVER["PHP_AUTH_PW"];
//从界面上输入的原密码  
$input_oldpass = (isset($_REQUEST["oldpass"]) ? $_REQUEST["oldpass"] : "");
//界面上输入的新密码  
$newpass = (isset($_REQUEST["newpass"]) ? $_REQUEST["newpass"] : "");
//界面上输入的重复密码  
$repeatpass = (isset($_REQUEST["repeatpass"]) ? $_REQUEST["repeatpass"] : "");
//以hide方式提交到服务器的action  
$action = (isset($_REQUEST["action"]) ? $_REQUEST["action"] : "");
if($action!="modify"){  
$action = "view";  
}  
else if($authed_pass!=$input_oldpass){  
$action = "oldpasswrong";  
}  
else if(empty($newpass)){  
$action = "passempty";  
}  
else if($newpass!=$repeatpass){  
$action = "passnotsame";  
}  
else{  
$action = "modify";  
}  
?>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=GBK">  
<title>Subversion 在线自助密码修改</title>  
</head>  
<body>  
<?php  
//action=view 显示普通的输入信息  
if ($action == "view"){  
?>  
<script language = "javaScript">  
<!--  
function loginIn(myform)  
{  
var newpass=myform.newpass.value;  
var repeatpass=myform.repeatpass.value;  
if(newpass==""){  
alert("请输入密码!");  
return false;  
}  
if(repeatpass==""){  
alert("请重复输入密码!");  
return false;  
}  
if(newpass!=repeatpass){  
alert("两次输入密码不一致,请重新输入!");  
return false;  
}  
return true;  
}  
//-->  
</script>  
<style type="text/css">  
<!--  
table {  
border: 1px solid #CCCCCC;  
background-color: #f9f9f9;  
text-align: center;  
vertical-align: middle;  
font-size: 9pt;  
line-height: 15px;  
}  
th {  
font-weight: bold;  
line-height: 20px;  
border-top-width: 1px;  
border-right-width: 1px;  
border-bottom-width: 1px;  
border-left-width: 1px;  
border-bottom-style: solid;  
color: #333333;  
background-color: f6f6f6;  
}  
input{  
height: 18px;  
}  
.button {  
height: 20px;  
}  
-->  
</style>  
<br><br><br>  
<form method="post">  
<input type="hidden" name="action" value="modify"/>  
<table width="220" cellpadding="3" cellspacing="8" align="center">  
<tr>  
<th colspan=2>Subversion 密码修改</th>  
</tr>  
<tr>  
<td>用户名:</td>  
<td align="left"> <?=$username?></td>  
</tr>  
<tr>  
<td>原密码:</td>  
<td><input type=password size=12 name=oldpass></td>  
</tr>  
<tr>  
<td>用户密码:</td>  
<td><input type=password size=12 name=newpass></td>  
</tr>  
<tr>  
<td>确认密码:</td>  
<td><input type=password size=12 name=repeatpass></td>  
</tr>  
<tr>  
<td colspan=2>  
<input onclick="return loginIn(this.form)" class="button" type=submit value="修 改">  
<input name="reset" type=reset class="button" value="取 消">  
</td>  
</tr>  
</table>  
</form>  
<?php  
}  
else if($action == "oldpasswrong"){  
$msg="原密码错误!";  
}  
else if($action == "passempty"){  
$msg="请输入新密码!";  
}  
else if($action == "passnotsame"){  
$msg="两次输入密码不一致,请重新输入!";  
}  
else{  
$passwdfile="/data/svn/sample/.htpasswd";  
$command='"/usr/bin/htpasswd" -b '.$passwdfile." ".$username." ".$newpass;  
system($command, $result);  
if($result==0){  
$msg="用户[".$username."]密码修改成功,请用新密码登陆.";  
}  
else{  
$msg="用户[".$username."]密码修改失败,返回值为".$result.",请和管理员联系!";  
}  
}  
if (isset($msg)){  
?>  
<script language="javaScript">  
//<!--  
alert("<?=$msg?>");  
window.location.href="<?=$_SERVER["PHP_SELF"]?>"  
//-->  
</script>  
<?php  
}  
?>  
</body>  
</html>

重点:第134行,需要修改对应SVN库的账户密码文件。

$passwdfile="/data/svn/sample/.htpasswd";

其实,这里已经可以通过‘http://IP/sample/index.php’自主修改密码了,但是为了后面的管理和使用方便,我们再创建一个统一修改密码的链接页面;

  三、配置密码修改页面  

3.1 手动创建http页面,用于指定SVN库进行密码修改

[root@svnback172 svn]#vim svn.html

添加如下代码:

<html>
	<head>
		<title>SVN密码在线自主修改</title>
		<style type="text/css">
			body{
				text-align:center
			}
			div div{
				text-align:center;
				padding: 2%;
			}
			.first_div {
				margin:2% auto;
			}
		</style>
	</head>
	<body>
		<div class="first_div">
			<h2>XXXXXXXX----SVN密码修改</h2>
			<div>
				<a href="http://IP/sample/index.php">sample</a>
			</div>
			
		</div>
	</body>
</html>

重点:第21行,需要修改对应SVN库的密码修改http路径

<a href="http://IP/sample/index.php">sample</a>

如果有多个,只需要添加<div> XXXXXXXXXXXXX </div>,20到22行之间的内容即可。

以上的SVN页面配置的非常简单,有需要修饰的自行美工,这里只提供最简单的功能。

  四、验证效果  

4.1 重启httpd服务

[root@svnback172 svn]#systemctl restart httpd

4.2 浏览器访问:http://IP/svn.html

选择需要修改密码的SVN库,每个SVN库的密码文件都是独立的。

浏览器访问

4.3 输入对应库的SVN密码

输入对应库的SVN密码

4.4 SVN密码修改,此处进行密码修改,会直接同步到后台的.htpasswd密码文件,至此密码修改成功!

密码修改成功

Jimmy's Blog ,版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.xjimmy.com/svn-modifi-password.html

Leave a Comment