对不起,这个“愚蠢”的问题,但我真的无法find一个在互联网上的解决scheme。 请帮帮我。
我正在Linux服务器上使用Subversion来控制版本控制我正在维护的一个网站项目的文件。
这是我的configuration:
项目文件夹(服务器上的存储库的工作副本,为了访问项目并使用浏览器查看网站 – Apache指向DocumentRoot的这个目录):
/var/projects/prj
资源库文件夹:
/var/repo/prjrepo
当我安装SVN( apt-get install subversion libapache2-svn )时,它既没有创build用户subversion也没有创build组subversion。 我不明白为什么。
我使用Windows上的TortoiseSVN来检出/更新/提交。
我使用HTTP连接到授权用户列表的存储库:
http://1.2.3.4/svn/prjrepo
授权到存储库的用户列表保存在一个htpasswd文件中,其中包含用户列表和他们的MD5密码。
当然Apache运行www数据。
prj文件夹由root:root拥有,除了www-data需要写入的目录(例如file upload)以外,其他文件夹只能访问这些文件。
存储库文件夹是由用户和组创build的svn:svn,但也许这是无用的。 用户和组的权限为rwx,其他权限则为空。 另外,我在所有文件夹上强制g + s,这样svn组将始终是所有新文件的所有者。
问题是,当我提交一个文件到存储库,它说,由于“权限被拒绝”,它失败了。 我可以理解为什么:存储库文件夹由svn:svn拥有,但是当提交时,Tortoise向服务器发出HTTP请求。 HTTP请求以www-data的forms运行,当然,这些人对仓库没有权限。
我还添加了一个提交后的操作,以便在每次提交时更新工作副本(prj文件夹)。 如果我将存储库的所有者组更改为www-data,则Tortoise能够提交,但当然由于www-data无法写入prj文件夹下的所有目录和文件,所以提交后的操作会发生错误。 这是正确的(万维网 – 数据不能写文件,它只能读 – 这是阿帕奇,这是网站…)。
所以:我真的不知道如何正确configuration文件夹的权限,以使一切正常。 请记住,www数据不能写访问prj,因为它只是读取这些文件(例如一些文件夹,如用于file upload的文件夹)。
另一个问题:现在Apache被configuration为只允许那些为了这个目的而创build的特定htpasswd文件中定义的用户访问存储库(见上文)。 有没有什么办法让一些LINUX用户可以访问版本库,而不需要为版本库访问定义新的用户呢? 那可能吗? 怎么样?
如果您使用DAV选项进行颠覆,则需要让Web服务器访问存储库。 这可以像将存储库的所有文件/目录更改为由www数据拥有一样简单。
如果您希望提交后的操作执行某些有用的操作,则可能需要查看为以www数据运行时需要执行的特定脚本/命令设置无密码sudo 。 所以在你的后命令脚本中,你可能有类似的东西
sudo bash -c 'cd /var/projects/prj ; svn update'