Apache mod_ruid2 설치
Apache 는 TCP/IP 접속과 접속이 이루어진 후에 컨텐츠를 처리하는 프로세스의 권한이 다릅니다. TCP/IP 접속관련은 Root 권한으로 동작하고 이후 동작은 아파치의 설정에 따른 권한으로 실행 됩니다.
아파치의 동작 권한은 다음과 같이 설정 합니다.
1 2 3 4 5 6 |
# User/Group: The name (or #number) of the user/group to run httpd as. # It is usually good practice to create a dedicated user and group for # running httpd, as with most system services. # User nobody Group nobody |
위 설정은 아파치의 컨텐츠를 처리하는 프로세스가 nobody:nobody 권한으로 동작하도록 지정한 것입니다.
그런데, 이렇게 하면 버추얼 호스트(VirtualHost) 설정을 할 경우에 보통 각 계정별로 RootDocument 를 설정하는데, 이럴경우 아파치 프로세스는 한가지의 권한으로 동작하고 모든 계정에 접근해야 함으로 각 계정에 액세스 권한을 줘야 합니다. 그래서 주로 다음과 같이 해줘야 합니다.
1 2 3 4 5 |
ls -lh /home/ 합계 0 drwx-----x 2 test test 59 10월 4 23:06 test drwx-----x 2 test1 test1 59 10월 4 23:06 test1 drwx-----x 2 test2 test2 59 10월 4 23:06 test2 |
이러한 아파치 권한과 리눅스 시스템 계정별 권한때문에 공개 CMS 프로그램들(xe, gnuboard, wordpress) 등을 설치할때에 홈디렉토리의 퍼미션을 777 로 하게됩니다. 이럴경우 보안상 큰 문제가 됩니다.
아파치의 컨텐츠 프로세스마다 지정한 시스템 계정의 권한으로 동작하도록 하게 한다면 각 계정별로 퍼미션을 바꿀 필요가 없게 됩니다. 이러한 것을 가능하도록 해주는 모듈이 바로 mod_ruid2 입니다.
이 문서는 Apache mod_ruid2 설치 에 관련된 내용 입니다.
1. 설치 환경
설치 환경은 다음과 같습니다.
- 배포판: CentOS 7
- Apache Version: 2.4.10
- Apache MPM: prefork
2. mod_ruid2 설치.
mod_ruid2 프로젝트 홈페이지에서 다운로드 받고 압축을 해제한 후에 apxs 를 이용해서 다음과 같이 설치 해줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# mod_ruid2 다운로드 wget http://downloads.sourceforge.net/project/mod-ruid/mod_ruid2/mod_ruid2-0.9.8.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmod-ruid%2F&ts=1412085172&use_mirror=cznic # 압축 해제 tar xvjf mod_ruid2-0.9.8.tar.bz2 # 디렉토리 변경 cd mod_ruid2-0.9.8 # 컴파일 설치 /usr/local/apache2.4.10/bin/apxs -a -i -l cap -c mod_ruid2.c /usr/local/apache2.4.10/build/libtool --silent --mode=link gcc -std=gnu99 -Wl,-z,relro,-z,now,-L/usr/lib64 -o mod_ruid2.la -lcap -rpath /usr/local/apache2.4.10/modules -module -avoid-version mod_ruid2.lo /usr/local/apache2.4.10/build/instdso.sh SH_LIBTOOL='/usr/local/apache2.4.10/build/libtool' mod_ruid2.la /usr/local/apache2.4.10/modules /usr/local/apache2.4.10/build/libtool --mode=install install mod_ruid2.la /usr/local/apache2.4.10/modules/ libtool: install: install .libs/mod_ruid2.so /usr/local/apache2.4.10/modules/mod_ruid2.so libtool: install: install .libs/mod_ruid2.lai /usr/local/apache2.4.10/modules/mod_ruid2.la libtool: install: install .libs/mod_ruid2.a /usr/local/apache2.4.10/modules/mod_ruid2.a libtool: install: chmod 644 /usr/local/apache2.4.10/modules/mod_ruid2.a libtool: install: ranlib /usr/local/apache2.4.10/modules/mod_ruid2.a libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/sbin" ldconfig -n /usr/local/apache2.4.10/modules ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/apache2.4.10/modules If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- chmod 755 /usr/local/apache2.4.10/modules/mod_ruid2.so [activating module `ruid2' in /usr/local/apache2.4.10/conf/httpd.conf] |
모듈 파일이 설치되고 httpd.conf 파일에 이 모듈이 자동으로 활성화 됩니다.
3. mod_ruid2 설정
기본적으로 다음과 같이 사용을 하시면 됩니다.
1 2 3 4 5 6 7 8 |
<VirtualHost *:80> ........ ........ <IfModule mod_ruid2.c> RMode config RUidGid test test </IfModule> </VirtualHost> |
4. 그러나, 아직은..
이 모듈은 프로세스의 소유권 변환을 해줌으로 보안성을 향상시키지만 다음과 같은 모듈과 호환성을 제공하지 않습니다. (함께 쓸수 없다는 이야기…)
- mod_cache
- mod_cache_disk
- mod_cache_socache
- MPM worker
- MPM event
Apache 2.4.10 이후로 SSLSessionCache를 위해선 mod_cache_socache 의 의존성을 가지고 있기 때문에 mod_ruid2 를 사용한다면 SSL 제대로 동작하지 않을 가능성이 있습니다. (mod_cache_socache 는 과거의 mod_mem_cache 입니다.)
MPM event 일 경우에 이것이 동작하지 않는다는게 가장 큰 문제로 보입니다.