내 웹사이트는 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 디렉터리에 대상 디렉터리를 생성할 수 있는 권한이 없기 때문에 자연스럽게 실패합니다. 제가 생각할 수 있는 한 가지 해결책은 django 사용자를 :www-data 그룹에 추가하는 것입니다. 이것이 보안에 어떤 영향을 미치나요? 또한 django를 /var 및 /var/www의 소유자로 설정할 수도 있습니다. 그러나 이는 django 사용자에게 너무 많은 권한일 수 있습니다.
편집: django 사용자를 www-data 그룹에 추가하면 새 git repo 파일이 /var/www 디렉터리에 올바르게 복사되고 웹 사이트가 제대로 작동합니다. 이것이 보안 문제를 일으키는지는 모르겠습니다.
어떻게 해야 합니까? 감사해요