mod_ruid2 설치 방법

Apache 2 버전에서 mod_ruid2 를 설치하기로 했다.

https://github.com/mind04/mod-ruid2 에 가서 최신버전의 zip 파일을 다운로드한다. 다운로드한 파일을 서버에 올리고 unzip master.zip 명령을 내려 압축을 해제한다. 이 글을 쓰고 있는 시점에 최신 버전은 0.9.8 버전이다.

참고로, 내 서버의 환경은 CentOS 6.5 이며 모든 최신업데이트가 전부 적용되어 있다. Apache는 CentOS에서 제공하는 아파치를 사용하고 있다.

apxs -a -i -l cap -c mod_ruid2.c 명령을 내리면 컴파일이 시작된다.

----------------------------------------------------------------------
 Libraries have been installed in:
 /usr/lib64/httpd/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/lib64/httpd/modules/mod_ruid2.so
 [activating module `ruid2' in /etc/httpd/conf/httpd.conf]
 [root@83rpm mod_ruid2-0.9.8]#

메시지가 나오고 컴파일이 종료된다.

혹시 sys/capability.h 파일이 없다는 메시지가 나온다면 lilbcap-dev 패키지를 설치하면 해결된다.

아파치 폴더의 httpd.conf 를 보면,

LoadModule ruid2_module       /usr/lib64/httpd/modules/mod_ruid2.so

처럼 모듈 로딩 명령이 들어가 있다.

가상호스트 설정에 들어가서 다음의 내용을 추가한다.

<IfModule mod_ruid2.c>
RMode config
RUidGid 원하는유저ID 원하는그룹ID
</IfModule>

다 입력했다면 아파치 서버를 재시작하고 다음의 내용의 PHP 파일을 만들어서 제대로 작동하는지 확인한다.

<?php
 makedir("testdir");
 ?>

이 내용은 http://fullpowe.blog.me/10158911404 를 참조했다.

추가. 위 php 파일의 makedir() 함수로 테스트를 하려했으나 mod_security 모듈에 의한 보안정책 위반으로 제대로 실행되지 않았다. 자체적으로 테스트해본 결과, mod_ruid2 모듈은 정상적으로 작동하는 것을 확인하였다.

아파치에서 특정 도메인에 대한 페이지를 모두 포워딩하기

아파치 웹서버에서 가상호스트를 설정하여 운영하던 중에 특정 가상호스트로 들어오는 모든 요청을 특정도메인의 특정페이지로 넘길 때의 설정 방법이다.

가상호스트 설정 파일에서 다음의 내용을 입력한다.

<VirtualHost *:80>
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^(request.domain.com) [NC]
 RewriteRule ^(.*)$ http://target.domain.com/target_page.jsp [R,L]
</VirtualHost>

지정된 도메인으로 오는 모든 요청이 지정된 페이지로 다 전환되어 버린다.

리눅스에서 가상화 서버로 포트포워딩과 서비스 연결

좀더 빡세게 서버를 돌리기 위해 리눅스 서버 위에 윈도우 2008 서버를 가상화로 설치하여 사용 중이다.

문제는 이 리눅스 서버에는 이미 다양한 서버가 설치되어 있었는데 그중에는 웹서버도 포함되어 있었다. 또한 수십여개의 도메인도 연결되어 있었다. 기존에 사용하던 IP, 도메인 등은 그대로 둔채 특정 도메인이나 특정 포트만 가상화 서버로 연결해주려면 다음과 같이 한다.

<특정 포트만 가상화 서버로 포트포워딩하여 연결하고 싶은 경우>

iptables를 이용한다. 내 서버의 경우에는 윈도우 2008 가상화 서버에 192.168.122.95 라는 아이피가 부여되어 있었다.

<특정 도메인만 가상화 서버로 연결하고 싶은 경우>

이건 꽤 문제가 되는데 내 경우에는 HTTP 웹서비스를 담당하는 80번포트만 윈도우 서버에 따로 연결하고 싶었다.

아파치 서버의 conf 파일에서 Virtual Host를 하나 만들고 Server Name으로 원하는 도메인을 적은 다음과 같이 ProxyPass를 잡아준다.

ProxyPass / http://192.168.122.95/
ProxyPassReverse / http://192.168.122.95/

이렇게 하면 일단 해당 도메인으로 오는 요청을 리눅스 서버의 아파치 서버가 받은 다음 프록시 모듈을 이용해서 윈도우 서버로 통신을 넘겨준다.