Какие настройки разрешений требует push-to-deploy? - PullRequest
0 голосов
/ 20 декабря 2018

Название общее, но у меня есть более конкретные вопросы.Я глубоко погружен в кошмар разрешений, пытаясь настроить систему «push-to-deploy» с помощью Git.

С моего локального компьютера я отправляю SSH на сервер (Ubuntu 14.04).У меня сервер настроен как удаленный

git remote add development devuser@development.server:/home/dummyuser/bare/repo.git

. Этот пустой репозиторий находится в домашней папке фиктивного пользователя dummyuser, который мы используем для выполнения задач развертывания.devuser - это моя собственная учетная запись на сервере разработки.

У меня настроен хук post-receive в удаленном репозитории (development.server:/home/dummyuser/bare/repo.git/hooks/post-receive), предназначенный для развертывания файлов через git checkout в каталог веб-сервера.на том же сервере, назовите его webfolder/.Эта папка в настоящее время имеет разрешения

drwxr-xr-x dummyuser www-data webfolder/

, где www-data - группа, связанная с пользователем Apache.

Если у меня есть подключаемый скрипт post-receive, используйте команду

git --work-tree=/var/www/webfolder --git-dir=/home/dummyuser/bare/repo.git checkout -f

Я получаю ошибки, которые он не может записать в webfolder/, что предсказуемо, так как я предполагаю, что скрипт запускается как я (devuser), так как я выполнял толчок через SSH, а devuser не делаетwebfolder/.

не может иметь никаких разрешений. Однако, если я изменю сценарий на dummyuser,

sudo -u dummyuser git --work-tree=/var/www/webfolder --git-dir=/home/dummyuser/bare/repo.git checkout -f

, просто чтобы посмотреть, что произойдет, у меня будет ошибка

warning: unable to access '/home/devuser/.config/git/attributes': Permission denied

Есть пара вещей, которые я не понимаю по этому поводу:

1) Ни /home/devuser/.config/, ни /home/dummyuser/.config/ не существует.Это нормально, но если Git требуется доступ к папке .config/, почему он не жаловался раньше, когда я устанавливал голые репозитории и выполнял хуки как devuser?

2) Теперь, когда япытаясь действовать как dummyuser, почему Git ищет в ~devuser/ папку .config/?Почему это не выглядит в ~dummyuser/?

Я работал над этим крошечным кусочком одной единственной проблемы в сводящем с ума шоу-шоу, которое "использует Git" для появления на четыре часа, и мой мозгнечетко, поэтому, пожалуйста, используйте маленькие слова.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Git ожидает папку .config в домашнем каталоге пользователя.Если $HOME установлен неправильно, например, если он указывает на дом другого пользователя, Git попытается получить доступ к $HOME/.config, не зная, что его на самом деле даже не существует.Однако, поскольку пользователь и, следовательно, Git, не имеют доступа к этому $HOME, вы получите сообщение об ошибке: Permission denied.

. Чтобы проверить это, попробуйте запустить как dummyuser:

[ -d /home/devuser/.config ] && echo '.config exists!'

Вы пытаетесь проверить, существует ли каталог /home/devuser/.config.Однако, поскольку у вас нет необходимых разрешений, вы получаете Permission denied, и вы по-прежнему не знаете, существует ли каталог.

Вместо установки $HOME вручную, вы можете использовать-H или --set-home:

sudo -Hu dummyuser git --work-tree=/var/www/webfolder --git-dir=/home/dummyuser/bare/repo.git checkout -f
0 голосов
/ 20 декабря 2018

Проблема в том, что sudo -u dummyuser не устанавливает переменные окружения, ожидаемые Git.Если я добавлю HOME=/home/dummyuser к хуку post-receive, развертывание будет работать, как и ожидалось.

Если кто-то может предоставить более подробную информацию о том, что происходит, или лучшее решение, напишите его в качестве ответа, и я приму его,Пара замечаний:

  • dummyuser не имеет логина, поэтому использование sudo -iu dummyuser в скрипте post-receive не будет работать
  • После установки HOME=/home/dummyuser вручнуюи успешно выполняя сценарий, я обнаружил, что echo $HOME из терминала возвращает /home/devuser, поэтому нет постоянного изменения в $HOME
  • . После успешного выполнения сценария перехвата, ни ~devuser/, ни ~dummyuser/ни у /root/ нет папки .config/.Итак ... Я до сих пор не знаю, почему Git был одержим этим.
...