Ubuntu上实现svn over http 与用户自助修改密码

3 篇文章 0 订阅
1 篇文章 0 订阅

开宗明义,本文是实操指南,没有太细致的原理说明,适合有一定基础的运维人员参考。
1 svn over http的好处
端口方面的好处:svn的默认端口是3690,默认会被路由器封闭,但是80端口一般是要开启的。所以这是第一个好处:

haoyan@haoyan-PowerEdge-R230:~$ sudo netstat -natp
[sudo] password for haoyan:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN      2904/svnserve
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      31196/mysqld
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      7172/smbd
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1051/dnsmasq
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1001/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      20337/cupsd
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      7172/smbd
tcp        0      0 127.0.0.1:59306         127.0.0.1:3306          ESTABLISHED 7638/apache2
tcp        0      0 127.0.0.1:3306          127.0.0.1:59306         ESTABLISHED 31196/mysqld
tcp        0     64 192.168.5.169:22        192.168.5.182:27026     ESTABLISHED 23930/sshd: haoyan
tcp        0      0 192.168.5.169:22        192.168.5.182:24673     ESTABLISHED 23727/sshd: haoyan
tcp        0      0 192.168.5.169:445       192.168.5.176:49371     ESTABLISHED 16405/smbd
tcp6       0      0 :::8009                 :::*                    LISTEN      22209/java
tcp6       0      0 :::139                  :::*                    LISTEN      7172/smbd
tcp6       0      0 :::80                   :::*                    LISTEN      7631/apache2
tcp6       0      0 :::22                   :::*                    LISTEN      1001/sshd
tcp6       0      0 ::1:631                 :::*                    LISTEN      20337/cupsd
tcp6       0      0 :::8088                 :::*                    LISTEN      22209/java
tcp6       0      0 :::445                  :::*                    LISTEN      7172/smbd
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      22209/java

2 权限问题。
因为svn并没有处理太多的额权限,在repository下面的文件,默认还是644或者755权限,而操作员不大可能给每一个开启svn的用户开启一个正式的linux账户,一个解决方式就是把repository的文件权限修改为777,但是这又有安全问题。
因此,此时用svn over http的话,把repository的所有权给www-data,那么任何有svn权限的用户都可以访问repository了。
3 实现方法:
实现方法见我的早先的文章:其核心在于apache的dav_svn module和htpasswd 来生成密码。
https://zhuanlan.zhihu.com/p/54758455
此文章的第7 第8 步说的很详细,再次不再赘述。
4 让用户自己可以修改密码。
用以上方法开启svn over http之后,添加用户就要在服务器操作服务器上面的authz文件和passwd文件。添加一个用户还好。但是密码自助修改就不行了。
但是此处有个问题,htpasswd只是一种加密方法,对于有权限操作目标文件的人。都可以操作。那么,此处就有个绕的地方,如果可以有权限修改此密码文件,则都可以改任何用户的密码。那么如何达到只能修改自己密码的目的呢?
自己研究了很久,找到了一种方法,就是用apache的basic auth来限制访问,访问之后,就仅修改自己的密码即可。
因此,就分两步,
第一, 在apache下面开一个需要授权的目录。
第二, 开启一个php脚本,只允许用户修改自己 的密码。
下面是具体的步骤,说一下我的环境:
Ubuntu 16.04
Apache 2.4
Php 7.0
第一步,在/etc/apache2/apache2.cnf里面,开启对一个目录的权限访问

# add by liuzhi
<Directory "/var/www/html/SVNPW/">
        Options Indexes FollowSymLinks
        AllowOverride authconfig
        Order allow,deny
        Allow from all
</Directory>

这样子操作之后,系统就会检查SVNPW下面的.htaccess文件了。
然后就在该目录下创建这个文件,内容如下:

AuthName "请输入你的SVN用户名 密码以登录"
AuthType basic
AuthUserFile /var/www/html/SVNPW/htpasswd
require valid-user

这样子用户在尝试访问此目录时,就需要在此目录下面的htpasswd里面有用户名,密码才行。
然后创建一个符号链接,指向真正的密码文件。

haoyan@haoyan-PowerEdge-R230:/var/www/html/SVNPW$ ll
total 16
drwxr-xr-x 2 www-data www-data 4096 9月   2 23:04 ./
drwxr-xr-x 4 root     root     4096 8月  31 14:21 ../
-rw-r--r-- 1 www-data www-data  131 8月  31 14:01 .htaccess
lrwxrwxrwx 1 root     root       27 8月  31 14:06 htpasswd -> /etc/apache2/dav_svn.passwd
-rw-rw-r-- 1 www-data www-data 3603 9月   2 23:04 index.php

然后记得把此密码文件owner修改为www-data用户
接下来就是index.php的内容了,我的文件内容放在了网盘上,供参考:

链接:https://pan.baidu.com/s/1NQOTyA1niAnKVh1JFKmepw 密码:wiq1

这样子,管理员只剩下创建用户,并初始化一个密码,其后可以让用户自主修改密码即可。
记录供各位参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值