上下文:我正在為特定的儲存庫建立一個 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
~/repositories
nginx
uwsgi