~/public_html
내 웹 사이트의 루트 디렉터리(내 웹 사이트에서 제공하는 파일이 있는 위치)에 대한 권한을 설정하는 방법은 다음과 같습니다.
sudo chgrp -R www-data ~/public_html
chmod g+s ~/public_html
chmod g+rwx ~/public_html
setfacl -m d:g:www-data:rwx ~/public_html
- 명령 #1"www-data" 그룹에 소유권 액세스 권한을 부여합니다
~/public_html
. - #2그룹 내의 모든 새 디렉터리/파일도 "www-data" 그룹에서 소유하도록 그룹 ID를 설정합니다.
- #삼디렉토리에 있는 "www-data" 그룹의 액세스 권한을 775로 설정하십시오.
- #4이것이 에도 적용되는지 확인하십시오
~/public_html
.
예상대로 훌륭하게 작동합니다. 새로 생성된 모든 디렉터리와 파일은 필수 권한을 상속합니다.
문제는 생성된 디렉토리 에 있었습니다 git clone
(나 이후 ).cd ~/public_html && git clone ....
고쳐 쓰다:목차하다그룹 ID를 상속받습니다(예: "www-data"는 새로 생성된 디렉터리를 소유합니다).하지만액세스 권한(디렉터리의 경우 775, 파일의 경우 664) 또한 이는 git이 생성한 최상위 디렉터리일 뿐입니다. 상속된 권한이 있어야 하는 모든 디렉터리 및 파일. 데비안의 git 패키지에 이것이 없을 수도 있나요?이 오류를 수정하세요하지만?
내가 뭘 잘못했나요? 그 대신 도대체 어떻게 해야 할까요?
답변1
git
파일이 생성된 후 GID 및 ACL을 덮어쓸 수 있습니다( mv
장치 간에 이동할 때의 간단한 작업과 같습니다). strace()를 실행하여 strace -f -o git.strace -e trace=file
이를 확인할 수 있습니다.
답변2
다른 권한이 사용되는 경우 git clone
다음과 같은 경우일 가능성이 높습니다 umask
.
$ umask
0002
이 명령을 실행할 때 생성되는 새 파일은 지정한 권한에 따라 생성됩니다 git clone
. umask
Umask는 어떤 비트를 마스크해야 하는지 나타냅니다. 따라서 위의 예에서 umask를 사용하여 생성한 모든 새 파일에는 0002
다른 쓰기 비트가 꺼집니다.
인용하다
답변3
디렉토리의 확장된 속성을 복제하는 데 git
실패 할 수 있습니다 public_html
.
Linux에서 ACL(및 SELinux 파일 태그)은 파일 시스템 기반 확장 속성을 사용하여 구현됩니다(attr, getfattr 및 setfattr에 대한 매뉴얼 페이지 참조). 확장된 특성을 보존하려면 명시적으로 복사해야 합니다. 대부분의 최신 Linux 배포판에 있는 대부분의 파일 유틸리티(mv, cp, tar, rsync, rm 등)는 확장된 속성(및 확장된 ACL)을 지원하도록 업데이트되었습니다.
strace를 다시 실행하되 해당 -e trace=file
부분을 무시하고 에 파이프한 grep xattr
후 setxattr에 대한 호출이 있는지 확인하세요.
strace -f 2>&1 git clone | grep xattr
출력이 표시되지 않으면 git(또는 최소한 사용 중인 git)이 확장 속성을 지원하지 않는 것입니다.