【问题标题】:setuid on svn update wrapper not working?svn 更新包装器上的 setuid 不起作用?
【发布时间】:2011-03-28 11:29:25
【问题描述】:

我有一个属于用户 'foo' 并通过 Apache 访问的 svn 存储库,我正在尝试从 post-commit 挂钩运行 svn update,该目录也属于 foo。

按照http://subversion.apache.org/faq.html#website-auto-update 中的建议,我创建了一个由 foo 拥有的 C 包装器并设置了 suid 位,然后应该由用户 www-data 运行的提交后脚本调用该位。

不过,当我从用户 www-data(使用空环境)运行包装器时,它实际上以用户 foo 的身份调用 svn update,但莫名其妙地我收到 svn 提示,询问用户 www-data 的密码。

包装器的代码,称为 svnupdater.c 与官方常见问题解答中建议的相同(当然路径正确)。它由用户 foo 创建和编译。设置 suid 位后, ls -l inside /hooks 显示:

-rwxr-xr-x 1 www-data foo   74 2011-03-28 12:54 post-commit
-rwsr-sr-x 1 foo      foo 7144 2011-03-28 12:16 svnupdater

如果我然后“su www-data”并运行“env - ./svnupdater”(从 sh 或从 bash),ps aux 正确显示:

foo   20260  3.7  0.8  14008  4492 pts/0    S+   12:18   0:00 svn update /home/foo/foosvn

但我仍然可以看到 svn update 提示我:

Authentication realm: <http://xxxxxx> xxxxx
Password for 'www-data':

当然,当提交后调用它时,整个事情都不会起作用。

我似乎无法真正理解问题出在哪里,因为这个策略是官方建议的,但看起来 svn update 正在绕过 setuid 并且仍然使用实际用户......

【问题讨论】:

    标签: svn apache setuid


    【解决方案1】:

    看来我找到了解决办法。

    你需要在包装器中添加 --config-dir 参数(所以它看起来像this),因为它看起来 svn 不会从正确的目录读取身份验证文件。

    我认为这应该记录在 Apache 常见问题解答中。

    【讨论】:

      猜你喜欢
      • 2015-08-24
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      相关资源
      最近更新 更多