나머지 시스템에서 Apache 가상 호스트 분리


11

Apache VirtualHosts와 같은 다양한 웹 사이트를 호스팅하는 웹 서버를 설정하고 있습니다. 이들 각각은 스크립트 (주로 PHP, possiblu 기타)를 실행할 수 있습니다.

내 질문은 이러한 VirtualHost를 서로 및 시스템의 나머지 부분에서 어떻게 분리합니까? 예를 들어 웹 사이트 X가 웹 사이트 Y의 구성이나 서버의 "비공개"파일을 읽는 것을 원하지 않습니다.

현재 여기에 설명 된 것처럼 FastCGI, PHP 및 SUExec으로 VirtualHosts를 설정했습니다 ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html ), SUExec은 사용자가 자신이 아닌 다른 파일을 편집 / 실행하는 것을 방지합니다. 사용자는 여전히 구성 파일과 같은 민감한 정보를 읽을 수 있습니다.

서버의 모든 파일에 대한 UNIX 전역 읽기 권한을 제거하는 것이 위의 문제를 해결하기 때문에 생각했지만 서버 기능을 방해하지 않고 안전하게 할 수 있는지 확실하지 않습니다.

또한 chroot를 사용하는 것을 살펴 보았지만 이것은 가상 호스트별로가 아니라 서버별로 만 수행 할 수있는 것으로 보입니다.

VirtualHost를 시스템의 나머지 부분과 격리시키는 제안을 찾고 있습니다.

추신 : 나는 우분투 12.04 서버를 실행

내 대답 : 나는 현재 구성을 거의 따르지 만 모든 가상 호스트에 대해 chroot jail을 수행했습니다. 예를 들어 chroot jail을 /var/www넣은 다음 그룹 / 기타 r / w / x 권한을 가진 하위 폴더에 모든 사용자 데이터를 갖습니다. 비활성화 됨. 이 옵션은 특히 소스 코드를 수정하지 않고도 가능하기 때문에 바람직했습니다.

@Chris의 답변을 철저히 작성했으며 FTP 및 SELinux로 간주했기 때문에 답변을 선택했습니다.

답변:


4

Apache에서 mod_users 모듈을 활성화하면됩니다.

아파치 구성에서 UserDir을 설정해야합니다. 별도의 구성 파일 에서이 작업을 수행하고 포함시키는 것이 좋습니다. 포함 포함

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

전체 자습서를 제공 할 수 있지만 Apache 구성을 시작 하십시오 . http://www.techytalk.info/enable-userdir-apache-module-ubuntu-debian-based-linux-distributions/

힌트 만약 당신이 SELinux를 실행하고 있다면 아파치에게 사용자 홈에 대한 읽기 권한을 부여해야한다. 다음을 설정하여이 작업을 수행 할 수 있습니다.

sudo setsebool -P httpd_enable_homedirs=On

또한 사용자 dirs public_html 디렉토리에 대한 파일 권한과 상위 디렉토리에 대한 rx 권한을 루트까지 필요로합니다.

분명히 사용자를 위해 chroot를 설정해야합니다 (예 : vsftpd). 설치:

apt-get vsftpd

chroot를 구성하려면 vi 또는 nano를 사용하여 /etc/vsftpd/vsftpd.conf를 엽니 다. chroot_local_user = yes 찾기 및 주석 해제 또는 추가

FTP를 통해 권장하는 sftp와 동일한 동작을 얻을 수 있으며 / etc / ssh / sshd_config를 열고 Match 블록과이 행을 추가하십시오.

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

이것은 web_users 그룹의 모든 사용자 chroot합니다 . 또한 쉘을 / sbin / nologin으로 설정하여 쉘에 대한 액세스를 거부해야합니다.

useradd -G "web_users" -s /sbin/nologin new_user

이것이 공개 프로덕션 서버라면 OS, OpenSSH, Apache, PHP, vsftpd에 강화를 적용하고 엄격한 iptable 및 TCP 래퍼를 적용하는 것이 좋습니다. SELinux도 그대로 두는 것이 좋습니다.


3
mod_userdir별도 도메인의 가상 호스팅을 제공 하는 방법을 모르겠습니다 . 또한 Apache의 사용자 디렉토리간에 아무것도 찾을 수 없으므로 격리 측면에서 보안에 대한 우려가 있습니다. 그 기능을 제공하지 않는 것 같습니다.
gertvdijk

6

내가 봐 가지고하는 것이 좋습니다 suphp또는 PHP-FPM을 .

기본적으로 PHP 인터프리터는 해당 VirtualHost에 대해 구성된 특정 사용자에게 'su'할 수 있습니다. 그러면 일반 파일 시스템 권한을 사용하여 모든 단일 VirtualHost를 분리 할 수 ​​있습니다.

성능 고려 사항으로 FPM을 권장합니다. 홈페이지에서 이것은 당신에게 가장 관심있는 것입니다 :

또한 풀당 사용자 및 그룹 옵션도 중요합니다.이 옵션을 사용하면 지정된 uid 및 gid에서 특정 fpm 풀을 실행할 수 있습니다. 안녕 suphp!


4

1
이 링크를 보았지만 가상 호스트별로 chroot 할 수없는 것 같습니다. 어쩌면 나는 chroot에 전역 www 디렉토리를 정의해야하며 /var/www모든 호스트가 거기에 하위 디렉토리에 있어야합니다. 이러한 각 하위 디렉토리는 전역 실행 / 읽기 권한을 제거 했습니까?
JesperB

내 요점은 chroot이며 가상 서버별로 할 수 있습니다. 다음은 예입니다. 이 경우에는를 사용하고 mod_chroot있습니다.
tacotuesday
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.