【问题标题】:svn post-commit Permission deniedsvn post-commit 权限被拒绝
【发布时间】:2015-03-13 20:07:13
【问题描述】:

目前我正在尝试设置一个提交后挂钩,该挂钩会自动将 svn 副本导出到我的 www-root,以便在提交完成后更新我的网站。 提交后挂钩如下所示:

#!/bin/sh

# Delete Old site
rm -R /var/www/html/sha
print 1
# Export Repository
svn export --force file:///var/local/svn /var/www/html/sha

# Make sure Apache Owns the website
chown -R www-data:www-data /var/www/html/sha

但是当我提交某些内容时,我会收到很多 Permission denied 错误。基本上是这样的:

rm: cannot remove '/var/www/html/sha/extensions/LdapAuthentication.php': Permission denied

所以我知道我需要设置一些新权限,但我不确定我设置了哪些权限。 /var/www/html 目录有 www-data:www-data 作为 user:group。

我通过隧道连接到 svn 服务器,意思是 svh+ssh://user@host/repo

有什么线索吗?

好的,它现在似乎可以工作了。我将 /var/www/html/sha 目录的所有者更改为 www-data:walter 并删除 chown 命令,因为无论如何您都需要 sudo 。现在就像一个魅力。谢谢!

【问题讨论】:

    标签: svn


    【解决方案1】:

    运行钩子脚本的用户帐户需要对该路径具有适当的权限。

    如果您使用 Apache 为您的存储库提供服务,则运行该进程的帐户需要权限。如果您使用 svnserve,则该用户帐户需要权限。

    也有可能你有另一个进程持有一个文件或目录的锁,阻止了删除它的能力。

    【讨论】:

    • 好的。我试图让使用 ps aux | 运行 svnserve 的用户grep svn 但它没有出现。它必须运行,因为我可以使用 svn.. 另一种找出哪个用户需要权限的方法?
    • 如何访问存储库?如果您不使用svn:// URL,那么我不希望 svnserve 正在运行。它是由 inetd 按需启动的吗?
    • 我使用 svn+ssh:// 所以应该有一个 svnserve。如果提交后挂钩将 svn 导出到目录,则权限如下所示:-rw-r--r-- 1 www-data walter 2034 Jan 15 15:08 index.php 据我了解,所有者是 walter 组中的 www-data。我不明白为什么这里的组是walter,因为 www-data 甚至不在这个组中。如果我将文件组更改为 www-data,则提交后脚本将运行到 chown -R www-data:www-data /var/www/html/sha
    • 如果您使用的是svn+ssh://(这是编辑原始帖子的好信息),它会变得不稳定。在这种情况下,svnserve 不会一直运行——它会在您建立连接时由sshd 启动。提交的 SSH 用户帐户是钩子脚本将在其下执行的用户帐户。您将需要阅读here 以弄清楚在这种情况下谁在做什么(我自己还没有完成 svn+ssh,所以我只能指着文档而不冒着误导您的风险)
    • 谢谢。我会编辑它。该网站显示and is now invoking a private svnserve process as that user。所以用户应该是调用 svnserve 进程的 walter。我仍然不明白为什么所有者是 www-data 而该组是 walter。你有什么线索吗?到目前为止谢谢!
    猜你喜欢
    • 2012-01-17
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多