- 浏览: 888240 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (341)
- Ajax (1)
- Asp.net (18)
- Java (5)
- Php (27)
- JavaScript (19)
- jQuery (12)
- 正则表达式 (4)
- SEO优化 (1)
- Windows 应用 (5)
- Flash (12)
- Asp (9)
- CSS (10)
- SQL Server (6)
- Flex (1)
- Ubuntu (0)
- mysql (34)
- PHP框架 (2)
- Apache (10)
- html (3)
- 网页切入 (1)
- Linux (33)
- vc++ (38)
- 友情链接 (0)
- firefox 插件 (4)
- SEO (1)
- Apache 压力测试 (1)
- imacros教程(一):imacros变量 (0)
- JS调用imacros所用到的函数 (0)
- imacros教程(三):调用csv文件 (1)
- imacros教程(二):JS调用imacros所用到的函数 (1)
- imacros 常用代码 (1)
- CSS最大宽度 (1)
- svn (1)
- WordPress (1)
- 网线的两种接法 (1)
- TP-LINK WR 系列无线路由器安全设置 (1)
- mysql talble is full ERR1114 (0)
- 解决mysql的内存表“table is full”错误 (1)
- linux 用户操作 (1)
- CentOS 挂载 ntfs 移动硬盘 (1)
- linux 储蓄设备操作 (1)
- Starting MySQL. ERROR! Manager of pid-file quit without updating file. (1)
- extmail 1.1 升级到 1.2 (1)
- extmail (0)
- emos (2)
- squid 3.0 (2)
- centos 6 minimal 安装 (1)
- linux实用命令详解 (1)
- win7 (1)
- php 字符串大小写转换 (1)
- 跟踪路由 tracert (1)
- css英文单词首字母添加样式 (1)
- jquery iframe 操作 (1)
- php 获取时间今天明天昨天时间戳 (1)
- php 上传限制 (1)
- ckeditor 配置 (1)
- flash 显示在 div 下 (1)
- flash + php 留言本乱码问题 (1)
- squid purge 出现 access denied 的解决方法 (1)
- delphi (1)
- 让delphi嵌入的WebBrowser无边框无滚动条 (1)
- delphi打开一个IE窗口 (1)
- delphi 获取鼠标当前位置的相对坐标 (1)
- delphi 获取可执行文件的当前路径 (1)
- delphi webbrowser 常用方法示例 (1)
- javascript 禁止鼠标右键... (1)
- delphi 播放gif 动画 (1)
- delphi弹出信息框大全 (1)
- Delphi中禁止WebBrowser右键的方法 (1)
- DELPHI 让程序只能运行一次 (1)
- Delphi XE2 破解补丁注册机下载使用教程 (1)
- Delphi RAD Studio XE2编译程序体积大的问题 (1)
- delphi 制作圆角窗口 (1)
- delphi 窗口 (1)
- delphi 窗体全透明,但窗体上的控件不透明 (1)
- delphi 窗口阴影 (1)
- delphi 获取任务栏高度 (1)
- delphi bsNone 之后任务栏右键无反应 (1)
- delphi 程序打开隐藏软件任务栏条 (0)
- delphi bsNone后的相关问题解决方法 (1)
- delphi bsNone 后显示边框 (1)
- delphi url编码操作 (1)
- delphi 调用exe文件 (1)
- delphi dll窗体的制作和调用 (1)
- delphi dll 调用窗体时的数据传递 (0)
- delphi 窗口显示在屏幕右下角 (1)
- 内网穿透&UDP打洞 (1)
- delphi idhttp post应用 (1)
- inno setup 开机启动 (1)
- inno setup 添加桌面快捷方式 (1)
- Delphi实现程序只运行一次并激活已打开的程序 (1)
- 解决 float point division by zero (1)
- Delphi 窗体显示在最前面,并获得焦点 (1)
- delphi 点击关闭按钮时隐藏窗口 (1)
- delphi 非客户区右键点击 (1)
- delphi真正可以截获WINDOWS关机消息的源码 (1)
- delphi utf8转码 (1)
最新评论
-
zj7243886:
非常感谢,这东西解决我的问题;谢谢你的分享
Linux 安装 jpeg-6b 错误 ./libtool 命令未找到 -
丶Sk.Mabon:
能让html也绕过吗。。机房限制很悲剧
绕过 <?PHP exit(’Access Denied’); ?> 限制 -
丶Sk.Mabon:
请教gzip.php 的写法。万分感谢!
apache 开启 gzip -
hyxj1220:
火狐中单纯的定义这样的样式,貌似不行,必须要让容器浮动
英文长文本换行CSS -
逆水寒龙:
太好了,正好用上,谢谢博主共享
Asp.net 将中文汉字转换成拼音首字和拼音全拼
一、版本库及服务创建之一
通过subversion的svnserve启动apache服务:
1. Subversion 的版本库(repository):
位于服务器端,统一管理和储存数据的地方。介绍在服务器端配置和管理 Subversion 版本库的基本方法,Linux 与Windows中的配置差别不大。
2. 版本库数据存储方式:
在 Subversion 中,版本库的数据存储有两种方式,一种是在 Berkeley DB 数据库中存放数据;另一种是使用普通文件,采用自定义的格式来储存,称为 FSFS。(两种存放方式各有优缺点,参考 http://svnbook.org/ 上面的文档来了解两者详细的比较和区别)
3. 版本库服务启动:
Subversion 设计了一个抽象的网络层,版本库建立完毕之后,可以通过各种服务器向外公布。svnserve 是 Subversion 自带的一个小型的服务器,它使用独立的协议与客户端。我们可以通过 :
同时可以指定一些选项,常用的如 -r,用来指定版本库的根路径,例如假设版本库位于 E:/svn:
#即创建了以E:/svn为根目录的SVN版本库服务。
4. 设置为系统服务并自动启动:
服务启动–daemon可简写为-d、–root可简写为-r可以建立个批处理文件并放在windows启动组中便于开机
就运行SVN服务或者在这个地址http://clanlib.org/~mbn/svnservice/下载那个svnservice.exe文件拷贝到
命令行下执行:
5. 创建子版本库(或版本库):
假设以以上”E:/svn”为根目录,并启动svn服务器,那么创建子版本库有两种方式:
通过TortoiseSVN等svn客户端工具创建版本库:在E:/svn中新建子目录project1,并进入E:/svn/project1 中通过TortoiseSVN菜单创建版本库,则这个版本库可以通过svn://服务器IP/project1″访问,以此类推可建立project2等等,并且这样各个子项目库相关权限配置保持独立。
通过subSVN服务器命令创建版本库:
view sourceprint?1 $ svnadmin create --fs-type fsfs /etc/svn/repos :
2 # 创建版本库的命令,指定数据存储为 FSFS,如果要指定为 Berkeley DB,则将 fsfs 改为 bdb
6. 版本库下目录文件说明:
conf 目录:存放了版本库的配置文件,包括用户访问控制和权限控制等内容,文件本身的注释说明十分详细,读者可以根据注释自行配置;
dav 目录:是提供给 Apache 相关模块的目录,目前为空;
db 目录:存放着 Subversion 所要管理的所有受版本控制的数据,不同的存储方式(Berkeley DB 或者 FSFS)下有着不同的目录结构,不过我们一般不用直接修改和查看这个目录下的内容,Subversion 的命令可以安全的操作这个目录;
hooks 目录:存放着钩子脚本及其模版(一种版本库事件触发程序)
locks 目录:存放着 Subversion 版本库锁定数据,format 文件记录了版本库的布局版本号。
7. 推荐项目程序目录结构如下:
可以通过客户端建立好相关目录,然后提交到版本库或子版本库中。
二、 版本库及服务创建之二
通过Apache Http Server服务启动svnserve服务:
1. 特点说明:
区别于第一种:svnserve 只能对全局提供简单的访问控制,如果想要更加灵活的方式,可以使用 Apache Http Server 作为向外公布版本库的方式,同时可以通过HTTP访问。
2. 配置步骤:
* 安装 mod_dav_svn 插件:用途使 Subversion 与 dav 模块通信,需要安装 mod_dav_svn 插件,可以在 Subversion 的安装目录中找到。将其拷贝到 Apache 安装目录的 modules 文件夹下。(由于 Subversion 需要版本化的控制,因此标准的 Http 协议不能满足需求。要让 Apache 与 Subversion 协同工作,需要使用 WebDAV(Web 分布式创作和版本控制)。WebDAV 是 HTTP 1.1 的扩展,关于 WebDAV 的规范和工作原理,可以参考 IETF RFC 2518。)
* 并配置 Apache 的 httpd.conf 文件,让 Apache 在启动的时候加载上述模块。需要添加的内容如下:
#首先需要启用 dav_module,然后加载 dav_svn_module
3. 版本库建立:
在Apache的httpd.conf文件中末尾加入如下配置信息:view sourceprint?
Location 标签指出访问的 URL 以及在服务器上的实际位置。配置完毕后重新启动 Apache,打开浏览器,输入 http://服务器IP/repos
4. 子版本库建立:
如果想要指定多个版本库,可以用多个 Location 标签,也可以使用 SVNParentPath 代替 SVNPath,例如在 /etc/svn 下有多个版本库 repos1,repos2 等等,用如下方式指定:
“SVNParentPath /etc/svn” 表示 /etc/svn 下的每个子目录都是一个版本库。可以通过 http://服务器IP/repos/repos1,http://服务器IP/repos/repos2 来访问。
三、 版本库目录权限配置
1. 相关配置文件说明:
svn版本库下的子目录conf下初始会有三个文件:
* svnserve.conf
* passwd
* authz
2. svnserve.conf文件配置:
被用来配置来进行一些简单的访问权限控制。文件的初始内容大致如下:
其中:
anon-access 表示匿名用户的权限
auth-access 表示认证用户的权限设置
password-db 指向保存用户帐号密码的文件的位置,可以使用相对路径。
去掉#即可开启对应配置功能
3. passwd文件配置 :
需让svnsere.conf中开启password-db = passwd,可让以配置如下
# 格式为:“用户名 = 密码”注意前后不要有空格,中间要有空格
4. authz文件配置:
需让svnsere.conf中开启authz-db = authz,可以配置如下
#两个分组:committers,developers
以上对于1章节中的以svnserve启动svn服务直接有效。
四、Apache Http Server服务启动svnserve模块权限配置说明
1. Apache 提供了基本的全局粒度权限设置:
* 首先需要创建一个用户文件。Apache 提供了一个工具 htpasswd,用于生成用户文件,可以在 Apache 的安装目录下找到。具体使用方法如下:
htpasswd etc/svn/passwordfile username
如果 passwordfile 不存在,可以加上 -c 选项让 htpasswd 新建一个。创建好的文件内容是用户名加上密码的 MD5 密文。
* 接下来修改 httpd.conf,在 Location 标签中加入如下内容:
重新启动 Apache, 打开浏览器访问版本库。Apache 会提示你输入用户名和密码来认证登陆了。
现在只有 passwordfile 文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 “Require valid-user” 为 “Require user tony robert” 将只有 tony 和 robert 可以访问该版本库。
有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用 Limit 和 LimitExcept 标签。例如:
如上配置将使匿名用户有读取权限,而限制只有 passwordfile 中配置的用户可以使用写操作。
2. 目录粒度权限访问设置:
使用 Apache 的 mod_authz_svn 模块对每个目录进行认证操作。
首先需要让 Apache 将 mod_authz_svn 模块加载进来。在 Subversion 的安装目录中找到 mod_auth_svn 模块,将其拷贝到 Apache 安装目录的 modules 子目录下。修改 httpd.conf 文件,找到
现在可以在 Location 标签中使用 authz 的功能了。一个基本的 authz 配置如下:
其中AuthUserFile和AuthzSVNAccessFile两个文件就是指向3章节中的 passwd和authz策略文件 指向的是 authz 的策略文件
使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中 tony 将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:
这样项目1的 committer 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2,同样项目2的 commiter 也不能修改 repos1 版本库的文件。
五、补充两点
1. MySQL用户认证信息保护:
到目前为止我们的用户名密码文件还是以文本文件形式存放在文件系统中的,出于安全性的需要或者单点登陆等可扩展性的考虑,文本文件的管理方式都不能满足需求了。通过 Apache 的 module_auth_mysql 模块,我们可以用 MySQL 来保存用户信息。该模块的主页在 http://modauthmysql.sourceforge.net/,你也可以在 http://modules.apache.org/ 找到它的发行版本。安装方法同上述 Apache 的模块一样,拷贝至 modules 目录并在 httpd.conf 文件中添加如下语句:
相应的 Location 区域改写为:
然后在 mysql 中添加名为 svn 的数据库,并建立 users 数据表:
在 users 表中插入用户信息
重新启动 Apache,在访问版本库的时候 Apache 就会用 mysql 数据表中的用户信息来验证了。
2. SSL实现加密连接:
通过 Apache 的网络链接,版本库中的代码和数据可以在互联网上传输,为了避免数据的明文传输,实现安全的版本控制,需要对数据的传输进行加密。Apache 提供了基于 SSL 的数据传输加密模块 mod_ssl,有了它,用户就可以用 https 协议访问版本库,从而实现数据的加密传输了。SSL 协议及其实现方式,是一个非常复杂的话题,本文只是介绍 Apache 提供的最基本的SSL配置方法,更加详细的介绍内容,请参考 http://httpd.apache.org/docs-2.0/ssl/ 上的文档。
开始配置前,我们需要一个实现 Apache 中 SSL 模块的动态程序库,通常名为 mod_ssl.so,及其配置文件,通常名为 ssl.conf。这个实现是跟 Apache 的版本相关的,不匹配的版本是不能用的;而且,并不是每一个 Apache 的版本都自带了相关实现文件,很多情况下,我们需要自己去搜寻相关文件。另外,我们还需要 OpenSSL 软件及其配置文件,来生成加密密钥和数字证书。这里,我们可以使用一些免费网站,如 http://hunter.campbus.com/ 上提供的集成版本的 Apache。
有了相关的工具和文件,我们就可以开始生成 SSL 的证书和密钥了。首先,我们需要找到 openssl 程序及其配置文件 openssl.cnf,运行如下命令来生成 128 位的 RSA 私有密钥文件:
命令运行期间需要用户输入并确认自己的密码。
现在,我们需要 SSL 的认证证书,证书是由 CA(certificate authority) 发放并且认证的。为此,我们可以用如下命令生成一个 CSR(Certificate Signing Request) 文件发给 CA,从而得到 CA 的认证:
当然,一般情况下,如果 Subversion 的用户不是太多,安全情况不是很复杂,我们也可以生成一个自签名的认证证书,从而省去了向 CA 申请认证的麻烦。如下命令:
以上两个命令都需要用户输入那个 key 文件的密码,以及一些网络设置信息,如域名,邮箱等等,这里输入的服务器域名应该与 Apache 配置文件当中的一致。现在,我们可以在 Apache 的 conf 目录下新建一个 ssl 目录,将 my-server.key 和 my-server.crt 文件都移动到 ssl 目录里面。然后修改 ssl.conf 文件,将 SSLCertificateKeyFile 和 SSLCertificateFile 项指向这两个文件。
如果 Apache 的 module 目录里面没有 mod_ssl.so 文件,可以将事先准备好的文件拷贝过去。然后,我们可以设置 Apache 的配置文件 httpd.conf,将 ssl 模块加入其中:
然后,在配置文件的最后,加上如下 SSL 相关配置项:
这样,基本的设置工作就完成了。重新启动 Apache 服务器,现在可以用 https 协议代替 http 协议来访问版本库了。如果要限定版本库只能用 https 访问,我们可以在 Apache 配置文件当中 Subversion 部分加上 “SSLRequireSSL”。如下:
文件来源:http://www.vanjor.org/blog/2010/03/svn-setup-detail/
参考:http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
参考:http://www.subversion.org.cn/svnbook/1.4/index.html
通过subversion的svnserve启动apache服务:
1. Subversion 的版本库(repository):
位于服务器端,统一管理和储存数据的地方。介绍在服务器端配置和管理 Subversion 版本库的基本方法,Linux 与Windows中的配置差别不大。
2. 版本库数据存储方式:
在 Subversion 中,版本库的数据存储有两种方式,一种是在 Berkeley DB 数据库中存放数据;另一种是使用普通文件,采用自定义的格式来储存,称为 FSFS。(两种存放方式各有优缺点,参考 http://svnbook.org/ 上面的文档来了解两者详细的比较和区别)
3. 版本库服务启动:
Subversion 设计了一个抽象的网络层,版本库建立完毕之后,可以通过各种服务器向外公布。svnserve 是 Subversion 自带的一个小型的服务器,它使用独立的协议与客户端。我们可以通过 :
svnserve –i #作为 inetd 启动 svnserve –d #作为守护进程启动一个服务。
同时可以指定一些选项,常用的如 -r,用来指定版本库的根路径,例如假设版本库位于 E:/svn:
svnserve –d -r E:/svn
#即创建了以E:/svn为根目录的SVN版本库服务。
4. 设置为系统服务并自动启动:
svnserve --daemon --root E:\svn\repository
服务启动–daemon可简写为-d、–root可简写为-r可以建立个批处理文件并放在windows启动组中便于开机
就运行SVN服务或者在这个地址http://clanlib.org/~mbn/svnservice/下载那个svnservice.exe文件拷贝到
命令行下执行:
- svnservice -install --daemon --root "D:\svn\Repository"
- sc config svnservice start= auto
- net start svnservice
svnservice -install --daemon --root "D:\svn\Repository" sc config svnservice start= auto net start svnservice
5. 创建子版本库(或版本库):
假设以以上”E:/svn”为根目录,并启动svn服务器,那么创建子版本库有两种方式:
通过TortoiseSVN等svn客户端工具创建版本库:在E:/svn中新建子目录project1,并进入E:/svn/project1 中通过TortoiseSVN菜单创建版本库,则这个版本库可以通过svn://服务器IP/project1″访问,以此类推可建立project2等等,并且这样各个子项目库相关权限配置保持独立。
通过subSVN服务器命令创建版本库:
view sourceprint?1 $ svnadmin create --fs-type fsfs /etc/svn/repos :
2 # 创建版本库的命令,指定数据存储为 FSFS,如果要指定为 Berkeley DB,则将 fsfs 改为 bdb
6. 版本库下目录文件说明:
conf 目录:存放了版本库的配置文件,包括用户访问控制和权限控制等内容,文件本身的注释说明十分详细,读者可以根据注释自行配置;
dav 目录:是提供给 Apache 相关模块的目录,目前为空;
db 目录:存放着 Subversion 所要管理的所有受版本控制的数据,不同的存储方式(Berkeley DB 或者 FSFS)下有着不同的目录结构,不过我们一般不用直接修改和查看这个目录下的内容,Subversion 的命令可以安全的操作这个目录;
hooks 目录:存放着钩子脚本及其模版(一种版本库事件触发程序)
locks 目录:存放着 Subversion 版本库锁定数据,format 文件记录了版本库的布局版本号。
7. 推荐项目程序目录结构如下:
|――project_A | ――――branches | ――――tags | ――――trunk
可以通过客户端建立好相关目录,然后提交到版本库或子版本库中。
二、 版本库及服务创建之二
通过Apache Http Server服务启动svnserve服务:
1. 特点说明:
区别于第一种:svnserve 只能对全局提供简单的访问控制,如果想要更加灵活的方式,可以使用 Apache Http Server 作为向外公布版本库的方式,同时可以通过HTTP访问。
2. 配置步骤:
* 安装 mod_dav_svn 插件:用途使 Subversion 与 dav 模块通信,需要安装 mod_dav_svn 插件,可以在 Subversion 的安装目录中找到。将其拷贝到 Apache 安装目录的 modules 文件夹下。(由于 Subversion 需要版本化的控制,因此标准的 Http 协议不能满足需求。要让 Apache 与 Subversion 协同工作,需要使用 WebDAV(Web 分布式创作和版本控制)。WebDAV 是 HTTP 1.1 的扩展,关于 WebDAV 的规范和工作原理,可以参考 IETF RFC 2518。)
* 并配置 Apache 的 httpd.conf 文件,让 Apache 在启动的时候加载上述模块。需要添加的内容如下:
LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so
#首先需要启用 dav_module,然后加载 dav_svn_module
3. 版本库建立:
在Apache的httpd.conf文件中末尾加入如下配置信息:view sourceprint?
<LOCATION repos> DAV svn SVNPath /etc/svn/repos </LOCATION>
Location 标签指出访问的 URL 以及在服务器上的实际位置。配置完毕后重新启动 Apache,打开浏览器,输入 http://服务器IP/repos
4. 子版本库建立:
如果想要指定多个版本库,可以用多个 Location 标签,也可以使用 SVNParentPath 代替 SVNPath,例如在 /etc/svn 下有多个版本库 repos1,repos2 等等,用如下方式指定:
<LOCATION repos> DAV svn SVNParentPath /etc/svn </LOCATION>
“SVNParentPath /etc/svn” 表示 /etc/svn 下的每个子目录都是一个版本库。可以通过 http://服务器IP/repos/repos1,http://服务器IP/repos/repos2 来访问。
三、 版本库目录权限配置
1. 相关配置文件说明:
svn版本库下的子目录conf下初始会有三个文件:
* svnserve.conf
* passwd
* authz
2. svnserve.conf文件配置:
被用来配置来进行一些简单的访问权限控制。文件的初始内容大致如下:
- [general]
- # anon-access = read
- # auth-access = write
- password-db = passwd
- # authz-db = authz
- # realm = My First Repository
[general] # anon-access = read # auth-access = write password-db = passwd # authz-db = authz # realm = My First Repository
其中:
anon-access 表示匿名用户的权限
auth-access 表示认证用户的权限设置
password-db 指向保存用户帐号密码的文件的位置,可以使用相对路径。
去掉#即可开启对应配置功能
3. passwd文件配置 :
需让svnsere.conf中开启password-db = passwd,可让以配置如下
[user] user1 = password1 user2 = password2
# 格式为:“用户名 = 密码”注意前后不要有空格,中间要有空格
4. authz文件配置:
需让svnsere.conf中开启authz-db = authz,可以配置如下
#两个分组:committers,developers
- [groups]
- committers = paulex,richard
- developers = jimmy,michel,spark,sean
- [/]
- #在根目录下指定所有的用户有读权限
- * = r
- #追加 committers 组用户有读写权限
- @committers = rw
- #在 branches/dev 目录下指定 developers 组的用户有读写权限
- [/branches/dev]
- @developers = rw
- #在 /tags 组下给予用户 tony 读写权限
- [/tags]
- tony = rw
- #禁止所有用户访问 /private 目录
- [/private]
- * =
[groups] committers = paulex,richard developers = jimmy,michel,spark,sean [/] #在根目录下指定所有的用户有读权限 * = r #追加 committers 组用户有读写权限 @committers = rw #在 branches/dev 目录下指定 developers 组的用户有读写权限 [/branches/dev] @developers = rw #在 /tags 组下给予用户 tony 读写权限 [/tags] tony = rw #禁止所有用户访问 /private 目录 [/private] * =
以上对于1章节中的以svnserve启动svn服务直接有效。
四、Apache Http Server服务启动svnserve模块权限配置说明
1. Apache 提供了基本的全局粒度权限设置:
* 首先需要创建一个用户文件。Apache 提供了一个工具 htpasswd,用于生成用户文件,可以在 Apache 的安装目录下找到。具体使用方法如下:
htpasswd etc/svn/passwordfile username
如果 passwordfile 不存在,可以加上 -c 选项让 htpasswd 新建一个。创建好的文件内容是用户名加上密码的 MD5 密文。
* 接下来修改 httpd.conf,在 Location 标签中加入如下内容:
AuthType Basic AuthName "svn repos" AuthUserFile /etc/svn/passwordfile Require valid-user
重新启动 Apache, 打开浏览器访问版本库。Apache 会提示你输入用户名和密码来认证登陆了。
现在只有 passwordfile 文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 “Require valid-user” 为 “Require user tony robert” 将只有 tony 和 robert 可以访问该版本库。
有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用 Limit 和 LimitExcept 标签。例如:
<LIMITEXCEPT REPORT OPTIONS PROPFIND GET> require valid-user </LIMITEXCEPT>
如上配置将使匿名用户有读取权限,而限制只有 passwordfile 中配置的用户可以使用写操作。
2. 目录粒度权限访问设置:
使用 Apache 的 mod_authz_svn 模块对每个目录进行认证操作。
首先需要让 Apache 将 mod_authz_svn 模块加载进来。在 Subversion 的安装目录中找到 mod_auth_svn 模块,将其拷贝到 Apache 安装目录的 modules 子目录下。修改 httpd.conf 文件,找到
LoadModule dav_svn_module modules/mod_dav_svn.so在其后面加上
LoadModule authz_svn_module modules/mod_authz_svn.so
现在可以在 Location 标签中使用 authz 的功能了。一个基本的 authz 配置如下:
- <LOCATION repos>
- DAV svn
- SVNPath /etc/svn/repos
- AuthType Basic
- AuthName "svn repos"
- AuthUserFile /etc/svn/passwd
- AuthzSVNAccessFile /etc/svn/accesspolicy
- Satisfy Any
- Require valid-user
- </LOCATION>
<LOCATION repos> DAV svn SVNPath /etc/svn/repos AuthType Basic AuthName "svn repos" AuthUserFile /etc/svn/passwd AuthzSVNAccessFile /etc/svn/accesspolicy Satisfy Any Require valid-user </LOCATION>
其中AuthUserFile和AuthzSVNAccessFile两个文件就是指向3章节中的 passwd和authz策略文件 指向的是 authz 的策略文件
使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中 tony 将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:
- [groups]
- 02 project1_committers = paulex richard
- project2_committers = jimmy michel spark sean \
- steven tony robert
- [repos1:/]
- * = r
- @ project1_committer = rw
- [repos2:/]
- * = r
- @ project2_committer = rw
[groups] 02 project1_committers = paulex richard project2_committers = jimmy michel spark sean \ steven tony robert [repos1:/] * = r @ project1_committer = rw [repos2:/] * = r @ project2_committer = rw
这样项目1的 committer 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2,同样项目2的 commiter 也不能修改 repos1 版本库的文件。
五、补充两点
1. MySQL用户认证信息保护:
到目前为止我们的用户名密码文件还是以文本文件形式存放在文件系统中的,出于安全性的需要或者单点登陆等可扩展性的考虑,文本文件的管理方式都不能满足需求了。通过 Apache 的 module_auth_mysql 模块,我们可以用 MySQL 来保存用户信息。该模块的主页在 http://modauthmysql.sourceforge.net/,你也可以在 http://modules.apache.org/ 找到它的发行版本。安装方法同上述 Apache 的模块一样,拷贝至 modules 目录并在 httpd.conf 文件中添加如下语句:
LoadModule mysql_auth_module modules/mod_auth_mysql.so
相应的 Location 区域改写为:
- <LOCATION repos>
- AuthName "MySQL auth"
- AuthType Basic
- AuthMySQLHost localhost
- AuthMySQLCryptedPasswords Off
- AuthMySQLUser root
- AuthMySQLDB svn
- AuthMySQLUserTable users
- require valid-user
- </LOCATION>
<LOCATION repos> AuthName "MySQL auth" AuthType Basic AuthMySQLHost localhost AuthMySQLCryptedPasswords Off AuthMySQLUser root AuthMySQLDB svn AuthMySQLUserTable users require valid-user </LOCATION>
然后在 mysql 中添加名为 svn 的数据库,并建立 users 数据表:
- create database svn;
- use svn;
- CREATE TABLE users (
- user_name CHAR(30) NOT NULL,
- user_passwd CHAR(20) NOT NULL,
- user_group CHAR(10),
- PRIMARY KEY (user_name)
- );
create database svn; use svn; CREATE TABLE users ( user_name CHAR(30) NOT NULL, user_passwd CHAR(20) NOT NULL, user_group CHAR(10), PRIMARY KEY (user_name) );
在 users 表中插入用户信息
insert into users values('username','password','group');
重新启动 Apache,在访问版本库的时候 Apache 就会用 mysql 数据表中的用户信息来验证了。
2. SSL实现加密连接:
通过 Apache 的网络链接,版本库中的代码和数据可以在互联网上传输,为了避免数据的明文传输,实现安全的版本控制,需要对数据的传输进行加密。Apache 提供了基于 SSL 的数据传输加密模块 mod_ssl,有了它,用户就可以用 https 协议访问版本库,从而实现数据的加密传输了。SSL 协议及其实现方式,是一个非常复杂的话题,本文只是介绍 Apache 提供的最基本的SSL配置方法,更加详细的介绍内容,请参考 http://httpd.apache.org/docs-2.0/ssl/ 上的文档。
开始配置前,我们需要一个实现 Apache 中 SSL 模块的动态程序库,通常名为 mod_ssl.so,及其配置文件,通常名为 ssl.conf。这个实现是跟 Apache 的版本相关的,不匹配的版本是不能用的;而且,并不是每一个 Apache 的版本都自带了相关实现文件,很多情况下,我们需要自己去搜寻相关文件。另外,我们还需要 OpenSSL 软件及其配置文件,来生成加密密钥和数字证书。这里,我们可以使用一些免费网站,如 http://hunter.campbus.com/ 上提供的集成版本的 Apache。
有了相关的工具和文件,我们就可以开始生成 SSL 的证书和密钥了。首先,我们需要找到 openssl 程序及其配置文件 openssl.cnf,运行如下命令来生成 128 位的 RSA 私有密钥文件:
- my-server.key:
- openssl genrsa -des3 -out my-server.key 1024
- Loading 'screen' into random state - done
- Generating RSA private key, 1024 bit long modulus
- .....++++++
- ........++++++
- e is 65537 (0x10001)
- Enter pass phrase for server.key:********
- Verifying - Enter pass phrase for server.key:********
my-server.key: openssl genrsa -des3 -out my-server.key 1024 Loading 'screen' into random state - done Generating RSA private key, 1024 bit long modulus .....++++++ ........++++++ e is 65537 (0x10001) Enter pass phrase for server.key:******** Verifying - Enter pass phrase for server.key:********
命令运行期间需要用户输入并确认自己的密码。
现在,我们需要 SSL 的认证证书,证书是由 CA(certificate authority) 发放并且认证的。为此,我们可以用如下命令生成一个 CSR(Certificate Signing Request) 文件发给 CA,从而得到 CA 的认证:
openssl req -new -key my-server.key -out my-s erver.csr -config openssl.cnf
当然,一般情况下,如果 Subversion 的用户不是太多,安全情况不是很复杂,我们也可以生成一个自签名的认证证书,从而省去了向 CA 申请认证的麻烦。如下命令:
openssl req -new -key my-server.key -x509 -out my-server.crt -config openssl.cnf
以上两个命令都需要用户输入那个 key 文件的密码,以及一些网络设置信息,如域名,邮箱等等,这里输入的服务器域名应该与 Apache 配置文件当中的一致。现在,我们可以在 Apache 的 conf 目录下新建一个 ssl 目录,将 my-server.key 和 my-server.crt 文件都移动到 ssl 目录里面。然后修改 ssl.conf 文件,将 SSLCertificateKeyFile 和 SSLCertificateFile 项指向这两个文件。
如果 Apache 的 module 目录里面没有 mod_ssl.so 文件,可以将事先准备好的文件拷贝过去。然后,我们可以设置 Apache 的配置文件 httpd.conf,将 ssl 模块加入其中:
LoadModule ssl_module modules/mod_ssl.so
然后,在配置文件的最后,加上如下 SSL 相关配置项:
- SSLMutex default
- SSLRandomSeed startup builtin
- SSLSessionCache none
- ErrorLog logs/SSL.log
- LogLevel info
- <VIRTUALHOST svntest.ut.cn.ibm.com:443>
- SSLEngine On
- SSLCertificateFile conf/ssl/my-server.crt
- SSLCertificateKeyFile conf/ssl/my-server.key
- </VIRTUALHOST>
SSLMutex default SSLRandomSeed startup builtin SSLSessionCache none ErrorLog logs/SSL.log LogLevel info <VIRTUALHOST svntest.ut.cn.ibm.com:443> SSLEngine On SSLCertificateFile conf/ssl/my-server.crt SSLCertificateKeyFile conf/ssl/my-server.key </VIRTUALHOST>
这样,基本的设置工作就完成了。重新启动 Apache 服务器,现在可以用 https 协议代替 http 协议来访问版本库了。如果要限定版本库只能用 https 访问,我们可以在 Apache 配置文件当中 Subversion 部分加上 “SSLRequireSSL”。如下:
<LOCATION repos> DAV svn SVNPath /etc/svn/repos ………….#other items SSLRequireSSL </LOCATION>
文件来源:http://www.vanjor.org/blog/2010/03/svn-setup-detail/
参考:http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
参考:http://www.subversion.org.cn/svnbook/1.4/index.html
<script type="text/javascript"></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script><script src="http://pagead2.googlesyndication.com/pagead/js/r20110831/r20110719/show_ads_impl.js"></script><script src="http://pagead2.googlesyndication.com/pagead/render_ads.js"></script><script></script>
相关推荐
SVN 权限设置 - 实现精细的目录访问权限控制 在软件开发项目中,多个成员共同开发,各自负责不同的模块,为了确保项目的安全和稳定,需要对项目目录进行精细的访问权限控制。本文将介绍如何利用 Subversion 自带的...
本文将通过实例讲解svn目录权限的详细设置,希望能够帮助开发者更好地理解和掌握svn权限设置。 一、项目结构 在设置svn权限之前,我们需要了解项目的结构。一个典型的项目结构通常包括以下几个部分: * 项目目录...
### SVN权限设置详解 #### 一、SVN简介 Subversion (SVN) 是一种流行的版本控制系统,用于管理和跟踪文件的变化。与CVS等其他版本控制系统相比,SVN提供了更加强大和灵活的功能。SVN的主要特点包括: - **集中式...
本文将深入探讨svn的权限设置以及本地库目录结构的设计。 首先,svn的权限设置主要通过两种方式实现:一是svnserve配置,二是通过HTTP/HTTPS协议(Apache或IIS)进行WebDAV访问。这里我们主要关注svnserve的权限...
- 权限覆盖:对于特定目录的权限设置会覆盖父目录的权限设置。 - 特殊符号:`*=`表示所有用户对某个目录都没有权限;`user1=`表示用户`user1`对某个目录没有权限。 #### 四、权限分配原则 在进行权限分配时,应...
SVN权限分配的可视化操作工具,自动解析配置文件,保存自动生成配置文件,支持组权限分配等。 简单易用的SVN中文界面的SVN权限控制工具。
总之,Subversion的权限设置提供了细粒度的控制,允许管理员根据实际需求来分配用户和团队的访问权限,确保项目的安全与协作的高效。在实际应用中,应根据团队规模和项目复杂性来定制合适的权限策略,并定期审查和...
以下是一份详细的指南,涵盖了如何在Windows环境下设置svn的用户、权限和目录。 1. **建立版本库** 创建svn版本库可以通过`svnadmin`命令实现。进入svn安装目录下的bin文件夹,执行`svnadmin create`命令,例如: ...
检查你的Svn权限设置,确保你有足够权限进行提交操作。 5. **锁定问题**:Svn支持文件锁定机制,防止多人同时修改同一文件。如果文件已被其他用户锁定,你需要与该用户协调解锁后再提交。 6. **未添加新文件**:...
### SVN权限控制全面解析 #### 一、理解认证与授权 在进行SVN权限控制之前,首先要明确两个基本概念:**认证(Authentication)**和**授权(Authorization)**。 - **认证**: 这是一个验证用户身份的过程,通常...
### SVN权限配置详解 在软件开发团队中,版本控制系统如Subversion(SVN)是必不可少的工具之一。SVN不仅提供了版本控制的功能,还具备强大的权限管理能力,这对于确保代码安全性和团队协作效率至关重要。本篇文章...
3. **配置权限**:为确保版本库的安全性,需要对版本库相关的配置文件进行适当的权限设置。 - 设置`D:\SVN_SERVER_FOLDER\conf`目录的权限。 - 修改`D:\SVN_SERVER_FOLDER\conf\svnserve.conf`文件,使其只读。 -...
对于更复杂的权限设置,例如基于路径的访问控制,可以参考`svnserve.conf`和`SVN权限设置_百度知道.mht`中的内容进行配置。`svnserve.conf`是SVN服务器的配置文件,可以控制仓库的访问策略。 在实际工作中,你可能...
在Linux环境下配置Subversion(简称svn)权限文件是一项关键任务,尤其对于团队...同时,定期审查和更新权限设置也是维护安全的重要环节。记住,权限配置应该尽可能地简洁明了,避免过于复杂的规则导致管理和维护困难。
4. 配置SVN权限: SVNManager提供了基于角色的访问控制,你可以创建不同角色并分配不同的权限,然后将用户分配给这些角色。例如,可以创建“开发者”角色,允许读写权限,创建“查看者”角色,只允许读取权限。 5....
公司几百人用一个SVN库,一个权限文件Authz 整理下来很不容易!
本篇文章将深入探讨三种常见的SVN权限管理工具:SvnAdmin、VisualSVN和suafe,包括它们的安装、使用方法以及各自的特点和优劣势。 首先,SvnAdmin是Subversion自带的命令行工具,适用于那些熟悉Linux或Unix shell的...