필요한 사람의 액세스를 제한하지 않고 Ubuntu/Apache의 www 디렉토리를 보호하시겠습니까?

필요한 사람의 액세스를 제한하지 않고 Ubuntu/Apache의 www 디렉토리를 보호하시겠습니까?

Apache2/Ubuntu 웹 서버를 설정하고 있는데 필요한 보안 설정을 구현하는 방법을 모르겠습니다.

www 폴더 - 네트워크 루트 디렉터리 - 광산www-데이터그룹(apache 및 PHP 계정)에는 Apache에서 실행되는 스크립트가 명시적인 허가 없이 파일을 수정하거나 삭제하지 못하도록 제한된 권한이 있어야 합니다. 그러나 WinSCP를 사용하여 연결하거나 www 폴더로 파일을 전송하는 것과 유사한 사용자는 파일을 웹 루트에 복사하고 오래된 파일을 삭제하는 등의 작업을 수행할 수 있도록 전체 권한이 필요합니다.

이상적으로는 웹 서버 작업에 대한 제한된 권한이 있는 www-data 그룹과 www 폴더에 대한 전체 권한이 있는 웹 프로젝트 작업을 수행하는 모든 사람을 포함하는 "webdevelopers"라는 그룹이 필요할 것 같습니다.

정기적으로 웹 서버를 설정하는 사람이 개발자가 필요에 따라 파일을 추가하고 제거할 수 있도록 허용하면서 웹 루트를 적절하게 보호하는 방법을 말해 줄 수 있습니까?

답변1

Apache와 PHP 스크립트는 동일한 사용자로 실행되어야 합니다.

여러분이 가질 수 있는 한 가지 아이디어(garethTheRed의 아이디어)는 개발자를 포함하는 그룹을 만들고 www-devs소유권을 로 변경 /www-data하고 apache:www-devs모드를 로 설정하는 것입니다 0570.
이렇게 하면 웹 서버가 디렉토리에서 읽을 수는 있지만 쓸 수는 없게 됩니다. 그룹 구성원이 www-devs글을 쓸 수 있습니다. 그러나 여기에는 개발자가 추가한 새 파일이 개발자의 소유가 된다는 큰 문제가 있습니다. Apache는 이러한 파일의 소유자도 아니고 해당 파일을 소유하는 그룹도 아닙니다. 따라서 아파치는 이를 읽을 수 없습니다.

가장 좋은 해결책은 파일 시스템 ACL을 사용하는 것입니다. ACL을 사용하여 서로 다른 권한을 가진 여러 그룹을 추가할 수 있습니다. 이러한 권한을 상속하도록 새 파일을 설정할 수도 있습니다.

groupadd www-devs
setfacl -R -d -m g:www-devs:rwX -m g:www:r-X /www-data
setfacl -R -m g:www-devs:rwX -m g:www:r-X /www-data

첫 번째 setfacl줄은 생성된 모든 새 파일에 대한 기본 권한을 설정합니다. 두 번째 setfacl줄은 기존 파일에 대한 권한을 설정합니다.

권한은 다음과 같이 표시됩니다.

$ getfacl --all-effective /www-data 
getfacl: Removing leading '/' from absolute path names
# file: www-data
# owner: apache
# group: www
user::r-x
group::r-x          #effective:r-x
group:www:r-x           #effective:r-x
group:www-devs:rwx      #effective:rwx
mask::rwx
other::---
default:user::rwx
default:group::rwx      #effective:rwx
default:group:www:r-x       #effective:r-x
default:group:www-devs:rwx  #effective:rwx
default:mask::rwx
default:other::rwx

이는 www그룹에 읽기 및 실행 권한만 있지만 www-dev읽기, 쓰기 및 실행 권한이 있음을 나타냅니다.

파일을 만들어 보겠습니다.

$ touch /www-data/foo
$ getfacl --all-effective /www-data/foo
getfacl: Removing leading '/' from absolute path names
# file: www-data/foo
# owner: root
# group: root
user::rw-
group::rwx          #effective:rw-
group:www:r-x           #effective:r--
group:www-devs:rwx      #effective:rw-
mask::rw-
other::rw-

이는 방금 생성된 파일에는 www읽기 권한만 있고 www-devs읽기 및 쓰기 권한이 있음을 나타냅니다. 이 명령은 루트로 실행 하므로 touch실제로 파일을 소유하는 사람은 루트입니다. 그러나 ACL 때문에 그룹이 파일에 수행할 수 있는 www작업 에는 영향을 미치지 않습니다.www-data

관련 정보