서버 설정 · 2 min read · Dec 30, 2025

OpenSUSE 12.2에서 mod_chroot로 Apache2 Chroot 설정하기

OpenSUSE 12.2에서 mod_chroot로 Apache2 Chroot 설정하기

버전 1.0
저자: Falko Timme
Twitter에서 나를 팔로우하세요

이 가이드는 OpenSUSE 12.2 시스템에서 Apache2와 함께 mod_chroot를 설정하는 방법을 설명합니다. mod_chroot를 사용하면 Apache2를 안전한 chroot 환경에서 실행할 수 있으며, Apache2 또는 설치된 웹 애플리케이션의 취약점을 악용하려는 침입 시도로부터 서버를 덜 취약하게 만들 수 있습니다.

이 방법이 여러분에게 효과가 있을 것이라는 보장은 하지 않습니다!

1 사전 참고

OpenSUSE 12.2 시스템에서 작동하는 Apache2가 실행되고 있다고 가정합니다. 또한 /srv/www 디렉토리 내에 하나 이상의 웹 사이트가 설정되어 있다고 가정합니다(예: ISPConfig를 사용하는 경우).

2 mod_chroot 설치하기

OpenSUSE 12.2에 대한 mod_chroot 패키지가 없으므로, 우리는 직접 빌드해야 합니다. 먼저 필수 패키지를 설치합니다:

zypper install libgcc glibc-devel gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim apache2-devel

이제 mod_chroot를 다음과 같이 빌드합니다:

cd /tmp  
wget http://core.segfault.pl/~hobbit/mod_chroot/dist/mod_chroot-0.5.tar.gz  
tar xvfz mod_chroot-0.5.tar.gz  
cd mod_chroot-0.5  
apxs2 -cia mod_chroot.c

그런 다음 Apache를 재시작합니다:

systemctl restart apache2.service

3 Apache 구성하기

나는 /srv/www 디렉토리를 chroot 감옥이 포함된 디렉토리로 사용하고 싶습니다. OpenSUSE의 Apache는 PID 파일 /var/run/httpd2.pid를 사용합니다. Apache가 /srv/www로 chroot되면 /var/run/httpd2.pid는 /srv/www/var/run/httpd2.pid로 변환됩니다. 따라서 지금 그 디렉토리를 생성합니다:

mkdir -p /srv/www/var/run  
chown -R root:www /srv/www/var/run

이제 Apache에 /srv/www를 chroot 디렉토리로 사용하고 싶다고 알려야 합니다. /etc/apache2/httpd.conf를 열고, Include /etc/apache2/sysconfig.d/loadmodule.conf 줄 바로 아래에 ChrootDir /srv/www; 줄을 추가하고, 구문에서 Options None 줄을 주석 처리하고 Options +FollowSymLinks 줄을 추가합니다:

vi /etc/apache2/httpd.conf

| [...] # /etc/sysconfig/apache2의 APACHE_MODULES에서 생성됨 Include /etc/apache2/sysconfig.d/loadmodule.conf ChrootDir /srv/www [...] # 기본적으로 전체 파일 시스템에 대한 접근 금지 #Options None Options +FollowSymLinks AllowOverride None Order deny,allow Deny from all [...] |

다음으로, 우리의 vhosts에 문서 루트가 변경되었음을 알려야 합니다(예: DocumentRoot /srv/www는 이제 DocumentRoot /로 변환됩니다). 우리는 각 vhost의 DocumentRoot 지시어를 변경하거나, 더 쉽게 파일 시스템에 심볼릭 링크를 생성하여 이를 수행할 수 있습니다.


3.1 첫 번째 방법: DocumentRoot 변경하기

DocumentRoot가 /srv/www인 vhost가 있다고 가정해 보겠습니다. 이제 해당 vhost의 vhost 구성을 열고 DocumentRoot /srv/www를 DocumentRoot /로 변경해야 합니다. 따라서 DocumentRoot /srv/www/web1/web는 이제 DocumentRoot /web1/web으로 변환됩니다. 이 방법을 사용하려면 모든 vhost에 대해 DocumentRoot를 변경해야 합니다.

3.2 두 번째 방법: 파일 시스템에 심볼릭 링크 생성하기

이 방법은 더 쉽습니다. 왜냐하면 한 번만 수행하면 되고, 어떤 vhost 구성도 수정할 필요가 없기 때문입니다. 우리는 /srv/www/srv/www에서 /srv/www로 가리키는 심볼릭 링크를 생성합니다:

mkdir -p /srv/www/srv  
cd /srv/www/srv  
ln -s ../ www

마지막으로, Apache를 중지하고, /var/run/httpd2.pid에서 /srv/www/var/run/httpd2.pid로 심볼릭 링크를 생성한 후 다시 시작해야 합니다:

systemctl stop apache2.service
ln -sf /srv/www/var/run/httpd2.pid /var/run/httpd2.pid  
systemctl start apache2.service

그게 전부입니다. 이제 이전과 같이 웹 페이지를 호출할 수 있으며, 정적 HTML 파일이거나 mod_php를 사용하는 한 문제 없이 제공되어야 합니다.

CGI를 사용하는 경우(예: Perl, suPHP, Ruby 등) 해석기를 chroot 감옥으로 복사해야 하며, 해석기에 필요한 모든 라이브러리도 함께 복사해야 합니다. 필요한 라이브러리는 ldd 명령어로 확인할 수 있습니다. 예:

ldd /usr/sbin/suphp
server2:/var/www/web1/log# ldd /usr/sbin/suphp  
        linux-gate.so.1 =>  (0xffffe000)  
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e34000)  
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7e0f000)  
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e03000)  
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7cd2000)  
        /lib/ld-linux.so.2 (0xb7f23000)  
server2:/var/www/web1/log#

필요한 모든 파일을 복사했지만 페이지가 여전히 작동하지 않으면 Apache 오류 로그를 확인해야 합니다. 일반적으로 문제의 위치를 알려줍니다. 또한 http://core.segfault.pl/~hobbit/mod_chroot/caveats.html에서 알려진 문제 및 해결책을 읽어보세요.

4 링크

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.