서버 설정 · 2 min read · Dec 26, 2025
Debian Squeeze에서 mod_chroot로 Apache2 Chroot 설정하기
Debian Squeeze에서 mod_chroot로 Apache2 Chroot 설정하기
버전 1.0
저자: Falko Timme
Twitter에서 저를 팔로우하세요
이 가이드는 Debian Squeeze 시스템에서 Apache2와 함께 mod_chroot를 설정하는 방법을 설명합니다. mod_chroot를 사용하면 Apache2를 안전한 chroot 환경에서 실행할 수 있으며, Apache2 또는 설치된 웹 애플리케이션의 취약점을 악용하려는 침입 시도로부터 서버를 덜 취약하게 만들 수 있습니다.
이것이 여러분에게 작동할 것이라는 보장을 하지 않습니다!
1 사전 노트
저는 여러분이 작동 중인 Debian Squeeze 시스템과 작동하는 Apache2를 가지고 있다고 가정합니다. 예를 들어, 이 튜토리얼에서 보여준 것처럼: Debian Squeeze에서 PHP5 및 MySQL 지원과 함께 Apache2 설치하기 (LAMP). 또한 /var/www 디렉토리 내에 하나 이상의 웹 사이트가 설정되어 있다고 가정합니다 (예: ISPConfig를 사용하는 경우).
2 mod_chroot 설치하기
mod_chroot를 설치하려면, 간단히 다음 명령을 실행합니다:
apt-get install libapache2-mod-chroot그런 다음 mod_chroot를 활성화하고 Apache를 재시작합니다:
a2enmod mod_chroot
/etc/init.d/apache2 restart3 Apache 구성하기
저는 /var/www 디렉토리를 chroot 감옥이 포함된 디렉토리로 사용하고 싶습니다. Debian의 Apache는 PID 파일 /var/run/apache2.pid를 사용합니다. Apache가 /var/www로 chroot되면, /var/run/apache2.pid는 /var/www/var/run/apache2.pid로 변환됩니다. 따라서 지금 그 디렉토리를 생성합니다:
mkdir -p /var/www/var/run
chown -R root:root /var/www/var/run이제 Apache에 /var/www를 chroot 디렉토리로 사용하고 싶다고 알려야 합니다. /etc/apache2/apache2.conf를 열고 PidFile 줄 바로 아래에 ChrootDir 줄을 추가합니다:
vi /etc/apache2/apache2.conf| [...] # # PidFile: 서버가 시작할 때 프로세스 식별 번호를 기록해야 하는 파일입니다. # 이는 /etc/apache2/envvars에 설정해야 합니다. # PidFile ${APACHE_PID_FILE} ChrootDir /var/www [...] |
다음으로, 문서 루트가 변경되었다고 vhosts에 알려야 합니다 (예: DocumentRoot /var/www는 이제 DocumentRoot /로 변환됩니다). 각 vhost의 DocumentRoot 지시어를 변경하거나, 더 쉽게 파일 시스템에 심볼릭 링크를 생성하여 이를 수행할 수 있습니다.
3.1 첫 번째 방법: DocumentRoot 변경하기
DocumentRoot가 /var/www인 vhost가 있다고 가정해 보겠습니다. 이제 해당 vhost의 vhost 구성 파일을 열고 DocumentRoot /var/www를 DocumentRoot /로 변경해야 합니다. 따라서 DocumentRoot /var/www/web1/web는 이제 DocumentRoot /web1/web으로 변환됩니다. 이 방법을 사용하려면 모든 vhost에 대해 DocumentRoot를 변경해야 합니다.
3.2 두 번째 방법: 파일 시스템에 심볼릭 링크 생성하기
이 방법은 더 쉽습니다. 한 번만 수행하면 되고, 어떤 vhost 구성도 수정할 필요가 없습니다. /var/www/var/www에서 /var/www로 가리키는 심볼릭 링크를 생성합니다:
mkdir -p /var/www/var
cd /var/www/var
ln -s ../../ www마지막으로, Apache를 중지하고 /var/run/apache2.pid에서 /var/www/var/run/apache2.pid로 심볼릭 링크를 생성한 후 다시 시작해야 합니다:
/etc/init.d/apache2 stopln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
/etc/init.d/apache2 start그게 전부입니다. 이제 이전과 같이 웹 페이지를 호출할 수 있으며, 정적 HTML 파일이거나 mod_php를 사용하는 한 문제 없이 제공되어야 합니다.

CGI를 사용하는 경우, 예를 들어 Perl, suPHP, Ruby 등, 해석기 (예: /usr/bin/perl, /usr/lib/suphp/suphp 등)와 해석기에 필요한 모든 라이브러리를 chroot 감옥으로 복사해야 합니다. 필요한 라이브러리에 대한 정보는 ldd 명령을 사용하여 확인할 수 있습니다. 예:
ldd /usr/lib/suphp/suphproot@server1:~# ldd /usr/lib/suphp/suphp
linux-vdso.so.1 => (0x00007f3fdcc6e000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f3fdc953000)
libm.so.6 => /lib/libm.so.6 (0x00007f3fdc6d1000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f3fdc4ba000)
libc.so.6 => /lib/libc.so.6 (0x00007f3fdc158000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3fdcc6f000)
root@server1:~#필요한 모든 파일을 복사했지만 페이지가 여전히 작동하지 않는 경우, Apache 오류 로그를 확인해야 합니다. 일반적으로 문제의 위치를 알려줍니다. 또한 http://core.segfault.pl/~hobbit/mod_chroot/caveats.html에서 알려진 문제와 해결책을 읽어보세요.
4 링크
- mod_chroot: http://core.segfault.pl/~hobbit/mod_chroot/
- Apache: http://httpd.apache.org/
- Debian: http://www.debian.org/
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.