下面以ubuntu为例
安装
sudo apt install subversion
服务器端命令 与客户端命令
服务器端命令
svnserve 控制svn系统服务的启动等
svnadmin 版本库的创建 导入导出 删除等
svnlook 查看版本库信息等
客户端命令
svn 版本库的检出 更新 提交 重定向等
创建版本库
svnadmin create /path/repos 路径加名称
svnadmin create --fs-type fsfs /path/repos (建议这样创建)
删除版本库
rm -rf /path/repos
配置文件在 /path/repos/conf
authz 配置用户组及用户组权限
passwd 配置用户名和密码
svnserve.conf 配置默认权限 权限配置文件 及密码配置文件
svnserve.conf 一共有三种权限 none read write
anon-access = none(未登录用户))
auth-access = write(登录用户)
passwd文件
账号等于密码的形式来添加账号
authz文件
group添加用户组
一行为一组 @组名 = 用户名,用户名
组名前不可以有特殊字符 例如空格 制表符 之类的
[/]通用的权限
多个版本库的时候想用同一个authz文件的时候可以指定svnserve.conf 文件中authz-db = authz文件的路径,可以多个版本库指向同一个authz配置文件
[version:/]
指定的版本库哪些人有哪些权限
[version:/xxx]
指定版本库的指定目录哪些人有哪些权限
*代表所有人
一个服务端 多个客户端
运行svn服务
svnserve -d -r /path/repos/
svnserve -d -r hello --listen-port 3691 指定端口
svn checkout -r 版本号 检出指定版本号
svn add 目录/文件 递归添加的
svn add 目录 --non-recursive 只添加目录
svn add * 添加所有文件和目录 (目录本身在版本控制之下,不会再扫描)
svn add * --force 全部新增
svn diff -r 7:10 index.html 对比 版本为7和10的index.html文件的差异
svn diff -r 7 index.html 对比当前版本和版本7的差异
svn cat svn://192.168.79.139/index.html
svn revert index.html 还原一个文件
svn revert * 还原当前目录下修改的文件
svn revert --recursive * 还原当前目录下及子目录下的修改的文件
提交冲突
mc自己的版本,tc服务器上面的版本 p延迟处理
选择p之后,如果以后想解决
svn list --recursive 递归显示当前目录及子目录
svn status 状态前面字母的含义
svn log
多版本库
tcp、ip协议规定端口号范围 0-65535号
0-1023 为公认端口 http协议的默认是用80
1024-49151 注册端口 绑定给知名的软件,例如mysql3306 svn 3690
49152-65535 私有端口
开启多个版本库,在一个目录下,创建多个版本库,svn服务启动的时候启动版本库的父目录
或者http服务目录写版本库的父目录即可
http和svn配合
下载apache
sudo apt install apache2 libapache2-mod-svn
新建一个配置文件在apache的默认配置目录一般是/etc/apache2/sites-enabled/ 下
<Location /svn>
DAV svn
# SVNPath
SVNParentPath /home/zhang/svnroot
# Limit write permission to list of valid users.
#<LimitExcept GET PROPFIND OPTIONS REPORT> #注意这个要注释掉(这样就只有我们制定的用户可以看到)否则>所有的用户可以浏览下载
AuthType Basic
#使用基本认证方式,即用户名、密码认证
AuthName "ros auth"
# 在认证对话框中出现的提示信息
AuthUserFile /home/svn/svn.passwd
# 指定上面创建好的存放用户名信息的文件路径
Require valid-user
# 限定只有用户输入正确的用户名和密码后才能访问该标签所指向的路径
#</LimitExcept>
AuthzSVNAccessFile /home/svn/authz
# 权限控制
</Location>
svn通过http访问 ,创建账号密码
htpasswd -c /home/svn/svn.passwd zhang
修改密码
htpasswd -m /home/svn/svn.passwd zhang
删除账号
htpasswd -D /home/svn/svn.passwd zhang
上面可以实现http访问svn的方式
下面配置https
ubuntu
a2enmod ssl
或者手动ssl.conf,ssl.load,socache_shmcb.load软连接三个文件到mods-enabled中
ln -s /etc/apache2/sites-available/ssl.conf /etc/apache2/sites-enabled/ssl.conf
如需要访问http的时候直接跳转https
需要开启rewrite模块
sites-available建立软连接或者通过a2enmod rewrite命令直接建立软连接
#先建立一个conf,监听80端口
<VirtualHost *:80>
ServerName_
RewriteEngine on #开启重写引擎
#重写条件:不为https时的url才执行跳转
RewriteCond %{SERVER_PORT} !^443$
#域名中不包含"api"的话就重定向 (这个适用于既有http又有https的时候可以使用这种方式)
#RewriteCond %{REQUEST_URI} !^/api
#跳转到当前serverName的https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
</VirtualHost>
可以实现https的配置,最后倒入购买的ssl证书
关于安全
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置
SSLCertificateFile cert/public.pem
# 证书私钥配置
SSLCertificateKeyFile cert/xxxxxxx.key
# 证书链配置,如果该属性开头有 '#'字符,请删除掉(启动不了apache就注释掉吧)
SSLCertificateChainFile cert/chain.pem
隐藏apache的版本号
修改/etc/apache2/conf-enabled/security.conf
修改为下面2个值
ServerTokens Prod
ServerSignature Off
客户端使用建议:
1、使用export 而不是co 导出目录树
2、co检出的目录树不能放在web根目录
3、如果必须要放在web根目录需要添加.svn目录禁止访问的限制
apache
<Directory ~ "\.svn">
Order allow,deny
Deny from all
</Directory>
nginx
location ~ ^(.*)\/\.svn\/ {
return 404;
}
说明:
如只想想用http 或者https协议来访问,只需关闭svn服务即可
使用命令:
sudo killall svnserve
以上使用apt安装的情况,如使用编译安装,需文件的目录需要使用编译安装时的目录
HTTPS双向认证
1、创建目录
mkdir /etc/apache2/ca/private /etc/apache2/ca/certificates
cd /etc/apache2/ca
2、创建ca私钥
openssl genrsa -aes256 -out private/ca.key.pem 2048
3、创建ca签名请求
openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=SZ/L=SZ/O=nsfocus/OU=nsfocus/CN=*"
subj这个参数CN这个比较重要
例如 把*修改为*.nsfocus.com 代表可以使用ca签发update.nsfocus.com api.nsfocus.com....
4、签发ca根证书
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer
ca.cer为根证书,这个特别重要
5、根证书pem转码为PKCS
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12
很多浏览器也不行,所以有时候也需要转一下编码
得到的ca.p12就是转码后的CA根证书,在不能直接用ca.cer的时候,就用ca.p12代替
6、创建服务器端的证书
openssl genrsa -aes256 -out private/server.key.pem 2048
7、创建服务器端的签发请求
openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=SZ/L=SZ/O=nsfocus/OU=nsfocus/CN=10.5.3.25"
8、利用CA根证书签发服务端证书
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certificates/server.cer
server.cer为服务器端证书
9、双向验证配置
SSLEngine on
SSLCertificateFile /etc/apache2/ca/certificates/server.cer
SSLCertificateKeyFile /etc/apache2/ca/private/server.key.pem
SSLCACertificateFile /etc/apache2/ca/certificates/ca.cer
SSLVerifyClient require
SSLVerifyDepth 10
注意现在访问的话访问不了的,需要把用户证书导入到浏览器才可以访问
10、用户证书
1、服务器端给把证书制作好,发给客户
2、把ca根证书发给客户,让客户自己签发一个证书
(1)创建客户私钥
openssl genrsa -aes256 -out private/client.key.pem 2048
(2)创建客户签发请求
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=SZ/L=SZ/O=nsfocus/OU=nsfocus/CN=10.5.3.25"
(3) 利用ca根证书签发客户证书
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/client.csr -out certificates/client.cer
(4)把客户证书转换为p12格式
openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certificates/client.cer -out certificates/client.p12
客户端把client.p12导入小乌龟即可
导入方法,
1、新建一个目录用来保存从服务器端获取的目录树
2、进入到这个新建的文件夹
3、右键选择
4、会出现如下界面
红框内输入svn 路径,点击ok
5、会弹出一个永久和临时导入证书的页面选择哪个都可以
这时会出现让你选择证书的界面
6、把服务器端签发的证书导入,输入签发证书的密码
7、输入后即可获得服务器端目录树
网友评论