- 저는 rsync를 사용하여 nginx에서 제공할 일부 정적 HTML을 배포하고 있습니다.
- rysnc를 실행하는 사용자는 "jenkins"입니다.
- nginx는 www-data 그룹을 사용하여 이 폴더에 액세스합니다.
- Jenkins는 www-data의 회원입니다.
ssh
문제의 Ubuntu 14.04 서버에 들어가서 실행했습니다 .
sudo chown -R jenkins:www-data /home/jenkins/thesite
그런 다음 다른 컴퓨터에서 실행하십시오.
rsync -rtzh --delete --omit-dir-times _site/ jenkins@the_server.com:/home/jenkins/thesite
완료되면 일부(전부는 아님) 파일 그룹이 이제 젠킨스로 설정됩니다. 따라서 nginx
액세스할 수 없습니다.
제가 변경한 파일에만 권한 문제가 있는 것이 아니라 Jekyll을 사용하여 파일을 생성하고 있는데, 이는 영향을 미칠 수도 있고 단지 큰 문제가 될 수도 있습니다.
Windows 세계에서는 상위 폴더에 대한 권한을 설정하고 하위 폴더가 상속되도록 지시합니다. Linux에도 비슷한 것이 있나요? 아니면 내가 뭔가 멍청한 짓을 하고 있는 걸까 rsync
?
답변1
이에 대해 최소한 몇 가지 방법이 있습니다. 하지만 먼저 Linux/Unix의 권한 세계가 Windows 세계와 어떻게 대응되는지 설명하겠습니다.
Windows에는 상속 가능한 권한이 있지만 Linux 시스템은 전통적으로 그렇지 않습니다(그러나 ACL을 사용할 수 있으므로 지금은 무시하겠습니다). Linux 권한은 소유자, 그룹 및 기타("기타")의 세 부분으로 나뉩니다. 각각 읽기, 쓰기, 실행(파일)/검색(폴더)이 가능합니다. 파일의 소유자는 파일 작성자입니다. 소유자는 자신이 속한 그룹을 그룹으로 설정할 수 있습니다.
rsync를 사용하면 다음을 시도하고 달성해야 합니다.
- 소유자는 Jenkins입니다. (이건 변경할 수 없을 것 같습니다.)
- 그룹은 www-data입니다(따라서 nginx가 파일을 읽을 수 있는지 확인할 수 있습니다).
- 파일 대상의 권한은 사용자:읽기+쓰기, 그룹:읽기, 기타:읽기이고, 폴더에 대한 권한은 사용자:읽기+쓰기+검색("실행"), 그룹:읽기+검색, 기타:읽기+검색입니다. 원하는 경우 다른 권한을 제거할 수 있습니다.
다음과 같이 파일을 복구할 수 있으므로 기존 파일이 적합하다고 가정합니다.
chown -R jenkins:www-data /home/jenkins/thesite
chmod -R u+rw,g=u,g+s,o=u /home/jenkins/thesite
이제 rsync 명령의 경우 Windows 파일 권한을 무시하고 자체 기준을 적용해야 합니다.
rsync -rptzh --delete --omit-dir-times --chmod=u+rw,go=rX,Dg+s _site/ jenkins@the_server.com:/home/jenkins/thesite
rsync의 플래그는 chmod
다음과 같습니다:
u=rw
- 소유자("사용자")에게는 (적어도) 읽기 및 쓰기 권한이 있습니다.go-rX
- 그룹 및 기타("기타")의 쓰기 권한이 제거됩니다.Dg+s
- 그룹 이름이 트리 루트에서 상속되도록 폴더("디렉토리")에 group-setgid 비트를 추가했습니다.