【发布时间】:2018-09-05 03:38:42
【问题描述】:
我在 Bitbucket 上有一个名为“foo-apps”的 Git 存储库。我有一个带有此存储库本地克隆的 Linux Web 服务器,并且我希望此服务器的关联 Apache 网页通过 Bash 脚本对此存储库执行一些 Git 命令,例如 git pull 和 git checkout。问题是,只有用户“foo”有权与“foo-apps”存储库关联,并且网页以 Apache 用户“www-data”的身份运行。
似乎 www-data 可以在本地存储库上执行 git log 和其他一些命令,但不能执行 git pull 或 git checkout 命令。 (只是为了让您了解我的系统:我有一个包含 JavaScript 的 HTML 文件,其中包含一个 AJAX 请求,该请求调用一个 PHP 文件,该文件调用我的 Bash 脚本,其中包含 Git 命令。)
当进程由 Web 界面触发时,我可以通过哪些方式成功地让这些 Git 命令工作?我不反对任何可行的建议,即使它们包括对我的系统进行全面检修......但是,我希望用我已经拥有的最简单有效的解决方案。
以下是我想到并尝试了一下的一些想法。它们似乎都不起作用,但请记住,我只“尝试了一半”,因为我没有信心使用首选方法:
- 授予对我的 Bitbucket 存储库的 www-data 权限
- 允许 Apache 访问 foo 的 ssh 密钥
- 在脚本中以某种方式切换到用户 foo,例如
sudo、su等。(我认为这种类型的想法更符合我想要的......我没有对 Bitbucket 存储库的设置进行大量控制。我也可以在脚本中输入密码。)
这个网络服务器在一个封闭的网络上,对我来说安全性不是很重要。
我不知道它是否有用,但以下是我在尝试这些方法时收到的一些与 Git 相关的主要错误:
error: cannot open .git/FETCH_HEAD: Permission denied
fatal: BUG: get_tempfile_fd() called for inactive object
/usr/bin/git: /usr/bin/git: cannot execute binary file
【问题讨论】:
-
创建一个 shell 脚本,可以在您想要执行的目录中执行您想要的操作,然后授予 Apache 无密码 sudo 访问权限以以
foo运行该脚本(仅此而已)。 -
这似乎是最简单的事情。我没有意识到您可以授予特定用户权限以运行 /etc/sudoers 中的特定文件。
标签: linux bash git apache git-pull