【发布时间】:2013-07-19 06:39:13
【问题描述】:
我有以下设置:
两个用户:example 和 git
在/home/git/repositories/project.git/hooks/post-receive里面我有一个/home/example/public_html/dev的结帐
所以每次 git push 都会将项目文件发布到http://dev.example.com
问题是,checkout 是从 git 用户执行的,所以 dev 目录下的所有文件都归 git:git 所有,权限是 600。
所以访问http://dev.example.com 不会显示该页面。因为用户 apache 无权访问它。
有人建议在 post-receive 挂钩内做一个 chown。 好吧,那么用户 git 需要是 sudo。 所以我将用户 git 添加为 sudoer。 下一个问题是“抱歉,您必须有一个 tty 才能运行 sudo” 所以我注释掉了#Default requiretty,但是遇到了下一个问题。
让用户 git 成为 sudoer 不是我想要的(不安全),所以我将一切改回正常。
还有其他更安全的选择吗?
可能让 post-receive 钩子触发 dev 文件夹内的一个 php 文件,这个 php 文件将执行结帐?
或者我可以用 apache kan 在浏览器中显示它们的方式将 dev 文件夹符号链接到 /home/git 中的文件夹吗?
【问题讨论】:
-
如果 post-receive 挂钩将权限更改为 644 而不更改所有权就足够了吗?
-
那么您需要 sudo 才能 chmod 任何文件,对吗?
-
不,不是你自己的文件。
-
酷。我在 dev 文件夹中也有包含 mysql 密码等的文件。它们在结帐时不会被覆盖。所以我的开发人员可以在不知道我的密码的情况下开发和测试那里的代码。这些密码文件归用户示例所有。所以“chmod 644 -R /home/example/public_html/dev/*”会在这些文件上产生一些错误,因为我不是所有者。我认为我的最终解决方案是对仅由我自己(用户 git)拥有的文件执行 chmod 命令,并保持密码文件完整