기본적인 chroot환경의 기본개념은 대부분 비슷합니다.

apahce 1.x대의 chroot 운영은 이전에 포스팅한 아래링크를 참고하세요.
Apache 의 chroot 운영 및 Jail System

modsecurity 의 chroot 관련 문서링크
SecChrootDir지시자의 설명에도 나와있지만 아주 간단하게 apache 프로세스를 chroot환경으로 운영할수가 있습니다.
별도의 패치나 수정이 필요없고 (modsecurity를 사용한다는 조건하에) httpd.conf에 몇가지 수정만 하면 적용할수 있습니다.

SecChrootDir지시자를 사용하는데 몇가지 제약이 있습니다.
먼저 windows용 modsecurity에는 적용되지 않습니다.

1. DNS lookups do not work.
2. PHP에서 메일을 보낼수 없다.
3. 몇몇 경우 apache의 graceful(reload)가 되지 않는다. (확실히 테스트시에도 graceful 이 동작하지
않더군요. 그래서 항상 restart를 해야합니다.) 


3번을 제외하곤 대부분의 chroot환경에서 받는 제약과 비슷합니다. 따라서 해결방법도 비슷합니다.
library문제, sendmail관련등의 문제 해결역시 이전에 작성한  Apache 의 chroot 운영 및 Jail System 문서의
환경설정 이하 부분을 참고하시면 되겠습니다.


직접 SecChrootDir를 이용 chroot환경에 apache를 운영해본 결과(!?)
SecChrootDir "/web"로 설정시 mount명령의 bind옵션을 이용해 /web/httpd디렉토리 구조를 /web/web/httpd 형태로
mount해 /web/httpd구조를 그대로 사용하게 설정하는것이 여러가지 문제를 피할수 있는 방법으로 생됩니다.

mount --bind /web/httpd/ /web/web/httpd/

설정 예제는 아래와 같습니다. /web/httpd와 /web/web/httpd가 같은 디렉토리 입니다.

ServerRoot "/web/httpd"
SecChrootDir "/web"
DocumentRoot "/web/httpd/htdocs"
<Directory "/web/httpd/htdocs">
Options FollowSymLinks
AllowOverride AuthConfig Limit
Order deny,allow
</Directory>
CustomLog logs/access_log


마지막으로 apache의 실행 스크립트내의 경로 역시 수정해야합니다. apache의 배포처에 따라 실행 스크립트내용은
다를수 있습니다. 다만 httpd의 경로 및 pid파일의 경로등만 주의해서 설정하면 됩니다.
# the path to your PID file
PIDFILE=/web/httpd/logs/httpd.pid
# the path to your httpd binary, including options if necessary
HTTPD="/web/httpd/bin/httpd -k start -DSSL"

+ Recent posts