Контекст: Я создаю хук 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
- не выполняйте pull/rebase как другой пользователь,
.git/*
это может привести к смене владельца, особенно если вы вошли в систему какroot
Более элегантным решением является использование monit
мониторинга репозитория под (как пользователь git
) ~/repositories
, чтобы я мог также перезапустить его nginx
, uwsgi
если исполняемое веб-приложение/файл изменилось.