SVN权限管理

转自:http://www.cnblogs.com/xingchen/archive/2010/07/22/1782684.html

/***********************************************************/

//SVNSubversion 用户权限管理

//资料来源:网络、总结

//2010年7月20日

/***********************************************************/

基本的操作:

以我创建的Svn工程为例子来讲解SVN权限管理的配置

仓库创建路径:D:\SVNLibrary

>>>取消匿名登陆:

打开文件D:\SVNLibrary\conf\svnserve.conf

找到:###anon-access = read

将前面的注释去掉,并将read 改为:none

即使:anoe-access=none  表示匿名登陆下的用户权限为空。即:系统不支持匿名登陆

说明:

auth-access = write #通过验证的用户可以读和写

auno-access = read #匿名登陆下可以只读文件,即:文件修改后无法提交到服务器

password-db =password #用户保存文件的名称

authz-db =authz #权限管理文件 这个是非常重要的,如果我们要对整个工程的文件进行权限分配的时候,就必须将这个行文件前面注释掉,否咋即使我们在权限配置文件里面进行再多的配置都是无效的。这点我已经犯错了。

然后我们在authz 文件下面进行权限的分配

在权限分配的时候要注意的问题:

>>>对某个用户,如果只赋给他某个目录的权限,但对上级目录没有赋给,则他不能有上级目录的任何权限

例如某个用户有:/repository/project1的r权,而没有/repository的r权

>>>对于所有的目录,都优先处理设置在这个目录上的权限设置。

例如sai用户: 
[/repository] 
sai = rw 
对于repository目录,他有rw的权限。

[/repository/project1] 
sai = r

对于repository下的project1目录,他只有r权限。

则,这个saiy用户只有project1的r权。而repository下其他目录有rw权。

>>>权限分配,只可以分配到某个目录,而不能到某个文件

>>>如果某个目录上没有对某个用户设置权限,则一直向上级目录查找,看是否有权限

例如sai用户

[/repository] 
sai=rw

[/repository/project1] 
saiya=rw

则sai用户一样拥有/repository/project1的读写权限

>>>分配权限时,= 的左边为用户,不能想当然的以,号分开加入多个用户

>>>如果想设置某用户都没有rw的权限,只要 = 号的右边这空即可

User1 =

>>>如果某一个文件夹,对于人任何用户都没有权限

* =

其中*代表所有的人

SVN深入的部分

本章将详细介绍前一章所涉及的两个配置文件, svnserve.conf 和 authz.conf,通过对配置逐行的描述,来阐明其中的一些细节含义。 
这 里首先要注意一点,任何配置文件的有效配置行,都不允许存在前置空格,否则程序会无法识别。也就是说,如果你直接从本文的纯文本格式中拷贝了相关的配置行 过去,需要手动将前置的4个空格全部删除。当然了,如果你觉得一下子要删除好多行的同样数目的前置空格是一件苦差使,那么也许 UltraEdit 的“Column Mode”编辑模式,可以给你很大帮助呢。 
1   svnserve.conf 
arm\conf\svnserve.conf 文件,是 svnserve.exe 这个服务器进程的配置文件,我们逐行解释如下。 
首先,我们告诉 svnserve.exe,用户名与密码放在 passwd.conf 文件下。当然,你可以改成任意的有效文件名,比如默认的就是 passwd: 
password-db = passwd.conf 
接 下来这两行的意思,是说只允许经过验证的用户,方可访问代码库。 那么哪些是“经过验证的”用户呢?噢,当然,就是前面说那些在 passwd.conf 文件里面持有用户名密码的家伙。这两行的等号后面,目前只允许 read write none 三种值,你如果想实现一些特殊的值,比如说“read-once”之类的,建议你自己动手改源代码,反正它也是自由软件: 
anon-access = none 
auth-access = write 
接下来就是最关键的一句呢,它告诉 svnserve.exe,项目目录访问权限的相关配置是放在 authz.conf 文件里: 
authz-db = authz.conf 
当 然,svn 1.3.2 引入本功能的时候,系统默认使用 authz 而不是 authz.conf 作为配置文件。不过由于鄙人是处女座的,有着强烈的完美主义情结,看着 svnserve.conf 有后缀而 passwd 和 authz 没有就是不爽,硬是要改了。 
2   authz.conf 之用户分组 
arm\conf\authz.conf 文件的配置段,可以分为两类,``[group]`` 是一类,里面放置着所有用户分组信息。其余以 [arm:/] 开头的是另外一类,每一段就是对应着项目的一个目录,其目录相关权限,就在此段内设置。 
首先,我们将人员分组管理,以便以后由于人员变动而需要重新设置权限时候,尽量少改动东西。我们一共设置了5个用户分组,分组名称统一采用 g_ 前缀,以方便识别。当然了,分组成员之间采用逗号隔开: 
[groups] 
# 任何想要查看所有文档的非本部门人士 
g_vip = morson 
# 经理 
g_manager = michael 
# 北京办人员 
g_beijing = scofield 
# 上海办人员 
g_shanghai = lincon 
# 总部一般员工 
g_headquarters = rory, linda 
# 小秘,撰写文档 
g_docs = linda 
注 意到没有, linda 这个帐号同时存在“总部”和“文档员”两个分组里面,这可不是我老眼昏花写错了,是因为 svnserve.exe 允许我这样设置。它意味着,这个家伙所拥有的权限,将会比他的同事 rory 要多一些,这样的确很方便。具体多了哪些呢?请往下看! 
3   authz.conf 之项目根目录 
接着,我们对项目根目录做了限制,该目录只允许arm事业部的经理才能修改,其他人都只能眼巴巴的看着: 
[arm:/] 
@g_manager = rw 
* = r 
[arm:/] 表示这个目录结构的相对根节点,或者说是 arm 项目的根目录 
这里的 @ 表示接下来的是一个组名,不是用户名。你当然也可以将 @g_manager=rw 这一行替换成 michael=rw ,而表达的意义完全一样。 
* 表示“除了上面提到的那些人之外的其余所有人”,也就是“除了部门经理外的其他所有人”,当然也包括总经理那个怪老头 
* = r 则表示“那些人只能读,不能写” 
4   authz.conf 之项目子目录 
然后,我们要给总部人员开放日志目录的读写权限: 
[arm:/diary/headquarters] 
@g_manager = rw 
@g_headquarters = rw 
@g_vip = r 
* = 
我 敢打赌,设计svn的家伙们,大部分都是在 unix/linux 平台下工作,所以他们总喜欢使用 / 来标识子目录,而完全忽视在 MS Windows 下是用 \ 来做同样的事情。所以这儿,为了表示 arm\diary\headquarters 这个目录,我们必须使用 [arm:/diary/headquarters] 这样的格式。 
这里最后一行的 *= 表示,除了经理、总部人员、特别人士之外,任何人都被禁止访问本目录。这一行是否可以省略呢? 
之所以这儿需要将 @g_vip=r 一句加上,就是因为存在上述这个解释。如果说你没有明确地给总经理授予读的权力,则他会和其他人一样,被 * 给排除在外。 
如果众位看官中间,有谁玩过防火墙配置的话,可能会感觉上述的配置很熟悉。不过这里有一点与防火墙配置不一样,那就是各个配置行之间,没有 先后顺序 一说。也就是说,如果我将本段配置的 *= 这一行挪到最前面,完全不影响整个配置的最终效果。 
请注意这儿,我们并没有给 arm\diary 目录设置权限,就直接跳到其子目录下进行设置了。我当然是故意这样的,因为我想在这儿引入“继承”的概念。

权限具备继承性 任何子目录,均可继承其父目录的所有权限,除非它自己被明确设置了其他的权限。

也就是说,在 arm 目录设置权限后, arm\diary 目录没有进行设置,就意味着它的权限与 arm 目录一样,都是只有经理才有权读写,其他人只能干瞪眼。 
【 * = 是否可以省略】【用例子引入覆盖】【单用户权限的继承问题】【父目录权限集成与全面覆盖问题】 
现在来看看 
好了,我们现在掌握了 “继承”的威力,它让我们节省了不少敲键盘的时间。可是现在又有一个问题了, 
属性具备覆盖性质子目录若设置了属性,则完全覆盖父目录。 
5   authz.conf 的其他注意点 
父目录的 r 权限,对子目录 w 权限的影响 
把 这个问题专门提出来,是因为在1.3.1及其以前的版本里面,有个bug,即为了子目录的写权限,项目首目录必须具备读权限。因此现在使用了1.3.2版 本,就方便了那些想在一个代码库存放多个相互独立的项目的管理员,来分配权限了。比如说央舜公司建立一个大的代码库用于存放所有员工日志,叫做 diary,而arm事业部只是其中一个部门,则可以这样做: 
[diary:/] 
@g_chief_manager = rw 
[diary:/arm] 
@g_arm_manager = rw 
@g_arm = r 
这 样,对于所有arm事业部的人员来说,就可以将 svn://192.168.0.1/diary/arm 这个URL当作根目录来进行日常操作,而完全不管它其实只是一个子目录,并且当有少数好奇心比较强的人想试着 checkout 一下 svn://192.168.0.1/diary 的时候,马上就会得到一个警告“Access deni”,哇,太酷了。 
默认权限 
如果说我对某个目录不设置任何权限,会怎样?马上动手做个试验,将: 
[diary:/] 
@g_chief_manager = rw 
改成: 
[diary:/] 
# @g_chief_manager = rw 
这样就相当于什么都没有设置。在我的 svn 1.3.2 版本上,此时是禁止任何访问。也就是说,如果你想要让某人访问某目录,你一定要显式指明这一点。这个策略,看起来与防火墙的策略是一致的。 
只读权限带来的一个小副作用 
若设置了: 
[arm:/diary] 
* = r 
则svnserve认为,任何人,都不允许改动diary目录,包括删除和改名,和新增。 
也就是说,如果你在项目初期创建目录时候,一不小心写错目录名称,比如因拼写错误写成 dairy,以后除非你改动 authz.conf 里面的这行设置,否则无法利用 svn mv 命令将错误的目录更正。 
改进 
1   对中文目录的支持 
上 午上班的时候,Morson 来到 Michael 的桌子前面,说道:“你是否可以将我们的北京办、上海办目录,改成用中文的,看着那些拼音我觉得很难受?” Michael 心想,还好这两天刚了解了一些与 unicode 编码相关的知识,于是微笑地回答:“当然可以,你明天下午就可以看到中文目录名称了。” 
使用 svn mv 指令,将原来的一些目录改名并 commit 入代码库,改名后的目录结构如下: 
arm 
├─工作日志 
│  ├─ 总部人员 
│  ├─北京办 
│  └─上海办 
├─公司公共文件参考目录 
└─临时文件存放处 
修改代码库的 authz.conf 文件,将相应目录逐一改名 
使用 UltraEdit 将 authz.conf 文件转换成不带 BOM 的 UTF-8 格式 
将 配置文件转换成 UTF-8 格式之后,Subversion 就能够正确识别中文字符了。但是这里需要注意一点,即必须保证 UTF-8 文件不包含 BOM 。BOM 是 Byte Order Mark 的缩写,指 UNICODE 文件头部用于指明高低字节排列顺序的几个字符,通常是 FFFE ,而将之用 UTF-8 编码之后,就是 EFBBBF 。由于 UTF-8 文件本身不存在字节序问题,所以对 UTF-16 等编码方式有重大意义的 BOM,对于 UTF-8 来说,只有一个作用——表明这个文件是 UTF-8 格式。由于 BOM 会给文本处理带来很多难题,所以现在很多软件都要求使用不带 BOM 的 UTF-8 文件,特别是一些处理文本的软件,如 PHP、 UNIX 脚本文件等,svn 也是如此。 
目前常用的一些文本编辑工具中,MS Windows 自带的“记事本”里面,“另存为”菜单保存出来的 UTF-8 格式文件,会自动带上 BOM 。新版本 UltraEdit 提供了选项,允许用户选择是否需要 BOM,而老版本的不会添加 BOM。请各位查看一下自己常用的编辑器的说明文件,看看它是否支持这个功能。 
利用 UltraEdit ,我们可以将 BOM 去掉。方法是,首先利用“UTF-8 TO ASCII”菜单将文件转换成本地编码,通常是GB2312码,然后再使用“ASCII TO UTF-8(UNICODE Editing)”来转换到 UTF-8 即可。

时间: 2024-08-29 19:12:10

SVN权限管理的相关文章

(六)svn 服务器端使用之权限管理

权限管理(了解) 认证授权机制 在企业开发中会为每位程序员.测试人员等相关人员分配一个账号,用户通过使用svn客户端连接svn服务时需要输入账号和密码,svn服务对账号和密码进行校验,输入正确可以继续访问,当用户访问仓库下某个目录时,svn服务对用户进行授权,如果用户拥有该目录的访问权限方可访问. 判断账号和密码输入是否正确的过程即认证过程. 判断用户是否拥有目录的读/写权限时即授权的过程. 创建用户 点击菜单上的Users可以在右侧窗口区域中看见已经创建的用户 选中用户后右击可以修改用户的密码

svn(二权限管理)

Subversion权限配置 v svn 仓库权限配置 ? svnserve.conf 定义所有认证和授权政策 ? passwd 存放项目成员帐户信息 ? authz 主要是做复杂的群组权限控制 项目仓库目录下的conf 目录中 F 第一步对svnserve.conf 文件作如下修改,找到以下四行: #anon-access = read #auth-access = write #password-db = passwd #authz-db = authz 将这四行前的“#”号去掉,并修改如下

ASP.NET MVC+EF框架+EasyUI实现权限管理系列

http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个 项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个 系列

ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个系列,可能要很长时间吧,但是我肯定会一直坚持,如果我哪里写的不好欢迎大家指出我们共同学习,而且我理解的也不是很透彻,所以我想在写这样一遍

Jenkins配置基于角色的项目权限管理--转

本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理. 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin,介绍页面:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin 一.配置插件 安装插件后,进入系统设置页面,配置如下: 官网上安全域设置为Servlet容器代理,实际操作发现Jenkins专有用户数

脚本分享-利用"SED"命令编写一个用于SVN账号管理的交互式脚本

描述 由于公司员工流动性强,SVN服务器总是要添加和删除账号,每次都要反复的配置,当账号密码多了有点眼花缭乱,感觉有点麻烦,为了方便,所以写了一个基于"Sed"命令的用于添加和删除SVN账号的交互式脚本分享! 前提 我们都只到配置SVN服务,有两个文件"passwd"和"authz"."passwd"用于存储账号密码信息,"authz"用于账号权限控制.我们这个脚本依赖于文件结构,需要准备两个规范化的文档.

spring-security权限管理学习目标

1.SVN基本介绍: 1.svn基本的概念 2.svn架构 3.svn下载与安装 4.svn搭建与基本操作 2.svn基本操作 1.操作1 2.操作2 3.冲突产生 4.冲突解决 3.SVN在IDEA下的基本使用 1.IDEA下svn配置与share project 2.IDEA下SVN基本使用 3.SVN目录结构及作用 4.SVN打分支及主干合并到分支 4.前端页面 1.首页制作 2.显示页面制作 3.登录页面自作 4.主页面制作 5.ssm整合 1.整合基本介绍 2.项目结构目录介绍 3.m

Oracle 表空间和用户权限管理

一. 表空间 Oracle数据库包含逻辑结构和物理结构. 数据库的物理结构指的是构成数据库的一组操作系统文件. 数据库的逻辑结构是指描述数据组织方式的一组逻辑概念以及它们之间的关系. 表空间是数据库逻辑结构的一个重要组件. 表空间可以存放各种应用对象,如表.索引等. 而每一个表空间由一个或多个数据文件组成. 1. 表空间的分类 表空间可分为3类: 永久性表空间:一般保存表.上天.过程和索引等数据.system.sysaux.users.example表空间是默认安装的. 临时性表空间:只用于保存

linux文件权限管理与ACL访问控制列表

一.文件属性 1.文件属性: 文件属性操作 chown : change owner  ,设置文件所有者 chgrp : change group  ,设置文件的属组 文件属主修改: chown 格式:chown [OPTION]- [OWNER][:[GROUP]] FILE- 用法: OWNER OWNER:GROUPNAME    (同时修改属主.属组) :GROUPNAME                (默认属主,修改属组) ( 命令中的冒号可用.替换:) chown  –refere