다음이 포함된 Gentoo 3.2.12 서버에서 apache2+php
:
/www
/website1
/website2
...etc
사용자는 apache
모든 사이트에 대해 읽기 전용 액세스 권한을 가져야 합니다. 또한 각 웹사이트에는 apache
읽기 및 쓰기 액세스 권한이 있어야 하는 일부 폴더(업로드 폴더 등)가 있습니다 .
이 사이트에는 여러 사람이 일하고 있습니다. 모든 사람이 자신의 작업 사이트에 대한 읽기 및 쓰기 액세스 권한을 가져야 하지만 다른 사람은 그렇지 않습니다. 또한 특정 폴더에 쓸 수 있도록(사이트 내에서) 권한을 설정할 수 있어야 합니다 apache
(새 업로드 폴더 등을 만드는 경우).
/www
다른 사용자는 전혀 액세스할 수 없어야 합니다.
이것이 가능합니까? 어떻게 하나요?
(PS. 그리고... 이 사람들은 PHP 스크립트를 업로드한 다음 Apache 컨텍스트에서 실행할 수 있기 때문에 다른 웹 사이트에도 간접적으로 액세스할 수 있을 것 같습니다... 이것도 보장되는 걸까요? 근데 모직물 아는 사람......)
답변1
한 가지 방법은 다음과 같습니다.
- 각 사이트에는 해당 그룹의 사람들을 위한 그룹이 있으므로
umask 0002
그들이 만든 파일은 기본적으로 해당 그룹에서 읽고 쓸 수 있고 다른 사람들도 읽을 수 있습니다. chmod a-rwx
허용된 그룹 외부의 사람들의 접근을 방지하기 위한 각 사이트의 루트 디렉터리입니다.setfacl -m user:apache:rx
사용자에게 다른 권한 외에도 읽기 액세스 권한을 부여하려면 파일 시스템 및 이 디렉터리에 대해 ACL을 활성화합니다.apache
Apache 프로세스에서 생성된 파일은 다음과 같습니다.
- 관련 그룹은 누구나 읽을 수 있도록 생성된 경우에 한해 Apache 사용자가 생성한 파일을 읽을 수 있어야 합니다.
- 그룹 쓰기 가능한 디렉터리에 있는 파일은 삭제할 수 있습니다.
- 충분하지 않은 경우 사용자가
sudo
Apache 사용자를 사용하도록 허용할 수 있습니다. ACL을 사용하여 그룹 쓰기 권한을 추가하는 등의 특정 명령을 수행하기 위한 것일 수도 있습니다.
하지만 말씀하신 대로 사용자가 Apache 사용자로서 임의의 스크립트를 실행할 수 있다면 모든 읽기 제한을 우회할 수 있습니다. 이 문제를 해결하려면 해당 그룹의 특정 사용자로 사이트의 스크립트를 실행해 보세요. 나는 이것을 설정하는 방법이 있다고 믿습니다 mod_fcgid
. 그렇지 않으면 당신에게 도움이 apache[suexec]
될 수도 있습니다 .php[cgi]
더 나은 격리를 위해서는 여러 개의 Apache 프로세스가 있어야 하고, 다른 사용자로 실행되어야 하며, 다른 디렉터리로 chroot할 수도 있습니다. 또는 다른 OpenVZ 장치, 다른 Xen domU 또는 다른 하드웨어에 있습니다. 보시다시피 다양한 격리 수준이 있으며 각 수준은 이전 수준보다 더 나은 격리를 제공하지만 더 많은 리소스가 필요합니다.
답변2
일반적인 해결책은슈퍼 PHP.