允许用户通过 ssh 访问 /var/www/

允许用户通过 ssh 访问 /var/www/

上下文:我正在为特定的存储库创建一个 gitolite3 挂钩,其中包含我网站的一些逻辑和 css foo。

所以本质上发生的是

下面的内容/var/www/nginx/看起来像:

drwxrwxr-x. nginx   git   system_u:object_r:httpd_sys_content_t:s0 foo

.git很特别:

drwxrwxr-x. git     git   system_u:object_r:httpd_sys_content_t:s0 .git

为了确保所有子目录都具有正确的访问权限,我使用了:

chown nginx:git -Rf ./webfoo
chmod g+rw -Rf ./webfoo
chown git:git -Rf ./webfoo/.git

[这只是奖励,你可以跳过这个。]

gitolite3 钩子

#!/bin/bash
cd /var/www/nginx/webfoo || exit
unset GIT_DIR
echo "where: $(pwd)"
git pull -f origin deploy-me-branch

remote: where: /var/www/nginx/webfoo
remote: From /home/gitolite/repositories/webfoo
remote:    c092ee2..07274a6  master     -> origin/master
remote: error: unable to unlink old '.gitignore' (Permission denied)
remote: error: unable to unlink old 'templates/fancypost.html' (Permission denied)
remote: error: unable to unlink old 'templates/layout.html' (Permission denied)

/var/log/audit/audit.log不包含任何访问拒绝。


更新:即使本地登录也git不起作用。所以这可能是与 SELinux/文件安全上下文无关


为什么这不能像我预期的那样工作?

答案1

它不起作用的几个原因:

  • 用户 git应该是成员团体 git
  • 不要以不同的用户身份拉取/重新设置基准,这.git/*可能会改变所有权,尤其是在以其他用户身份登录时root

一个更优雅的解决方案是使用(作为用户)monit监视存储库,这样我也可以重新启动以及可执行的 webapp/文件是否发生更改。git~/repositoriesnginxuwsgi

相关内容