Entries Tagged as 'Ubuntu & Linux/Unix'



Ubuntu APT를 이용하여 S/W 관리하기
Category : Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 1:46 AM

Ubuntu Linux는 기본적으로 많이 쓰이는 2가지의 소프트웨어 관리기를 제공합니다. 하나는 APT(Advanced Package Tool)과 dpkg(Debian Package)가 바로 그것입니다. 물론 aptitude라는 관리기도 있습니다. 저의 경우 실상 Apache, WAS, DB등을 이용한 웹서비스용으로 리눅스를 사용하거나 Desktop대체용으로 사용하기 때문에 Console만 제공하는 환경에서 서버사용을 위한 몇몇 소프트웨어 관리명령어외엔 일반 데스크탑에서는 거의 그놈의 GUI화면을 이용하지만 확실히 소프트웨어 관리는 콘솔상에서 작업하는 것이 빠르고 더 직관적인것 같습니다.

하지만 실제 서버를 설치하거나 특별히 어떤 패키지를 설치할 때를 제외하고는 거의 특별한 작업이 없기때문에 어떤 패키지를 설치할때마다 검색하기 일수인데요. 간단하게 우분투의 APT를 이용한 소프트웨어 관리에 대하여 정리해 볼까 합니다.

APT Commands (주요 APT명령어)

sudo apt-get update
/etc/apt/source.list의 저장소를 참조하여 패키지 데이터베이스를 업데이트합니다. 즉, 저장소안의 업데이트할 수 있는 소프트웨어의 목록이나, 저장소자체를 추가했을때 해당저장소의 소프트웨어 목록을 업데이트 합니다. 따라서 우분투에서 제공하는 기본저장소외에 저장소를 추가하였을 경우 반드시 이 명령어를 입력해서 업데이트해 주어야 합니다. 가령, 새로운 저장소를 추가하려면 sudo vi /etc/apt/source.list를 명령한 후 하단에 새로운 저장소를 추가합니다. 그리고 source.list를 저장한 후  sudo apt-get update 명령어를 입력하여 저장소목록을 업데이트합니다. 일반적으로 우분투 서버 시스템에서 시스템의 모든 패키지를 업데이트하기 전에 수행하는 명령어이기도 합니다.(데스크탑버전의 경우 대부분 자동으로 소프트웨어를 업데이트하기 때문에 특별히 저장소를 추가하지 않은 이상 거의 사용할 일이 없습니다.)

sudo apt-get upgrade
설치되어 있는 모든 패키지를 조사하여 업데이트가 있는 경우 자동으로 업데이트 합니다.

sudo apt-get dist-upgrade
전체시스템을 새로운 버전으로 업그레이드 합니다. 일반적으로 의존성 문제 등을 고려하여 이 방법으로 새버전으로 업그레이드 하지 않습니다.

sudo apt-get install <package>
<package>를 다운로드하여 설치합니다. 자동으로 의존성문제 등을 고려하여 추가가 요구되는 패키지도 같이 다운로드하여 설치합니다.

sudo apt-get -d install <package>
<package>를 다운로드하여 /var/cache/apt/archives/에 저장합니다. 설치는 하지 않습니다.

sudo apt-get -f install
만일 다운로드한 패키지가 깨진 경우를 확인하기 위하여 검사하는 명령입니다.

sudo apt-get remove <package>
<package>를 삭제합니다. 의존성 문제를 자동으로 해결하면서 삭제하므로 매우 유용합니다. sudo apt-get --purge remove <package>와 같이 --purge옵션을 주면 설정파일은 삭제하지 않으므로 추후 해당 패키지를 다시 설치하면 이전 설정이 그대로 적용됩니다.

sudo apt-get autoclean
불완전하게 다운로드된 패키지 등을 자동으로 삭제합니다.

sudo apt-get clean
/var/cache/apt/archives에 저장된 패키지를 삭제합니다. sudo apt-get -d install <package>하여 다시 다운로드하여 저장할 수 있습니다.

sudo apt-cache pkgnames
시스템에 설치된 모든 패키지를 출력합니다.

sudo apt-cache show <package>
<packae>에 대한 정보를 출력합니다.

sudo apt-cache search <keyword>
/etc/apt/source.list에 저장된 저장소의 모든 패키지들에서 <keyword>를 검색합니다. 특정 패키지의 이름이 생각나지 않거나 일부만 아는 경우 유용합니다. 대소문자 구분이 없습니다.

sudo apt-cache depends <package>
<package>에 대한 의존성을 검사하여 추가적으로 다운로드해야 하는 패키지를 보여줍니다. 하지만 sudo apt-get install <package>하면 알아서 자동으로 다운로드하여 설치해 줍니다.

sudo apt-key list
APT에 저장된 gpg키 목록을 출력합니다. 일부 패키지의 경우 우분투 공식 저장소가 아닌 외부저장소에서 다운로드 받아야 하는 경우가 있는데 이때 해당 패키지의 서명키를 추가한 후 정상적인지 확인할때 쓰입니다.

sudo apt-key add <keyfile>
디지털서명키를 추가합니다.

지금까지 간단하게 APT 주요 설치/삭제 명령어를 알아보았습니다. 사실 이것만으로 대부분의 작업이 가능합니다. 저 역시 웹서비스용으로 우분투를 많이 이용하기 때문에 패키지를 삭제하고 추가하거나 하는 작업은 거의 없습니다. 이것만으로 충분합니다.(단, 우분투 데스크탑버전에서는 많은 패키지를 추가삭제합니다만, 사실 거의 GUI환경에서 우분투시넵틱관리자를 이용하기 때문에 콘솔에서는 거의 작업하지 않습니다.)

 일반적으로 서버를 관리한다고 볼때 시스템엔지니어의 입장에서 우분투는 sudo apt-get update; sudo apt-get upgrade와 같이 한줄로 작성하여 한방에 시스템의 패키지를 최신버전으로 업데이트관리할 수 있습니다. (한줄로 쓰려면 ;기호로 구분합니다.) 하지만 이 경우 자동으로 모든 패키지를 업데이트해버리기 때문에 특정 패키지만 업데이트하거나, VPS(가상서버 호스팅)와 같은 특수한 우분투커널을 운영하는 시스템에서 전체 패키지를 업데이트할 경우 심각한 시스템 커널패닉에 빠져버릴 위험이 있기 때문에 단독 시스템에 설치된 우분투 서버가 아니고서는 함부로 사용에 주의해야 합니다.

그렇다면 저와 같이 우분투 VPS를 이용하는 사람의 경우 최소한 시스템커널과는 다소 거리가 있는 apache라던가, mysql, php등과 관련된 패키지만이라도 보안상의 문제점을 최소화하기 위하여 최신버전으로 업데이트하고자 한다면 어떻게 해야 할까요?  

이런 경우 그냥 sudo apt-get install <pakage>하시면 됩니다. apache패키지라면 sudo install apt-get install apache2 하시면 됩니다. 이 경우 시스템에 이미 apache패키지가 이미 설치되어 있는 경우 이미설치되었다고 출력해 주며 새로운 업데이트가 있는 경우만 업데이트를 설치해 줍니다. 따라서 특정 패키지만 엡데이트하려면 그냥 패키지 설치명령과 동일하게 명령하시면 되겠습니다.


Installing Railo 3.1.2.001-resin-3.1.9 on Ubuntu Server 9.10 64bit
Category : Railo , Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 10:39 AM

어제 서버이전을 했습니다. 그동안 사용했던 Cafe24의 VPS상품(가상서버)중에 CentOS버전을 이용했었는데, 기간도 만료되어가고 이번에 Ubuntu상품이 출시되어서 새로이 변경을 했습니다. Ubuntu의 간결한 시스템(서버전용버전이라 상당히 간결합니다.)과 APT의 편리함, 그리고 무엇보다 경험상 J2EE기반 WAS의 메모리 관리는 Ubuntu가 더 나은 듯하여 옮기기를 주저없이 결정했습니다.

실제로 전체 2GB의 시스템 RAM메모리 중 CentOS의 경우 90%이상 늘 풀로 차있던 반면, Ubuntu는 50%대에서 안정적으로 보여주고 있어 만족하고 있습니다. 물론 Ubuntu가 좀 더 경량화된 Server전용OS이긴 하지만요. 제 CentOS는 초기의 Cafe24상품이라 그런지 OpenOffice까지 깔려 있었던 가상이미지 였습니다.

각설하고, 이번에 Ubuntu 64Bit 9.10 Server Edition에  railo-3.1.2.001-resin-3.1.9-without-jre버전을 깔면서 엄청난 삽질을 했습니다. 이전의 설치방법으로는 거의 100% 오류발생이 일어날 것입니다. 우선 Apache + PHP + MySQL이 설치되지 않은 순수 OS만 설치된 Ubuntu에서 시작합니다. Cafe24.com의 Ubuntu상품은 APM은 본인이 알아서 설치해야 합니다. OS만 설치되는 상품입니다.(사실 이게 제일 맘에 들었습니다. Ubuntu에서 APM설치하기란 정말 딱 5초면 알아서 설치되는 APT관리자가 있으니까요.) 그럼 설치순서를 정리해 보겠습니다. 참고로 PHP는 저는 필요치 않아 설치하지 않았습니다.

 

1. Install SunJDK 1.6

sudo apt-get install sun-java6-jdk

위와 같이 설치를 합니다. 설치를 마치면 JRE의 경로는 /usr/lib/jvm/java-6-sun/ 가 됩니다. java -version을 입력하여 정상적으로 구동되고 있는 지 확인합니다. 이 부분에서 정상적인 설치가 안되는 경우, 나중에 Railo를 설치하고 난뒤 시작하기 위하여 httpd.sh를 구동하면 "exec: 40: -jar: not found" 와 같은 에러메시지를 출력합니다. (If Java path is wrong, it makes error "exex:40:-jar: not found" messege.)

 

2. Java Path

이제 시스템 환경변수에서 Java의 경로를 지정해야 합니다. 예전 Railo버전을 Ubuntu에 설치할 때는 굳이 강제로 지정하지 않아도 잘 되었는데 이번 3.1.2.001부터는 Resin버전이 3.1.9로 변경되어 그런지 반드시 지정을 해야 Resin이 구동되더군요. /etc/profile에 다음을 추가합니다.(vi /etc/profile)

JAVA_HOME=/usr/lib/jvm/java-6-sun/
export JAVA_HOME
export PATH=$PATH:/usr/lib/jvm/java-6-sun/bin

참고로 /usr/lib/jvm/java-6-sun/bin 경로는 SunJDK1.6을 APT로 설치하였을 경우의 경로입니다. 직접 JDK파일을 받아서 설치한 경우는 본인의 경로로 바꾸어 주세요. 추가한 다음 source /etc/profile를 해주어 profile를 업데이트 해 줍니다.

 

 3. Install Apache 2, MySQL 5

이제 apache와 mysql를 설치합니다. 다음과 같이 설치하면 됩니다. 설치 후의 apache 가상호스트 설정이나 mysql설정은 이전 설치설명 4번, 5번을 참조 주세요.

sudo apt-get install apache2 libapache2-mod-auth-mysql build-essential apache2-threaded-dev mysql-server mysql-client

모든 설치가 끝나면, Apache의 경우 /etc/apache2 가, MySQL의 경우 /etc/mysql이 기본 경로가 됩니다. 나머지 설정은 이전 설치설명을 참조하세요.

 

4. Install Railo (railo-3.1.2.001-resin-3.1.9-without-jre.tar.gz)

이제 Railo를 설치합니다. railo-3.1.2.001-resin-3.1.9-without-jre.tar.gz파일을 /opt/ 아래로 업로드 합니다. 그런다음 압축을 풉니다.

tar xvf railo-3.1.2.001-resin-3.1.9-without-jre.tar.gz /opt/

그런 후 railo설치 디렉토리로 이동합니다.

cd /opt/railo-3.1.2.001-resin-without-jre/

다음과 같이 설치옵션을 주어 설치합니다. 여기서가 중요합니다.(Very Important!!) 이것 때문에 엄청 고생을 했는데요. Railo의 Resin은 사실 Resin Professional버전이라 정상적인 라이센스가 없는 경우 설치에 문제가 있습니다. 따라서 Railo의 디렉토리안의 다음 두 파일의 이름을 변경해 줍니다. (Rename each files!)

Makefile.in → Makefile.in.bak
Makefile.am → Makefile.in

즉, Makefile.in파일은 .bak를 붙혀 Backup을 해놓고, Makefile.am파일을 Makefile.in으로 변경합니다. 그런다음 아래와 같이 컴파일하여 설치합니다.

sudo ./configure --with-apxs=/usr/bin/apxs2 --with-java-home=/usr/lib/jvm/java-6-sun/
sudo make
sudo make install

설치가 끝난 후 /opt/railo-3.1.2.001-resin-without-jre/bin 안의 httpd.sh를 실행합니다.

./httpd.sh start

정상적으로 구동이 되면, /etc/apache2/httpd.conf파일에 다음과 같은 내용이 들어가 있을 겁니다.

#
# mod_caucho Resin Configuration
#
LoadModule caucho_module /usr/lib/apache2/modules/mod_caucho.so
ResinConfigServer localhost 6800
CauchoConfigCacheDirectory /tmp
CauchoStatus yes

 

5. ETC

남은 Apache의 Vhost설정이나, Resin의 Vhost설정 등은 이전 설치 설명중 4번, 5번을 참조하시면 됩니다. 


Solaris는 이제 더 이상 무료가 아니다? - Solaris is not free anymore?
Category : Miscellaneous , Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 5:06 AM

만우절 농담이 아니다.

우선 ZDNET의 기사를 보자면( "무료 중단" 오라클, 솔라리스 라이선스 정책 수정 - http://www.zdnet.co.kr/Contents/2010/03/30/zdnet20100330223953.htm) 이제 솔라리스는 더 이상 맘대로 다운로드하여 썼다간 오라클에 불법사용의 배상을 해야 할 지도 모르겠다. 예상했던대로 EU에서의 Sun 합병승인이 나자마자 서서히 Sun이 그동안 오픈소스 진영 생태계를 위해 기증하였거나 또 사실상 오픈소스와 같은 유연한 라이센스 정책으로 기여한 제품들에 대하여 오라클은 하나씩 유료화 카드를 꺼내들었다.

오라클은 합병전에 Sun의 오픈소스에 대하여 지원하겠다는 약속을 한바 있는데 그들의 로고에서 사용되는 색깔처럼 새빨간 거짓말이 되어 가는 것 같아 안타깝다. 상용소프트웨어 회사라 이윤을 위해 제품을 판다는 것이 자본주의 사회에서 무슨 범죄겠냐마는 오픈소스 정신과 그 생태계를 무참히도 밟을 것 같아 염려되는 것은 결코 좌시할 수도 없을 일이다. 사실 오라클에게는 리눅스나 웹로직같은 그동안 사들인 많은 라인업으로 인해 동일한 선상에 있는 많은 오픈소스에 대하여 적대적이였다고 본다. 오라클에게 있어 여전히 오픈소스 리눅스진영이나, Jboss와 같은 WAS는 눈엣가시일 수 있다.

콱 성질나면 모든 Java에 대하여 라이센스를 유료화해버릴 수 있다. 그러면? 지구상 대부분의 Java기반의 WAS나, 응용프로그램은 더 이상 무료로 쓸 수 도 배포할 수 도 없는 상황이 나올 수 있다. 또 MySQL과 같은 계륵은 자사의 오라클경량버전에 여전히 걸림돌이라고 볼 수 있는 것이다. 기업시장에서 Sun의 위력이 대단했던 만큼 MS나 Adobe? 따위는 쌈 자체가 안되는 집단일 수 도 있다. 그나마 오라클과 같은 기업시장에서 필적할 상대를 좀 찾자면 IBM정도인데, Sun과는 Java를 같이 공유한 입장에서 Sun이 IBM으로 안기지 못한 점이 아쉽다. IBM이 Java를 지켜줄까? 궁금하다. 사실 Unix시장에서는 (잘은 모르지만) Solaris는 엔트리급 X86시장에서 주로 쓰인 반면 대부분의 벤더는 자사의 시스템에 맞춘 Unix를 가지고 있어 Solaris의 유료화에 관심이나 있을지 모르겠다.

암튼 이제 추측컨데 MySQL의 유료화나 또는 개발중단, 웹로직에 잠정적 장애물인 GlassFish 등 Sun이 오픈소스 생태계에 기여해온 제품이 오라클의 칼날에 난도질 당할일만 남은 것 같다. 매트릭스 시리즈를 다 본것은 아니지만 오라클은 그 영화에서도 별로 선한 캐릭터를 아닌듯... 무책임하게 부채도사나 지리산 옥동자 신접하듯 예언만 씨부렁대고..ㅋ

http://www.katonda.com/news/solaries-no-more-free-open-solaris-may-die/936/2010 와 같은 기사를 보면 아예 Solaris가 죽을지도 모른다고 걱정들 하는데.. 40억년 후에나 초신성으로 대폭발을 할 줄 알았던 태양이 이렇게 한 순간에 난도질 당하고 있다니.. 

오라클은 아주 세세한 곳에서까지 Sun의 흔적을 지워가고 있다. 심지어 오픈솔라리스 하단의 Sun로고도  언제가부터 오라클로 바뀌어 있다. 그런면에서 Macromedia란 이름을 아직도 제품 여기저기 사용중인 Adobe는 양반일까?

 


mod_evasive - Protect your apache from DDos attacks!
Category : Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 6:23 PM

mod_evasive는 Apache 모듈로서 간단하게 아파치 웹서버를 공격하는 DDos공격을 차단하는 모듈입니다. 하드웨어적으로 별도의 DDos방화벽을 설치하지 못하는 중소규모의 웹서버 및 소규모 VPS환경에서 비교적 효율적으로 사용할 수 있습니다. 하지만 성능이 웹서버의 성능에 좌우되므로 가장 최선의 방법은 웹서버와 별도로 하드웨어적인 DDos를 차단하는 솔루션을 고려해야 합니다. 여기서는 간단히 Apache 2.0이상의 웹서버에서 사용하는 방법을 살펴보겠습니다.

우선 mod_evasive를 다운로드합니다. http://www.zdziarski.com/projects/mod_evasive/ 에서 최신버전의 mod_evasive를 다운로드 합니다. wget으로 직접 경로를 서버상에서 받아도 되며, 다운로드후 다시 자신의 웹서버로 FTP업로드해도 상관없습니다. 가령 /home 경로에 업로드 했다고 가정합니다.

압축풀기 및 설치

tar xzvf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/usr/local/apache2/bin/apxs -iac mod_evasive20.c


Apache2 환경설정

자신의 웹서버의 httpd.conf 파일을 열어 아래를 추가합니다. 그런 다음 Apache 웹서버를 재시작 합니다.

LoadModule evasive20_module /usr/local/apache2/modules/mod_evasive20.so

<IfModule mod_evasive.c>
        DOSHashTableSize          3097
        DOSPageCount              3
        DOSSiteCount                50
        DOSPageInterval            1
        DOSSiteInterval              1
        DOSBlockingPeriod        30

        DOSEmailNotify             test@test.com
        DOSLogDir                    "/usr/local/apache2/logs/mod_evasive.log"
        DOSSystemCommand   "iptables -I INPUT -s %s -j DROP"
    DOSWhitelist                     127.0.0.1
</IfModule>


모듈설정


모듈설정에 대한 자료는 http://guni.loveyust.net/136 에서 참조하였습니다. 다만, DOSSystemCommand 를 IPTABLES로 차단하도록 명령어를 변경했습니다. 참조하세요.

- DOSHashTableSize
각 자식 해쉬테이블 마다 탑레벨 노드의 수를 지정한다.
수치가 높으면 높을수록 더 많은 퍼포먼스가 나타나지만 테이블스페이스에 메모리를 남기게 된다,
접속량이 많으면 이 수치를 높혀도 된다.

- DOSPageCount
이것은 같은 페이지 또는 URI, 인터벌당 요청수에 대한 카운트 수이다.
지정된 값이 초과되면 클라이언트에 대한 IP 정보가 블러킹리스트에 추가된다.

- DOSSiteCount
지정된 시간동안 같은 페이지를 지정된 수 보다 초과될경우 IP 정보가 블러킹리스트에 추가된다.

- DOSPageInterval
페이지 카운트 시발점, 디폴트는 1초이다.

- DOSSiteInterval
사이트 카운트 시발점, 디폴트는 역시 1초이다.

- DOSBlockingPeriod
클라이언트가 블랙리스트에 추가되어 블러킹되는 총 시간. 이때 클라이언트는 403(Forbidden) 에러를 출력하게 된다.

- DOSEmailNotify
이 값이 지정되면, IP가 블러킹될때마다 지정된 이메일로 발동된다.
주의 : 메일러는 mod_dosevasive.c 에 정확하게 지정되야 한다. 디폴트는 "/bin/mail -t %s" 이다.

- DOSLogDir
로그 파일 경로

- DOSSystemCommand
이 값이 지정되면, 시스템은 아이피가 블러킹될때마다 명령행을 실행한다.

- DOSWhitelist
차단에서 제외될 호스트
DOSWhitelist    127.0.0.1


Installing fail2ban on Centos 5
Category : Securities , Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 4:53 AM

제가 쓰고 있는 Cafe24의 VPS호스팅은 CentOS 기반입니다. 이 서버에 Fail2ban을 설치하고자 할때 보통은 yum install fail2ban 하시면 설치되지만 연결되는 저장소에 Fail2Ban이 없는 경우가 많습니다. 특히 국내 미러들은 말이죠.. 아마 거의 없다고 봐도.. 그래서 그냥 정신건강에 좋게 다음과 같이 소스를 받아다가 직접 업로드하고 설치해 봅니다.

먼저 http://sourceforge.net/projects/fail2ban/ 에서 최신 버전을 받습니다. 가장 최근 버전은 2009년 12월 24일 현재 fail2ban-0.8.4.tar.bz2 입니다. 이 파일을 자신의 서버에 업로드 합니다. root권한이 있어야 합니다. 업로드는 그냥 /root나 /home 아무대나 업로드 합니다. 예를 들어 /home에 업로드 했다고 합니다.

/home에서
tar -xjvf fail2ban-0.8.4.tar.bz2
cd fail2ban-0.8.4
python setup.py install

위 순서대로 압축을 풀고, 해당 디렉토리로 가서 파이선스크립트로 설치합니다. 그런다음, vi /etc/fail2ban/jail.conf 하여 설정을 해 줍니다.

그런다음 실행을 해줘야 하는데,  아무 경로에서 그냥 fail2ban-client start 해주시면 됩니다. fail2ban-client -h 하시면 다양한 실행옵션을 볼 수 있습니다. 이때 /var/log/아래에 sshd.log와 vsftpd.log가 없다고 에러나면, 그냥 touch 명령어로 해당 디렉토리에 두개의 파일을 만들어 줍니다. 

touch /var/log/sshd.log
touch /var/log/vsftpd.log

필요한경우 chmod 등 권한설정을 해주면 되겠죠? 이상하게 Fail2ban의 rpm 버전들은 Fail2Ban의 공식홈페이지에서 다운로드하려도 하면 해당 웹사이트들이 거의 문을 닫았거나, 오류가 나더군요. 이럴때는 apt-get으로 설치하는 우분투가 그립습니다. 이상한게 경험상 보면, CentOS의 미러 저장소들은 없는 패키지가 너무 많습니다. :(

 


About me

Categories

Monthly Archives

Links

Recent Posts

Recent Comments