디렉토리에 쓰려는 웹 서버에 대한 올바른 솔루션은 무엇입니까?

디렉토리에 쓰려는 웹 서버에 대한 올바른 솔루션은 무엇입니까?

그래서 "배포" 사용자가 있는 상자가 있습니다. 배포 사용자는 코드 저장소를 소유하고 WordPress가 해당 시스템에서 실행되고 있습니다.

WordPress가 플러그인 업로드와 같은 작업을 시도할 때 사용자 "www-data"를 사용하여 "wp-content/plugins"에 쓰고 있습니다. 분명히 zip 파일을 업로드하고 압축을 푼 다음 zip 파일을 삭제하는 것 같습니다.

WordPress에서 이러한 작업을 수행할 수 없는 문제가 발생했습니다. 내 전체 코드 저장소가 소유자 및 그룹: "deploy:deploy"로 설정되어 있으므로 www-data가 해당 저장소에 액세스할 수 없는 것 같습니다.

그래서 나의 첫 번째 시도는 배포 그룹에 www-data를 추가하는 것이었습니다.

usermod -a -G deploy www-data

이 명령을 실행한 직후 나는 더 이상 상자에 SSH로 접속할 수 없다는 것을 발견했습니다. 나는 왜 그런지 완전히 혼란스러워요. 누구든지 나에게 이것을 말해 줄 수 있습니까? 그래서 나는 결국 다음을 수행했습니다.

chmod -R go-w ~

그런 다음 다시 ssh를 할 수 있습니다... "groups www-data"를 실행하면 옵션 중 하나로 배포가 표시되므로 만세라고 생각했습니다... wp-content와 플러그인 디렉터리 모두 그룹에 대한 쓰기 권한이 있는지 확인하러 갔습니다. 그랬어요. .....호리를 두 배로 늘리면 완벽하게 작동할 거예요!

하지만 아니요... 플러그인 업로드 시도가 실패했습니다.

약간의 소란 끝에 아파치 구성으로 가서 APACHE_RUN_USER & GROUP을 "배포"로 변경했습니다.

문제가 해결되었습니다... 일종의. Apache를 주 사용자로 운영한다는 생각 외에는 정말 끔찍하다고 생각합니다.

어쨌든 이렇게 변경한 후 플러그인 업로드가 성공하고 다음과 같은 내용이 표시됩니다.

drwxr-xr-x 8 deploy deploy 4096 Oct 22 21:28 wp-crm

따라서 그룹에는 쓰기 액세스 권한이 없습니다. 이것이 왜 실패하는지에 대한 힌트가 될 수 있다고 생각했습니다... 하지만 배포를 사용하여 작성되었다는 사실은 실제로 힌트가 아니라는 것을 의미합니다... 왜냐하면 이것은 단지 다음과 같은 이유 때문일 뿐입니다. 배포된 umask가 어떻게 설정되어 있는지..제 생각에는...

그래서...해결책이 뭔지 모르겠어요...

내 wp-content 그룹을 www-data로 변경해야 합니까?

아니면 여기서 다른 것을 놓치고 있습니까?

답변1

가장 간단한 솔루션은 파일 시스템 ACL입니다. 나는 그 설정에 동의하는지 잘 모르겠습니다(디렉토리가 정적이 아니고 임시 데이터를 저장하기 위해 다른 디렉토리를 사용하지 않기 때문에). 그러나 그것은 또 다른 이야기입니다.

www-data파일 시스템 ACL을 사용하면 일반 권한으로 허용되지 않는 경우에도 사용자에게 특정 디렉터리에 대한 액세스 권한을 부여할 수 있습니다 .

예를 들어

setfacl -R -m user:www-data:rwx wp-content/plugins
setfacl -d -R -m user:www-data:rwx wp-content/plugins

첫 번째 명령은 www-data읽기+쓰기+실행 권한 wp-content/plugins과 그에 포함된 모든 권한을 (재귀적으로) 부여합니다. 두 번째 명령은 에서 생성된 모든 새 파일과 폴더가 wp-content/plugins지정된 ACL을 갖도록(따라서 읽기+쓰기+실행이 가능하도록 www-data) 기본 권한을 설정합니다 .

답변2

안타깝게도usermod -G 바꾸다사용자 그룹. 당신이 원하는 usermod -G -a.

관련 정보