抱歉,这个问题“很愚蠢”,但我确实在网上找不到解决方案。请帮帮我。
我在 Linux 服务器上使用 Subversion 对我维护的网站项目的文件进行版本控制。
这是我的配置:
项目文件夹(服务器上存储库的工作副本,为了访问项目并使用浏览器查看网站 - Apache 将此目录指向为 DocumentRoot):
/var/projects/prj
存储库文件夹:
/var/repo/prjrepo
当我安装 SVN ( apt-get install subversion libapache2-svn
) 时,它没有创建用户颠覆,也没有创建组颠覆。我不明白为什么。
我在 Windows 上使用 TortoiseSVN 来签出/更新/提交。
我使用 HTTP 连接到带有授权用户列表的存储库:
http://1.2.3.4/svn/prjrepo
授权访问存储库的用户列表与用户列表及其 MD5 密码一起保存在 htpasswd 文件中。
当然,Apache 以 www-data 的形式运行。
prj 文件夹归 root:root 所有,其他人只能对文件进行 rx 访问,除了 www-data 需要写入的目录(例如文件上传)。
存储库文件夹归我创建的用户和组 svn:svn 所有,但这可能没什么用。权限对于用户和组是 rwx,对于其他用户则没有。此外,我强制所有文件夹都为 g+s,这样 svn 组将始终是所有新文件的所有者。
问题是,当我将文件提交到存储库时,系统提示“权限被拒绝”,因此提交失败。我可以理解原因:存储库文件夹归 svn:svn 所有,但 Tortoise 在提交时向服务器发出 HTTP 请求。HTTP 请求以 www-data 的身份运行,而 www-data 当然没有对存储库的权限。
我还添加了提交后操作,以便在每次提交时更新工作副本(prj 文件夹)。如果我将存储库的所有者组更改为 www-data,Tortoise 可以提交,但提交后操作当然会出错,因为 www-data 无法写入 prj 文件夹下的所有目录和文件。这是正确的(www-data 无法写入它只能读取的文件 - 这是 Apache,这是网站……)。
所以:我真的不知道如何正确配置文件夹的权限以使一切正常。请记住,www-data 不得对项目具有写访问权限,因为它只能读取这些文件(例如,用于文件上传的文件夹除外)。
另一个问题:现在 Apache 已配置为仅允许在为此目的创建的特定 htpasswd 文件下定义的用户访问存储库(见上文)。有没有办法让某些 LINUX 用户能够访问存储库,而无需专门为存储库访问定义新用户?这可能吗?如何做?
答案1
如果您使用 DAV 选项进行 subversion,则需要授予 Web 服务器对存储库的访问权限。这可以很简单,只需将存储库的所有文件/目录更改为由 www-data 拥有即可。
如果你希望提交后的操作能够发挥作用,那么可能需要考虑设置无密码 sudo针对在作为 www-data 运行时需要执行的特定脚本/命令。因此,在命令后脚本中,您可能会看到类似
sudo bash -c 'cd /var/projects/prj ; svn update'