私のウェブサイトは、Gunicorn / nginxがインストールされているリモートサーバーで実行されています。 nginxは/var/wwwディレクトリで実行され、所有者はroot:www-dataです。
drwxrwxr-x 5 root www-data 4096 Apr 8 17:32 www
また、以下のように/var/gitrepoにデフォルトのgitリポジトリがあります。
drwxrwxr-x 7 django django 4096 Apr 8 23:20 gitrepo
djangoユーザーはsudoグループのメンバーですが、www-dataグループではありません。サーバーの他のユーザーにはログインシェルはありません。
次に、以下のように/var/gitrepo/hooks/post-receiveにポスト受信gitフックがあります。
#!/bin/sh
git --work-tree=/var/www --git-dir=/var/gitrepo checkout -f
アイデアは、git push ssh://django@<site_IP>:/var/gitrepo master
私のラップトップで実行すると、リポジトリがgitrepoディレクトリにプッシュされ、次に/ var / wwwが受信後にフックを介して更新されたファイルを受信することです。
上記のpost-receive
フックは、djangoユーザーに/ var / wwwディレクトリにターゲットディレクトリを作成する権限がないため、自然に失敗します。私が考えることができる1つの解決策は、djangoユーザーを:www-dataグループに追加することです。これはセキュリティにどのような影響を与えますか?また、djangoを/varおよび/var/wwwの所有者として設定することもできます。しかし、これはdjangoユーザーにはあまりにも多くの権限である可能性があります。
編集:djangoユーザーをwww-dataグループに追加すると、新しいgit repoファイルが/ var / wwwディレクトリに正しくコピーされ、Webサイトが正しく機能します。これがセキュリティ問題を引き起こすかどうかはわかりません。
どうすればいいですか?ありがとう