Tomcat을 조금 잘 설치하기

Bookmark and Share

tomcat.png

물론, 대충 Apache Site에서 내려받은 것을 풀고 거기에 내 war 파일만 추가해도 잘 돌아가는 훌륭한 Tomcat이다. 하지만, 되는 거 말고 맞는 거!

프로그램에 알고리즘과 데이터구조가 따로 존재하듯이, 연습 경기가 아닌 실제의 운영 환경에서는 판매 또는 배포되는 프로그램과 그것이 사용하는 데이터를 구조적으로 분리하는 것이 꼭 필요하다. (그렇다면 연습 경기도 그렇게…)

아무튼, 내가 갑자기 왜 이걸 쓰고 있는지는 모르겠는데, 가장 대표적인 오픈소스 Java Servlet Container인 Tomcat은 아래와 비슷한 방식으로 설치하는 것이 좋다.

설치

배포본, CATALINA_HOME 설치

기왕 Java Servlet Container이니, Java 스럽게 표현하자면, CATALINA_HOME은 Java의 Class라고 보면 될 것 같다. 이 곳에는 Apache Foundation에서 Download한 Tomcat 파일을 있는 그대로 풀어놓으면 된다.

FHS 에 따라, 이런 류의 것들은 /opt/ 아래에 둔다. /opt/apache/tomcat 또는 /opt/apache-tomcat 어느 것이 더 마음에 드는지는 사용자의 선택. 나는 앞의 것을 더 선호하지만 뒤의 것을 사용할 때가 많다.

서버 기반, CATALINA_BASE 설치

CATALINA_HOME이 Class 라면 CATALINA_BASE는 Instance이다. "정의"된 하나의 Class가 실제로 프로그램 상에서 여러 Instance로 만들어져 "사용"되듯이, 한 벌 설치된 CATALINA_HOME은 여러 용도를 위한 CATALINA_BASE 들에서 공유되어 사용할 수 있다.

물론, 이 둘을 분리하는 것이 단지 공유 환경을 위한 것은 아니다. 그보다 중요한 것은, 제공 받은 HOME과 내가 관리하는 BASE를 분리함으로써, Patch나 Upgrade 대응도 보다 편해지고, 아무튼!

아래 Makefile를 사용하면 조금 편하게 CATALINA_BASE를 만들어낼 수 있다.

설정

기본 제공되는 관리자 App 설정

Tomcat과 함께 배포되는 기본 관리자 인터페이스는 다음과 같이 설정하여 보다 안전하게 사용할 수 있다.

Manager App 활성화

먼저, 위의 Makefile을 이용하여 인스턴스를 구성하게 되면 별도로 manager app을 배포하지 않고도 CATALINA_HOME의 앱을 사용할 수 있도록 구성된다. 손으로 구성하는 경우라면 아래 경로에 다음과 같은 내용의 파일을 만들어주면 된다.

file: conf/Catalina/localhost/manager.xml

<Context docBase="${catalina.home}/webapps/manager"
        antiResourceLocking="false" privileged="true" >
</Context>

Manager 접근 설정

기본 구성에서는 어떤 사용자도 활성화 되어있지 않다. 아래와 같이, 사용자 설정 파일을 수정하여 줌으로써, 웹 화면으로 접근 가능한 사용자 계정을 만들 수 있다.

file: conf/tomcat-user.xml

<tomcat-users xmlns="http://tomcat.apache.org/xml"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
        version="1.0">
    <user rolename="manager-gui"/>
    <user username="admin" password="p4ssw0rd" roles="manager-gui"/>
</tomcat-users>

위의 내용을 반영하고 http://hostname/manager 로 접근하면, HTTP 인증방식의 인증 착이 뜨게 되며, 위에서 설정한 username과 password로 관리 화면이 열리게 된다.

Manager 접근 암호의 암호화

그러나, 위의 설정은 좀 위험하다. 해당 파일의 권한을 잘 관리한다고 하더라도, 암호가 평문으로 저장되어 있다는 위험은 사라지지 않는다. Tomcat은 이를 위한 보완 기능을 제공하는데,

먼저 아래와 같이, 함께 제공되는 스크립트를 활용하여 Hash 처리된 암호를 만들어낸다. 이 때, sha-1, md5, sha-256 등의 방식을 사용할 수 있다.

$CATALINA_HOME/bin/digest.sh -a sha-1 p4ssw0rd
p4ssw0rd:ad3b59......

이렇게 만들어진 Hash로 이미 설정한 사용자의 password 부분을 대체해준다.

file: conf/tomcat-user.xml

<tomcat-users xmlns="http://tomcat.apache.org/xml"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
        version="1.0">
    <user rolename="manager-gui"/>
    <user username="admin" password="ad3b59......" roles="manager-gui"/>
</tomcat-users>

마지막으로, Tomcat으로 하여금, 사용자가 입력한 암호를 어떻게 다룰지 알 수 있도록 해줘야 하는데, 원래 아래와 같이 단순하게 설정되어 있는 부분을,

file: conf/server.xml

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    resourceName="UserDatabase"/>

다음과 같이 한 줄을 추가하여 sha-1 방식의 Hash된 암호를 사용하고 있음을 알려준다.

file: conf/server.xml

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    digest="sha-1"
    resourceName="UserDatabase"/>

이제 서버를 다시 시작하고 나면, 사용자 입장에서는 동일하게 암호를 입력하여 로그인할 수 있다.

Bookmark and Share


따로 명시하지 않는 한에서 이 사이트의 모든 콘텐츠는 다음의 라이선스를 따릅니다: Creative Commons Attribution-NonCommercial 3.0 License