docker hub已搭好的fastmaybe/svn-server
docker pull fastmaybe/svn-server
环境说明
service docker start:启动docker
service docker stop:停止docker
service docker restart:重启docker
docker images:查看所有镜像
docker ps:查看运行中的容器
docker ps -a:查看所有容器
docker logs xxx:查看xxx日志
docker run xxx:运行xxx
docker start -i name:启动name容器
docker pause xxx:暂停xxx名字容器
docker unpause xxx:恢复xxx名字容器
docker stop xxx:停止xxx名字容器
docker rmi xxx:删除xxx名字镜像
docker tag aaa bbb:更改aaa容器名字为bbb
docker exec -it xxx bash:进入xxx容器交互界面
docker search xxx:搜索xxx镜像
docker pull xxx:拉取xxx镜像
docker save xxx > /home/xxx.tar.gz:导出xxx镜像到/home/xxx.tar.gz
docker load < /home/xxx.tar.gz:导入文件/home/xxx.tar.gz到镜像
docker network create net1:创建net1网段
docker network inspect net1:查看net1网段
docker network rm net1:删除net1网段
docker卷:
docker volume create --name xxx:创建xxx卷
docker inspect xxx:查看xxx卷
docker volume rm xxx:删除xxx卷
启动容器:
docker run -it --name rename -p 9000:8080 -p 9001:8081 -v /home/workspace:/soft --privileged xxx bash
-d:创建出的容易在后台运行
-it:启动容器后开启进入容器交互页面
--name:给容器起个名字rename
-p:把真实宿主机9000端口映射到容器8080端口
bash:启动容器运行的是bash指令
-v:把宿主机目录/home/workspace映射到容器目录/soft,":"分隔
--privileged:映射文件最高权限,可以进行读写操作
由于openldap已经在另一个容器运行 此处就不安装openldap
先区docker-hub拉去一个基础镜像centos,
运行镜像创建一个容器 命令如下
docker run -itd
--name svn-server
-p 91:80 -p 3690:3690
-v /opt/svn:/opt/svn
--privileged
镜像
/usr/sbin/int
先说一下上面命令什么意思:
容器起动后会返回一个id
docker ps查看正在运行的容器
进入容器后:
yum -y install httpd
yum -y install subversion
yum -y install mod_dav_svn (Apache httpd module for Subversion server)
cp /etc/httpd/conf.modules.d/10-subversion.conf /etc/httpd/conf.d/subversion.conf
- `下列配置中有几点做下说明:
SVNParentPath:svn服务路径
AuthzSVNAccessFile:svn的权限配置文件
AuthLDAPURL:搭建的openldap url地址
AuthLDAPBindDN:配置 openldap的cn、dc
AuthLDAPBindPassword:配置openldap的管理员密码
AuthName:写死就行
AuthType:验证类型,Basic使用账号密码验证
AuthBasicProvider:ldap写死不解释
AuthzLDAPAuthoritative:这个搭配最下面“Require ldap-user”使用,on表示只要求验证ldap用户,别的不认;off则可以使用svn的账号和ldap混合账号登陆
Require:ldap-user或者valid-user,你要是只用ldap账号登陆的话就填写第一个
找到apache服务器的安装路径,一般在/etc/httpd/下,在conf.d目录下有一个subversion.conf文件(没有的话请自行创建),打开它,先上我的配置:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dontdothat_module modules/mod_dontdothat.so
DAV svn
SVNParentPath /opt/svn
SVNListParentPath On
AuthzSVNAccessFile /opt/svn/authz
AuthBasicProvider ldap
AuthType Basic
AuthName "Subversion repository"
AuthLDAPURL "ldap://192.168.88.188:389/dc=hongxue,dc=com?uid?sub?(objectClass=*)"
AuthLDAPBindDN "cn=root,dc=hongxue,dc=com" #管理员 (注意:如果openldap配置了可以匿名访问 此处可以不要)
AuthLDAPBindPassword "123456" #密码 (注意:如果openldap配置了可以匿名访问 此处可以不要)
Require valid-user
在解释AuthLDAPURL|AuthLDAPBindDN|AuthLDAPBindPassword的时候要先讲一下LDAP服务器认证过程,方便理解:
客户端(httpd)使用提供的URL(AuthLDAPURL)进行验证的时候,并不是直接验证输入的账 号密码,因为LDAP服务器在验证的时候要使用DN(每个节点用户的唯一标识)和密码来进行登陆验证的,但是DN一般来说比较长,诸如:“cn=xxx,ou=xxx,ou=xxx,dc=xxx,dc=xxx”,这种光输入的时候就烦气了,所以要想使用简短的用户名来登陆的时候,一般的做法是在某个节点用户上添加一个属性,比如mobile(手机号),Email(邮箱),user name或者uid(用户名),然后使用这个属性的值来登陆。
当用户输入这个属性值和密码的时候,客户端(httpd服务器)先使用AuthLDAPBindDN和AuthLDAPBindPassword作为用户名和密码登陆,根据AuthLDAPURL指定的查询规则(AuthLDAPURL的查询规则一会再说)来查找用户输入的属性的值有没有,如果查找的条数为0或者大于1,则返回错误,如果查找的条数等于1,则使用查找到的这个条目的DN和用户输入的密码进行登陆验证,成功则成功,失败则失败,这就是OpenLDAP的验证过程。
AuthLDAPBindDN|AuthLDAPBindPassword:就是用于查找用户的账号密码了
AuthLDAPURL:
对应上面那个url:协议名称://[ip地址或者域名]:[端口号]/[baseDN]?[attr]?[scope]?[filter]
baseDN:指定开始搜索节点的名称
attr:就是用户输入的属性键,默认是"uid",我使用的是uid,还可以使用cn,mobile,Email等。。。
scope:one,sub,base三者之一,默认sub
filter:过滤器,默认(objectclass=*)
总结一下LDAP的认证过程分为两部:
4.启动Apache服务
systemctl start httpd.service
systemctl status httpd.service
如有报错:Unknown Authn provider: ldap
解决:yum -y install mod_ldap
mkdir /opt/svn # 创建svn版本库目录
svnserve -d -r /opt/svn # 启动svn服务
svnadmin create Test # 创建一个svn版本库
chown apache.apache -R /opt/svn # 授权,不然web会有errorlog
vim /opt/svn/authz
添加如下内容:
[groups]
admin=yuan
users=test1,test2
[/] # /目录下
@admin = rw #读写权限
[Test:/] # /Test
@users = r #只读权限
这里的yuan,test1,test2是只用户输入的属性的值(LDAP服务器中某个用于登陆的节点的属性值),如果你没配置这里的权限,用户虽然登陆成功了,但是没有相应的权限页面会提示没权限查看的,users后面跟多个以","分割的用户名(你设置的查询规则按什么查询就是什么)
https://blog.csdn.net/lansine2005/article/details/20362591
http://httpd.apache.org/docs/current/mod/core.html#limit
DAV svn
SVNParentPath /opt/svn
SVNListParentPath On
#AuthzSVNAccessFile /opt/svn/authz #注释掉本地的svn权限控制 如果需要 也可以放开设置,配合下面配置精确到哪个文件可以访问读写权限。
AuthBasicProvider ldap
AuthType Basic
AuthName "Subversion repository"
AuthLDAPURL "ldap://192.168.88.188:389/ou=people,dc=secmask,dc=com?uid?sub?(objectClass=*)"
` #
#读取需要验证 是不是属于此节点下(控制读权限,验证是否属于某个节点(组))
Require ldap-group cn=svn_get,cn=svn,ou=Group,dc=secmask,dc=com
#写 操作需要验证 是不是属于此节点下(控制写权限,验证是否属于某个节点(组))
Require ldap-group cn=svn_write,cn=svn,ou=Group,dc=secmask,dc=com
DAV svn
SVNParentPath /opt/svn
SVNListParentPath On
#AuthzSVNAccessFile /opt/svn/authz #注释掉本地的svn权限控制 如果需要 也可以放开设置,配合下面配置精确到哪个文件可以访问读写权限。
AuthBasicProvider ldap
AuthType Basic
AuthName "Subversion repository"
AuthLDAPURL "ldap://192.168.88.188:389/ou=people,dc=secmask,dc=com?uid?sub?(objectClass=*)"
` #
#读取需要验证 用户
Require valid-user
#写 操作需要验证 是不是属于此节点下(控制写权限,验证用户)
Require ldap-group cn=svn_write,cn=svn,ou=Group,dc=secmask,dc=com