我有一个 Web 应用程序,其代码由远程 Ubuntu 服务器上的 root 用户拥有。应用程序代码保存在 /var/www/ 下。代码的大多数文件和子目录也由 root 用户拥有。当我尝试从我的 bitbucket 存储库中提取代码的最新更改时,我收到以下错误:“将对象添加到存储库数据库 .git/objects 的权限不足。”项目的 .git/objects 文件夹中的大多数子目录和文件不为非 root 用户提供写入权限。解决此错误并确保 git pull 成功的最佳方法是什么?1) 更改 .git/objects 中所有这些文件/文件夹的用户或 2) 更改所有这些文件/文件夹的权限以允许所有人写入或 3) 其他方法?
答案1
一种常见的方法是让有特殊目的的用户和组来做这类事情 — — 通常每个服务一个,例如 Apache HTTPD、PostgreSQL、NTPD、Docker 等 — — 否则访问权限绝对最小。这样对系统其余部分的风险就最小。
具体来说,我认为这是一种安全的方法:
- 应该有一个专门用于 Web 服务器的用户和组。Web 服务器应该以该用户的身份运行。我相信这通常是“www”,所以我们暂时就用这个。
- 创建新用户,例如“deployer”或“www”组中的其他用户。
- 使其成为所有文件的所有者:
chown -R deployer:www /var/www
。 - 限制组访问读取和遍历目录:
chmod -R g=rX /var/www
。 - 确保只有部署者至少可以访问 .git 目录:
chmod -R go= /var/www/.git
。添加任何其他不应通过 Web 提供的文件。