<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>水草树 &#187; 基本认证</title>
	<atom:link href="http://mifunny.info/tag/%e5%9f%ba%e6%9c%ac%e8%ae%a4%e8%af%81/feed" rel="self" type="application/rss+xml" />
	<link>http://mifunny.info</link>
	<description>走走停停看看，恍然大悟。</description>
	<lastBuildDate>Sat, 27 Aug 2011 18:25:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>配置SVN服务器的授权</title>
		<link>http://mifunny.info/authorized-options-of-svn-115.html</link>
		<comments>http://mifunny.info/authorized-options-of-svn-115.html#comments</comments>
		<pubDate>Sun, 21 Sep 2008 17:22:36 +0000</pubDate>
		<dc:creator>LD</dc:creator>
				<category><![CDATA[版本控制]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[基本认证]]></category>

		<guid isPermaLink="false">http://mifunny.info/authorized-options-of-svn-115.html</guid>
		<description><![CDATA[上次介绍了如何建立一个简单的SVN服务器, 但是这样的SVN服务器没有权限限制，只要是可以访问的人都能对版本库进行修改。 可以说这是绝对不安全，不利于管理的。 这节介绍一下利用Apache提供的基本HTTP认证机制来强化我们的SVN服务管理。 依旧假定 http服务的根目录在 /srv/http/ ， svn的目录在 /srv/http/svn/ ; 为了方便测试权限配置，请禁用SVN凭证缓存，编辑 $HOME/.subversion/config [auth]store-auth-creds = no [这里主要提供示例，详细信息请查看svn手册] 制定目标 为了方便讲解，设定两种不同的管理目标: 版本库 svntest1 : 只有具有账户的用户才能访问，其中 harry 具有读写(rw)权限，而 sally 只能干看的份(r); (本地目录 /srv/http/svn/svntest1/) 版本库 svntest2 : 凡是匿名用户都有查看的权限，而注册用户(sally)皆有读写的权限(rw); (本地目录 /srv/http/svn/svntest2/) 设定apache配置档 为了比较细致的设定访问权限，我们在apache的配置文件(httpd.conf)中引入SVN的用户认证模块: mod_authz_svn.so ,那么现在模块的顺序是: LoadModule dav_module modules/mod_dav.soLoadModule dav_svn_module modules/mod_dav_svn.soLoadModule authz_svn_module modules/mod_authz_svn.so &#160;&#160;&#160;&#160;因为上面两种不同的要求，所以我们希望apache首先把任何用户当做匿名用户，当遇到目录权限时，才要求用户提供用户名和密码; 引入权限配置文件， Location 段改为： &#60;Location /svn/&#62; DAV svn SVNParentPath [...]]]></description>
			<content:encoded><![CDATA[<p style="text-indent: 2em" >上次介绍了<a href="http://mifunny.info/simple-svn-server-113.html" target="_bank" title="建立最简单的SVN服务器" alt="建立 最简单 SVN 服务器" >如何建立一个简单的SVN服务器</a>, 但是这样的SVN服务器没有权限限制，只要是可以访问的人都能对版本库进行修改。 可以说这是绝对不安全，不利于管理的。 这节介绍一下<a href="#" alt="" >利用Apache提供的基本HTTP认证机制来强化我们的SVN服务管理</a>。</p>
<p align="center"><img src="http://lh3.ggpht.com/kldscs/SNZy0R6D6iI/AAAAAAAAA2k/eXOQCR3bxbc/s800/subversion_logo.png" title="版本控制 subversion"  alt="svn subversion logo" /></p>
<p><span id="more-115"></span>
<p style="text-indent: 2em" >依旧假定 http服务的根目录在 /srv/http/ ， svn的目录在 /srv/http/svn/ ;<br />    为了方便测试权限配置，请禁用SVN凭证缓存，编辑 $HOME/.subversion/config<br />
<table style="border:2px solid #E0E0E0;" >
<tr>
<td>	[auth]<br />store-auth-creds = no</td>
</tr>
</table>
<p>[这里主要提供示例，详细信息请查看svn手册]</p>
<p><strong>制定目标</strong><br />
<br />为了方便讲解，设定两种不同的管理目标:
<ol style="list-style-type: decimal" >
<li> 版本库 svntest1 :<br />  只有具有账户的用户才能访问，其中 harry 具有读写(rw)权限，而 sally 只能干看的份(r); <br />(本地目录 /srv/http/svn/svntest1/)</li>
<p>
<li> 版本库 svntest2 :<br />  凡是匿名用户都有查看的权限，而注册用户(sally)皆有读写的权限(rw); <br />(本地目录 /srv/http/svn/svntest2/)</li>
</ol>
<p><strong>设定apache配置档</strong></p>
<p style="text-indent: 2em" >为了比较细致的设定访问权限，我们在apache的配置文件(httpd.conf)中引入SVN的用户认证模块: mod_authz_svn.so ,那么现在模块的顺序是:<br />
<table style="border:2px solid #E0E0E0;" >
<tr>
<td>	LoadModule dav_module modules/mod_dav.so<br />LoadModule dav_svn_module modules/mod_dav_svn.so<br />LoadModule authz_svn_module modules/mod_authz_svn.so</td>
</tr>
</table>
<p>&nbsp;&nbsp;&nbsp;&nbsp;因为上面两种不同的要求，所以我们希望apache首先把任何用户当做匿名用户，当遇到目录权限时，才要求用户提供用户名和密码; 引入权限配置文件， Location 段改为：<br />
<table style="border:2px solid #E0E0E0;" >
<tr>
<td>&lt;Location /svn/&gt;<br />        DAV svn<br />        SVNParentPath /srv/http/svn</p>
<p>        # our access control policy<br />        AuthzSVNAccessFile /etc/httpd/svn/authz</p>
<p>        # try anonymous access first, resort to real authentication if necessary.<br />        Satisfy Any<br />        Require valid-user</p>
<p>        # how to authenticate a user<br />        AuthType Basic<br />        AuthName &#8220;LD&#8217;s Subversion Server&#8221;<br />        AuthUserFile /etc/httpd/svn/passwd<br />        # 把配置文件都放 /etc/httpd/ 下，方便管理<br />&lt;/Location&gt;</td>
</tr>
</table>
<p><strong>设定目录(版本库)权限</strong></p>
<p style="text-indent: 2em" >根据前一步的设定，目录权限配置文件是 /etc/httpd/svn/authz ，密码文件是 /etc/httpd/svn/passwd ; 关于authz文件，在每个版本库目录下的 conf 目录下有简单的示例。</p>
<p> 先设置密码<br />
<table style="border:2px solid #E0E0E0;" >
<tr>
<td><span style="color: gray;">user@~$</span>  sudo htpasswd -c /etc/httpd/svn/passwd harry<br /><span style="color: gray;">user@~$</span> sudo htpasswd /etc/httpd/svn/passwd sally <br /># 注意： 第一行 htpasswd 加了参数 -c 表示创建文件，而第二行不加，否则只有sally的密码</td>
</tr>
</table>
<p style="text-indent: 2em" >修改目录权限配置文件是 /etc/httpd/svn/authz ; 注释： [/]表示你所有代码库的根目录，而[repository:/]表示其中一个名叫“repository”的代码库的根目录。</p>
<p>让我们先来实现管理<b>目标1</b>: 在文件 authz 中这么写<br />
<table style="border:2px solid #E0E0E0;" >
<tr>
<td>[groups]<br /># 建立一个group，成员有 harry 和 sally<br />svntest1 = harry,sally </p>
<p># 版本库 svntest1 的根目录 <br />[svntest1:/]</p>
<p># 对整个群组开放可读<br />@svntest1 = r</p>
<p># 授予 harry 可读写权限<br />harry = rw</p>
<p># 其他人没有权限，空着<br />* =</td>
</tr>
</table>
<p>好了，看看测试结果:
<ol style="list-style-type: upper-roman" >
<li>harry 正常访问，可以修改<br /> (测试 mkdir、import、delete 执行成功)</li>
<li>	sally	 能访问，但不能修改<br />（list	执行成功; 测试 list、delete 执行失败）</li>
<li>	anonymous	不能访问</li>
<li>	浏览器不能访问</li>
</ol>
<p>看了第一个目标，是不是觉得svn权限配置很简单，继续<b>目标2</b>: 修改文件 authz<br />
<table style="border:2px solid #E0E0E0;" >
<tr>
<td>[groups]<br />svntest1 = harry,sally <br /># 建立群组 svntest2 ，只有一个组员 sally<br />svntest2 = sally</p>
<p># 版本库 svntest2 的根目录 <br />[svntest2:/]</p>
<p># 给自己群组读写权限<br />@svntest2 = rw<br /># 当然也可以只把写权限给 sally<br /># sally = rw</p>
<p># 其他人只有读权限<br />* = r</td>
</tr>
</table>
<p>目标2的测试结果:
<ol style="list-style-type: upper-roman" >
<li>sally 正常访问，可以修改 <br />(测试 mkdir、commit、delete 执行成功)</li>
<li>	anonymous 和 harry 能访问，但不能修改<br /> (list执行成功;	测试 delete、commit 执行失败)</li>
<li>	浏览器可以访问</li>
</ol>
<p><strong>结束语</strong>	</p>
<p style="text-indent: 2em" >OK，两个示例over了。 再进行深入目录的权限设置，举一反三即可。 其实 subversion 权限设置还是比较简单的，比vsftpd还单薄许多。 SVN手册上不太建议使用基于路径的访问控制，公司的话，还是这样配置比较简洁; 而且一般还算熟悉Linux的，对这个权限理解应该没有问题。</p>
<p style="text-indent: 2em" >补遗: 只要在 &#8220;Location&#8221; 中加入 &#8220;SVNListParentPath on&#8221; ,就能让浏览器支持版本库列表; 如果考虑安全问题，建议保持默认关闭。</p>
]]></content:encoded>
			<wfw:commentRss>http://mifunny.info/authorized-options-of-svn-115.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

