Linux2009/03/10 10:11
몇년전.. 블로그 날려먹기전에 회사다닐때 작성했던 1년 365일 꽃말자료를 포스팅 한적이 있습니다.
뭐 중간중간에 오타도 있고 이미지도 이쁜편도 아니고 찾지 못한 꽃 이미지도 있는 허접한 잘지만
365일분의 꽃말을 찾아 입력했다는데 의의를 두고 있었죠.

블로그 날려먹으면서 복구해야지 해야지 하다가 귀찮아서 미뤄두고 있었는데
방명록에 자료요청이 있어 다시 포스팅 합니다.

요청은 꽤 오래전에 있었는데... -_-ㅋ
제가 딴곳에 정신이 팔려서 이제서야 봤답니다. ㅠ.ㅜ
몇개월간 블로그는 신경도 쓰지 않고 살았네요. ㅎㄷㄷㄷ

일단 자료를 올립니다.




flower365_db.zip 파일은 꽃말 데이터가 들어가 있는 SQL파일입니다. 압축을 해제하면 txt형식의 파일이 나오니 phpMyAdmin이나 명령어를 이용하여 import해주시기만 하면 됩니다. 기본 테이블명이 t3_tts_flower로 되어 있고 테이블명을 변경하시려면 애용하시는 텍스트 편집기를 이용하여 치환해주시면 됩니다.

원래는 아~주 오래전에 작성된 데이터라 문자셋이 euc-kr이었지만 시대에 맞춰 utf8로도 파일을 따로 작성하였으니 필요한 파일을 다운받아 사용하시면 되겠습니다.

그리고 flower365_image.tar.gz 파일은 당연히... 이미지 파일입니다. 제가 찾다찾다 결국 찾지못한 파일들이 몇개 있지만 그래도 그럭저럭 사용하실만 할겁니다. 이전 포스팅에도 혹시 이미지 가지고 계신분은 좀 보내달라는 요청을 써놓았지만 결국 메일한통 없더군요.. ;ㅁ;

물론 위 파일들을 다운받은후 DB로부터의 쿼리와 php code의 작성 및 html수정등의 노가다는 당연히!!! 필요합니다. 제가 능력이 된다면 플러그인 형식으로 제작하고 싶지만 이게... 다른 코드를 살짝 들여다보니 평소부터 텍스트큐브에 관심을 가지고 있던 사람이 아니면 힘들겠더군요. -_-

위 파일들을 이용한 실전 예제(?)는 정리하여 다른 제목으로 다시 한번 포스팅 하도록 하겠습니다.


위 파일들은 크리에이티브 커먼즈 라이센스를 따릅니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Onedayth

TRACKBACK http://linuxwin.com/trackback/82 관련글 쓰기

댓글을 달아 주세요

Linux2008/09/27 20:25
이번 포스팅에서는 hddtemp 패키지와 mrtg를 이용한 하드디스크 온도 모니터링 방법을 소개합니다.

- 전제조건 : mrtg가 셋팅되어 정상작동 하고 있을 것

순서가 반대로 되었지만 나중에 mrtg와 snmp에 대한 포스팅도 작성할 예정입니다.

● hddtemp 패키지
하드디스크의 온도를 알려주는 패키지입니다. 메인보드에서 반드시 S.M.A.R.T를 지원해야 한다는 전제조건이 있네요. 설치는 Fedora의 경우 yum 으로 간단하게 설치할 수 있습니다.

# yum list hddtemp
hddtemp.i386                             0.3-0.15.beta15.fc9    installed


저의 경우엔 이미 설치를 하였기 때문에 위처럼 나오지만 설치가 안되신 분들은 아래 명령을 이용하여 설치할 수가 있습니다.

# yum install hddtemp

특별한 의존성 패키지도 없기 때문에 hddtemp만 설치될 것입니다. 명령은 "hddtemp"이고 아래와 같은 옵션으로 간단하게 온도를 체크할 수 있습니다. 저의 경우엔 SATA 하드디스크 3개가 장착되어 있기 때문에 디스크 디바이스가 "/dev/sda, /dev/sdb, /dev/sdc"이므로 디바이스 명을 인수로 주었습니다.
IDE방식은 /dev/hdx 형식으로 되어 있는 경우도 있으니 해당 머신의 디스크 디바이스를 확인해 주세요.

# hddtemp /dev/sda
/dev/sda: Hitachi HDP725032GLAT80: 35°C
# hddtemp /dev/sdb
/dev/sdb: WDC WD10EACS-00D6B0: 31°C
# hddtemp /dev/sdc
/dev/sdc: ST31000340AS: 31°C

제 리눅스 박스의 하드디스크는 디스크 장착베이에 팬이 달려있는 놈이라서 그런지 온도가 그렇게 높지 않네요!!
이제 mrtg에서 계산 하기 편하도록 하드디스크 모델명이나 단위는 빼고 숫자만 출력해보도록 하겠습니다.

# hddtemp -n /dev/sda
35

-n 옵션을 주니 간단하게 해결되네요.

아래는 mrtg의 환경설정 부분입니다. mrtg.cfg 파일을 수정하기 전에는 백업을 꼭 잊지마셔요;;
mrtg.cfg 파일은 yum을 이용하여 설치하였을 경우 디폴트로 /etc/mrtg/mrtg.cfg 에 존재합니다.

Target[hddtemp_sda]: `/usr/sbin/hddtemp -n /dev/sda`
WithPeak[hddtemp_sda]: my
MaxBytes[hddtemp_sda]: 100
Title[hddtemp_sda]: IDE HDD Temperature(/dev/sda)
Options[hddtemp_sda]: absolute,gauge,nopercent,noinfo
YLegend[hddtemp_sda]: Temperature
LegendI[hddtemp_sda]: Temperature:
LegendO[hddtemp_sda]:
Legend1[hddtemp_sda]: HDD Temperature in Degress Celcius
Legend2[hddtemp_sda]:
ShortLegend[hddtemp_sda]: C
PageTop[hddtemp_sda]: <H1>IDE HDD Temperature(/dev/sda)</H1>

위 내용을 추가해주시면 됩니다.
mrtg에 지식이 있으신 분은 자세한 설정을 바꾸셔도 되고 자신 없는 분들은 위 설정을 복사해서 쓰시면 될 겁니다. 하드디스크가 여러개이신 분들은 "hddtemp_sda" 부분을 수정하셔서 디스크의 갯수만큼 복사해주시면 됩니다.
설정이 끝났으면 인덱스 페이지를 새로 만들어 주어야죠 ?

# indexmaker /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html

인덱스 파일의 경로등은 적절하게....

사용자 삽입 이미지


단.. 문제점이 있습니다. mrtg를 실행시켜 보면 아래와 같은 에러메시지가 출력됩니다. 뭐 특별히 신경쓰지 않아도 된다고 적혀있고 실제로 모니터링도 잘 되지만 문제는 cron에 등록된 mrtg가 실행될때마다 에러가 발생하니 메일박스에 아래 메시지가 계속 전송된다는 거죠.
2008-09-27 20:15:01: WARNING: Problem with External get '/usr/sbin/hddtemp -n /dev/sda': Expected a Number for 'out' but nothing' 2008-09-27 20:15:01: WARNING: Problem with External get '/usr/sbin/hddtemp -n /dev/sdb': Expected a Number for 'out' but nothing' 2008-09-27 20:15:01: WARNING: Problem with External get '/usr/sbin/hddtemp -n /dev/sdc': Expected a Number for 'out' but nothing' 2008-09-27 20:15:02: ERROR: Target[hddtemp_sda][_OUT_] ' $target->[2]{$mode} ' did not eval into defined data 2008-09-27 20:15:02: ERROR: Target[hddtemp_sdb][_OUT_] ' $target->[3]{$mode} ' did not eval into defined data 2008-09-27 20:15:02: ERROR: Target[hddtemp_sdc][_OUT_] ' $target->[4]{$mode} ' did not eval into defined data
전 5분 간격으로 mrtg로 체크하게 해놓았는데.. 이 에러메시지가 5분마다 메일박스에 차곡차곡 쌓여있습니다. ;ㅁ;
이 문제만 어떻게 해결한다면 좋겠는데.. 현재로는 뾰족한 해결방법을 찾지 못했습니다.

"2&>1 > /dev/null" 로 리다이렉트를 해보아도 소용없고.. crontab의 전송메일 주소를 바꾸어 보려 했지만 근본적인 해결책이 아니라 일단 그만두었습니다.

이 문제는 해결되는대로 다시 포스팅을 하던가 업데이트를 하도록 하죠.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Onedayth

TRACKBACK http://linuxwin.com/trackback/38 관련글 쓰기

댓글을 달아 주세요

Linux2008/09/18 14:21
yum은 콘솔에서 사용할 수 있는 리눅스 패키지 자동 업데이트 툴입니다.
이걸 이용하면 간편하게 패키지 업데이트들을 할수가 있죠.
단.. 컴파일 해서 설치한 경우는 제외입니다. ;ㅁ;

저도 이전에는 기본패키지만 설치하고 필요한 것들만 하나씩 컴파일 해서 사용했었는데 유지/보수를 생각한다면 yum을 이용한 패키지 관리를 추천합니다.

먼저 yum의 헬프 메시지를 볼까요.

>> yum 헬프메시지 보기 << 클릭


꽤 많네요... 그런데 옵션은 몇몇을 제외하고는 많이 쓰지는 않습니다. 명령어가 포인트이죠!!
yum에는 이외에도 설정파일 및 저장소에 대한 정보 등등 다양한 기능+셋팅이 있겠지만 여기서는 일반유저들(저를 포함한)을 위한 기본적인 사용법에 대해서만 체크하도록 하겠습니다.
사실 이 블로그에 있는 문서들은 나~중에 제가 참고하기 위해 작성하는 면도 없지않아 있습니다.

● 최신 업데이트 목록의 확인

# yum check-update

iwl4965-firmware.noarch                  228.57.2.21-1.1        updates-newkey
nss_compat_ossl.i386                     0.9.3-1.fc8            updates-newkey
selinux-policy.noarch                    3.0.8-115.fc8          updates-newkey
selinux-policy-targeted.noarch           3.0.8-115.fc8          updates-newkey
tomcat5-jsp-2.0-api.i386                 5.5.27-0jpp.2.fc8      updates-newkey
tomcat5-servlet-2.4-api.i386             5.5.27-0jpp.2.fc8      updates-newkey

"check-update" 커맨드를 이용하면 현재 시스템에 설치되어 있는 패키지들 중에서 업데이트 가능한 목록들을 쭈욱 보여줍니다. 보니 selinux와 tomcat도 업데이트가 되었네요. 자 그럼 위 패키지들을 실제로 설치를 해보겠습니다. 설치할때에는 하나씩 패키지를 지정해서 설치할 수도 있고 한꺼번에 모든 업데이트를 설치할 수도 있습니다.

● 패키지의 업데이트
업데이트된 패키지 중 일부만 지정해서 설치하는 경우
# yum [-y] update [패키지명1] [패키지명2] ....

업데이트 된 패키지들을 모두 설치 하는 경우
# yum [-y] update

이때 중간에 계속 진행할 것인지 물어보는 프롬프트가 뜨는데 프롬프트를 없애려면 "-y" 를 옵션을 하면 모든 프롬프트에 자동으로 "yes"를 입력해 줍니다.

● 패키지의 검색 및 인스톨
현재 시스템에 설치되어 있지 않은 패키지를 인스톨 하기 위해 먼저 아래와 같이 패키지를 검색합니다.
아래 명령은 검색어가 포함되어 있는 모든 패키지를 보여줍니다.

# yum search mc

그런데 search 커맨드는 검색어가 포함되어 있는 패키지는 모두 보여주기 때문에 위 명령어처럼 mc(midnight commander)를 검색하면 tomcat 도 같이 출력됩니다. 그러므로 가능하다면 패키지명을 확인한 뒤 list 명령어를 사용하는 편이 깔끔합니다.

# yum list mc
Available Packages
mc.i386                                  1:4.6.1a-50.20070604cv updates-newkey

Available 패키지로 표시되네요. 인스톨 하기전에 조금 더 자세한 정보를 보고 싶으시면 info 커맨드를 사용합니다.

# yum info mc.i386

text console file manager and visual shell이라고 설명이 나오네요. 윈도우즈에서 사용하는 Total Commander와 같다고 보시면 됩니다. ^^ 꽤 편리하니 강추입니다. 자 그럼 이제 패키지를 인스톨 하기 전에 혹시라도 이미 시스템에 설치되어 있는지 확인해 보겠습니다.

# yum list installed mc
Error: No matching Packages to list

없네요! 그럼 이 편리한 툴을 설치하겠습니다.

# yum [-y] install mc.i386

.... 끝입니다. ;ㅁ; 간단하죠 ? 사실은 설치할때에도 여러가지 옵션을 이용하여 설치 디렉토리를 변경 하거나 하는것도 가능하지만 나중에 유지보수를 생각한다면 디폴트로 설치하는게 가장 편합니다.
그럼 이제부터 확인작업입니다.

# yum list installed mc
Installed Packages
mc.i386                                  1:4.6.1a-50.20070604cv installed
# yum list mc
Installed Packages
mc.i386                                  1:4.6.1a-50.20070604cv installed

● 패키지의 삭제
패키지를 설치했다면 삭제할 일도 있겠죠. 삭제 할때에는 의존성 때문에 주의가 필요합니다. "--force" 옵션을 이용하면 의존성 무시하고 강제로 삭제할 수도 있지만 언제 어디서 에러가 발생할지 모릅니다. 하도 이리저리 엮여 있어서요.. 그러니 의존성 에러가 발생한다면 왠~만하면 그냥 놔두시라고 권해드립니다.

# yum remove [패키지명]


● 파일의 해당 패키지 확인
가끔가다 보면 이 파일이 도대체 어느 패키지에 속해있는 것인지 확인해야 할 때가 있습니다. 그럴때 provides 커맨드를 사용하실 수 있습니다.

# yum provides libdb-4.6.so
db4-4.6.21-2.fc8.i386 : The Berkeley DB database library (version 4) for C
Matched from:
Other       : libdb-4.6.so

db4-4.6.21-1.fc8.i386 : The Berkeley DB database library (version 4) for C
Matched from:
Other       : libdb-4.6.so

db4-4.6.21-2.fc8.i386 : The Berkeley DB database library (version 4) for C
Matched from:
Other       : Provides-match: libdb-4.6.so

위 명령어를 입력하면 "libdb-4.6.so" 파일이 어느 패키지에 해당되는지 알려줍니다. 저 파일은 "db4-4.6.21-2.fc.i386" 패키지에 포함되어 있는 파일이군요! 그럼 info 커맨드로 더 자세한 정보를 알아보는 것도 가능하리라 생각됩니다. 또한 *도 사용할 수 있네요.

# yum provides /usr/sbin/vg*


와 같이 이용하는 것도 가능합니다.

다음에는 yum의 conf파일이나 환경설정에 대해서 조금 더 알아보는 포스트를 작성해보도록 하겠습니다.
요기까지...

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Onedayth

TRACKBACK http://linuxwin.com/trackback/36 관련글 쓰기

댓글을 달아 주세요

Linux2008/09/18 14:15
BIND의 또다른 메시지입니다.
역시 /var/log/messages에 기록된 내용이며 내부 네트워크에 물려있는 IP들에 대해서 동일한 메시지가 계속되어 출력되고 있네요.

이 문제는 구글에서 검색한 결과 바로 답이 튀어나오네요.
아래의 FAQ페이지에서 확인 하실 수 있습니다.

http://www.isc.org/index.pl?/sw/bind/FAQ.php

해결방법은 해당 네트워크 세그먼트에 대해서 파일설정을 empty로 설정하라고 하네요.
친절하게도 empty파일의 작성방법도 나와있긴 한데 /var/named/chroot/var/named 디렉토리를 보시면 named.empty라는 파일이 이미 존재하므로 다음과 같이 설정하도록 하겠습니다.

만약 서버의 내부 네트워크가 172.16.1.0/24 이고 이 세그먼트에 대해서 위의 메시지가 계속해서 발생한다면 named.conf에 아래와 같은 내용을 추가하시면 됩니다. 참 배포판에 따라서 named.conf에 적을 수도 있고 아니면 named.conf내에서 불러들이는 파일(Fedora8에서는 /etc/named.rfc1912.zone 파일)에 적어주시면 됩니다.

zone "1.16.172.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};

172.16.0.0/16 이라면 zone "16.172.in-addr.arpa" IN 이 되겠죠 ?
그리고 named를 아래와 같이 재시작해주세요~

/etc/init.d/named restart


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Onedayth

TRACKBACK http://linuxwin.com/trackback/35 관련글 쓰기

댓글을 달아 주세요

  1. 조아

    퍼갈께요. 감사합니다~

    2010/05/19 09:19 [ ADDR : EDIT/ DEL : REPLY ]

Linux2008/09/18 14:04
현재 서버에는 내부 네임서버로서 BIND를 운영하고 있습니다.

그런데 아래와 같은 메시지가 로그파일에서 계속 확인이 되더군요.
로그파일은 /var/log/message 입니다.

starting BIND 9.x.x-xx -u named -t /var/named/chroot
Sep 18 13:33:28 oneday named[6587]: found 2 CPUs, using 2 worker threads
Sep 18 13:33:28 oneday named[6587]: loading configuration from '/etc/named.conf'
Sep 18 13:33:28 oneday named[6587]: the working directory is not writable
Sep 18 13:33:28 oneday named[6587]: listening on IPv4 interface eth1, 192.168.x.xxx#53
Sep 18 13:33:28 oneday named[6587]: default max-cache-size (33554432) applies

"the working directory is not writable"

에러메시지는 아니지만.. 무엇인지는 잘 모르지만... 하여튼 작업디렉토리에 무언가를 쓸 수 없다는 겁니다. 뭐 Critical도 아니고 Fatal도 아니고.. 또한 네임서버도 잘 움직이고 있으니 특별히 문제가 되지는 않을 듯 하지만 찜찜하네요. 네임서버 환경설정 파일을 살펴볼까요.

less /etc/named.conf
options {
        listen-on port 53 { 192.168.x.xxx; };
#       listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
#       allow-query     { localhost; };
        allow-query     { any; };
        recursion yes;
};
.
.

네... 디렉토리 설정하는 곳이 있네요. /var/named 입니다.
그런데 /var/named 디렉토리를 보시면 중요 파일들은 모두 chroot 밑의 /var/named에 심볼릭 링크가 설정되어 있군요. 아하~ 그렇다면 /var/named 가 아니라 /var/named/chroot/var를 보겠습니다.

# ls -l /var/named/chroot/var
drwxrwx--- 2 named named 4096 2008-08-06 19:08 log
drwxr-x--- 5 root  named 4096 2008-08-06 19:08 named
drwxr-x--- 3 root  named 4096 2003-03-14 08:22 run
drwxrwx--- 2 named named 4096 2003-03-14 08:22 tmp

이런.. named 프로세스는 named유저에 의해 실행되는데... named유저의 소속그룹 named그룹에 대한 쓰기 권한이 설정되어 있지 않네요(아우.. 먼가 말이 복잡하다..)

자 아래와 같은 명령어를 실행하여 문제를 해결하시면 됩니다.

# chmod g+w /var/named/chroot/var/named
또는
# chmod 770 /var/named/chroot/var/named


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Onedayth

TRACKBACK http://linuxwin.com/trackback/34 관련글 쓰기

댓글을 달아 주세요

Linux2008/08/04 17:46
요즈음 회사에서 시간이 좀 남아서요(조금... 한가합니다. ;ㅁ; 누가 보면 어떻하지...) 윈도우 서버에서 사용가능한 이벤트 로그 백업 스크립트를 작성해보았습니다.

리눅스 관련 글이 아니지만 카테고리를 또 새로 만들기는 애매하고 해서... 그냥 여기다가 올립니다.

인터넷에서 찾아보니 몇몇 스크립트가 보이지만 모든 조건을 만족시키는 스크립트는 없어서요..
VBS는 대학교 다닐때 Visual Basic 조금 해본게 다입니다만... 인터넷에서 찾아가며 작성해보았습니다.
여기저기 긁어온 소스들을 수정하고 합쳐서 만든 것이니 당근 카피레프트이고 필요하신 분들은
자유롭게 복사해서 쓰셔도 됩니다.

단.... 이 포스트를 그대로 복사하여 자기 블로그에 올리는 것만큼은 자제해주셔요..

스크립트에서 구현한 기능들은 아래와 같습니다.

  • 이벤트로그의 백업(Application, Security, System)
  • 백업한 이벤트 로그의 압축(zip)
  • 지정일을 초과한 백업파일의 자동삭제

가능하면 에러처리도 잘 해놓고 싶었지만 잘 알지도 못하는 스크립트로 처리하려니 귀찮아서... 생략했습니다.
훗.... 조금 더 삼빡한 방법이나 잘못 처리된 부분, 버그같은 것들을 답글로 남겨주시면 업그레이드 해나갈 생각은 있습니다만.... 과연.. ??

소스는 직접 갖다붙이니 보기 싫어서 그냥 첨부파일로 다운로드 받으실 수 있게 해놓았습니다.


파일을 다운로드 해서 열어보시면(zip파일입니다) 두개의 파일이 나옵니다.

  • event_backup.vbs
  • event_backup.bat

vbs파일은 당연히 스크립트 소스 파일이고 bat 파일은 실행하기 쉽게 작성해놓은 배치파일입니다. 배치파일을 텍스트 에디터로 열어서 아래 변수를 지정해 주시고 윈도우 Task에 등록해 놓으시면 사용가능하리라 생각됩니다.
스크립트 테스트는 Windows 2003서버에서 했습니다. 2000과 2008은 머신이 없어서... ;ㅁ;
참고로 비스타 에서는 시큐리티 제한 때문인지 Security로그 백업이 안되더군요.

@echo off
set ROOTDIR=D:\EventLog
set BINDIR=%ROOTDIR%\bin
set SAVEDIR=%ROOTDIR%\save
set SAVETERM=30

cscript event_backup.vbs

머 딱 보시면 아시리라 생각됩니다만... 간단하게 설명하겠습니다.
디렉토리 구조는 반드시 아래와 같이 해주셔야 합니다.

D:\EventLog+
           +- bin
           +- save

bin디렉토리에 압축파일에 들어있던 두개의 파일을 넣어주시고 save디렉토리를 작성해주시기만 하면 됩니다. 물론 디렉토리명은 자유로이 변경하셔도 됩니다. SAVETERM은 백업파일들의 보존기간입니다. 30일 지정해주시면 스크립트 실행일로부터 30일 이전의 파일들은 자동으로 삭제됩니다. 삭제할때는 파일속성의 Timestamp를 보는 것이 아니라 파일명의 날짜로 계산하도록 하였습니다.

뭐 크게 문제될 부분은 없고 그냥 실무에서도 무난하게 쓰일 정도라고 생각됩니다. 여기에다가 각종 에러처리를 넣어주고 로그파일도 작성하게 만들면 완벽해지겠지만..... 다 할려고 하니 상당히 일이 많아질듯 하여 패스합니다. 쩝...



크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Onedayth

TRACKBACK http://linuxwin.com/trackback/31 관련글 쓰기

댓글을 달아 주세요

Linux2008/03/20 10:04

리눅스를 설치하고 원격에서 접속할 수 있도록 설정을 해주어야 편하게 여러가지 작업을 할 수 있습니다.
바로앞에 콘솔이 있다고 하더라도 해상도 문제도 있고 문자코드셋 때문에라도 터미널 설정을 하는게 좋죠.

기본적으로 telnet이 있고 암호화 통신을 가능하게 해주는 sshd를 가장 많이 씁니다.
이에 대해 자세한 것은 인터넷을 검색해 보시면 더욱 자세한 정보가 있을테니 참고하셔요.

여기서는 sshd를 사용하기 위해 필요한 최소한의 설정에 대해서만 다룹니다.
역시나 기본은 fedora 8에 rpm으로 설치된 버전을 예로 들겠습니다.

fedora에서 ssh 관련 패키지 설정파일들은 "/etc/ssh"에 들어있습니다. 디렉토리 안에는 여러 파일들이 있지만 sshd에 관한 설정은 "sshd_config" 파일을 건드리는 것만으로 충분합니다.

# cd /etc/ssh
# ll
합계 204
-rw------- 1 root root 132839 2007-11-21 04:40 moduli
-rw-r--r-- 1 root root   1955 2007-11-21 04:40 ssh_config
-rw------- 1 root root    672 2008-02-03 22:04 ssh_host_dsa_key
-rw-r--r-- 1 root root    590 2008-02-03 22:04 ssh_host_dsa_key.pub
-rw------- 1 root root    963 2008-02-03 22:04 ssh_host_key
-rw-r--r-- 1 root root    627 2008-02-03 22:04 ssh_host_key.pub
-rw------- 1 root root   1671 2008-02-03 22:04 ssh_host_rsa_key
-rw-r--r-- 1 root root    382 2008-02-03 22:04 ssh_host_rsa_key.pub
-rw------- 1 root root   3643 2008-03-20 09:31 sshd_config
-rw------- 1 root root   3643 2008-03-20 09:31 sshd_config.20080320

ssh_config 파일은 ssh 데몬이 아닌 클라이언트에 대한 설정파일이니 건드릴 필요없고 sshd_config만 수정하면 됩니다. 그리고 항상 위와 같이 설정을 변경하실 때에는 꼭! 백업하는거 잊지 마시구요.

sshd_config파일을 열어보면 많은 항목들이 있지만 몇가지만 수정하면 운영하는데에 특별한 문제는 없습니다. 여기서는 기본적인 설정 몇가지와 포트를 변경하도록 하겠습니다.
포트변경은 인터넷상의 수없이 많은 스크립트 키드들로부터 자신의 리눅스 박스를 지키기 위해 꼭 필요하다고 생각합니다. 실제로 포트 변경하는 것만으로 현재 저의 리눅스 박스에는 ssh접근 기록은 한번도 없었습니다.

OpenBSD sshd_config, v1.75 파일을 기준으로 행수를 기록하였으니 참고하시길 바랍니다.

13:Port 8888
14:AddressFamily inet
15:ListenAddress 192.168.1.1

36:SyslogFacility AUTHPRIV
37:LogLevel DEBUG

42:PermitRootLogin no

위의 설정을 변경하는 것만으로도 일반적인 운영에는 충분합니다. 자 하나씩 살펴볼까요.

13:Port 8888
네, 바로 알 수 있죠 ? Listen 포트를 변경하는 옵션입니다. 기본적으로 22번 포트가 되어 있는데 원하는 포트로 변경하는 것이 정신건강에 좋습니다. 포트를 변경하시면 /etc/services 파일과 방화벽에서 관련 포트 설정 해주시는거 잊으시면 안됩니다.

14:AddressFamily inet
ipv4, ipv6에 대한 옵션입니다. 기본으로 주석처리가 되어 있는데 그렇다면 지정포트에 대해 ipv4, ipv6 두 프로토콜이 Bind하려고 해서 로그에 Bind에러가 기록됩니다. 먼저 ipv4를 bind하고 ipv6가 에러가 나는 거라서 ipv6를 운영하지 않는다면 큰 문제는 없지만 무언가 찜찜하시다면 inet으로 설정해주세요. ipv4에 대해서만 bind합니다.

15:ListenAddress 192.168.1.1
Listen할 아이피를 지정합니다. 서버에 여러개의 NIC와 IP가 존재한다면 어느 NIC에서 Listen할 것인지 결정하는 옵션이죠.  NIC가 하나뿐이라면 신경안쓰셔도 됩니다.

36:SyslogFacility AUTHPRIV
37:LogLevel INFO
로그에 대한 옵션입니다. 기본적으로 syslog에 sshd의 로그를 기록하는데 그에 대한 퍼실리티를 지정해주는 옵션입니다. /etc/syslogd.conf(또는 /etc/rsyslogd.conf) 파일에 authpriv 퍼실리티에 대한 옵션이 제대로 지정되어 있는지 확인해 주세요. 전 그냥 기본값을 사용하고 있기 때문에 /var/log/secure 에 로그를 기록하게 되어 있습니다. 로그 레벨은 INFO를 지정하는 것만으로도 바인드 에러, 접속기록, 접속시도 등 필요한 정보는 모두 기록되니 INFO로 충분하다고 생각합니다.

42:PermitRootLogin no
ssh로 접속할 시 root로 로그인 하지 못하게 하는 옵션입니다. 원격에서 root로 로그인이라... 무섭죠 ? -_-; root라는 아이디는 변경할 수 없는 것이기에 이 옵션을 yes로 해놨을 경우 root에 대해 패스워드를 무한 입력하는 방식으로 언젠가는 뚫릴 수 있습니다. no로 하고 임의의 계정으로 접속한 후 su를 이용하시는게 제일 좋을 듯 하네요.

위 설정이 끝났다면 아래와 같이 sshd데몬을 재시작 합니다.

# /etc/init.d/sshd restart

그리고 지정한 아이피, 지정한 포트로 ssh접속을 시도해서 제대로 연결이 되는지 확인해주세요~

참고 :
방화벽을 이용하시는 분의 경우 포트를 열고 닫을때 조심하셔야 합니다. 작업 순서가 잘못되면 앗.. 하는 순간 연결이 끊겨버립니다. ( --> 두번이나 그런짓을 해버렸어요.. ㅠ.ㅠ)

 

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Onedayth

TRACKBACK http://linuxwin.com/trackback/24 관련글 쓰기

댓글을 달아 주세요

  1. 감사합니다 ㅋㅋ
    루트로 계속 들어오는 녀석들은 이제 안녕이군요!
    집에 도착하면 SSH데몬 띄우겠습니답ㅋ

    2008/03/20 11:19 [ ADDR : EDIT/ DEL : REPLY ]

Linux2008/03/13 12:36
Linux용 방화벽인 iptables에 대해서 문서를 작성해 볼 예정입니다.
인터넷상에 관련 문서는 많이 있지만 체계적으로 정리된 문서가 적고..
제가 이해력이 떨어져서 그런지 활용하기가 좀 어렵더군요.

지금 현재 누군가가 서버에 ftp로 로그인하려고 하는 움직임이 있어서
iptables를 이용해 차단하려고 합니다. +_+

246-colo-bdg1.telkom.net.id

넌 도대체 머하는 놈이냐!! 어제 저녁 7시부터 줄기차게 스크립트 돌리고 있네요. -_-;

리눅스 상에서 iptables를 이용하려면 당연한 이야기이지만 iptables 관련 패키지가 설치되어 있어야 합니다.

# yum list iptables
iptables.i386                            1.3.8-6.fc8            installed

yum으로 확인해본 결과 위 패키지가 설치되어 있네요. +_+

이제 매뉴얼 페이지를 잠깐 보겠습니다.

SYNOPSIS
       iptables [-t table] -[AD] chain rule-specification [options]
       iptables [-t table] -I chain [rulenum] rule-specification [options]
       iptables [-t table] -R chain rulenum rule-specification [options]
       iptables [-t table] -D chain rulenum [options]
       iptables [-t table] -[LFZ] [chain] [options]
       iptables [-t table] -N chain
       iptables [-t table] -X [chain]
       iptables [-t table] -P chain target [options]
       iptables [-t table] -E old-chain-name new-chain-name


포인트는 저거네요........ []로 되어 있는 부분은 생략 가능한 부분이라는거 아시죠 ? 훗;


먼저 Command에 대해서 쭈욱 살펴보겠습니다.

-A, --append chain rule-specification 지정체인에 새로운 룰을 추가
-D, --delete chain rule-specification 지정체인에서 일치하는 첫번째 룰을 삭제
-D, --delete chain rulenum 지정체인에서 특정 룰을 삭제
-I, --insert chain [rulenum] rule-specification 지정체인에 [지정위치에] 새로운 룰을 삽입
-R, --replace chain rulenum rule-specification 지정체인의 [지정위치에] 룰을 교환
-L, --list [chain] 지정체인의 룰 목록을 출력
-F, --flush [chain] 지정체인을 초기화
-Z, --zero [chain] 지정체인의 패킷과 바이트 카운트를 0으로 설정(머지 ?? -0-)
-N, --new-chain chain 새로운 체인 만들기
-X, --delete-chain [chain] 체인 삭제
-P, --policy chain target 지정체인의 정책변경
-E, --rename-chain old-chain new-chain 체인의 이름변경
-h     Help.  도움말 출력

그리고 위 명령어들과 같이 많이 쓰는 옵션들은 아래와 같습니다.
--proto [!]           -p  프로토콜타입을 지정합니다(tcp/udp/icmp/all)
--source [!]         -s  소스 어드레스를 지정합니다(address[/mask])
--destination [!]   -d   타겟 어드레스를 지정합니다(address[/mask])
--in-interface       -i  네트워크 인터페이스를 지정합니다.
--jump                -j  타겟에 대한 룰을 지정합니다(accept/reject/drop)
--numeric            -n  이 옵션을 지정하면 포트번호나 프로토콜 타입들이 숫자로 표시됩니다.
                           (이걸 지정하지 않으면 80번 포트는 http로, 25번 포트는 smtp처럼 표시됩니다)

--source-port         --sport  소스 포트를 지정합니다.
--destination-port    --dport  타겟 포트를 지정합니다.

옵션들은 이외에도 여러가지가 있지만 저도 파악하지 못한 것이 많고 위의 옵션만으로도 일반 운영은 충분히 가능하기에 그냥 빼버렸습니다. -_-;

페도라를 기준으로 해서 다음의 명령으로 현재 iptables의 상태를 파악할 수 있습니다.
# /etc/init.d/iptables status
테이블: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

현재 3개의 기본 체인(이 3개의 체인은 삭제하거나 변경할 수 없습니다)이 있고 아무런 룰도 등록되어 있지 않네요. 자 그럼 기본서비스를 등록해보도록 하겠습니다. 저는 현재 웹서버와 메일 수신서버 그리고 ftp를 공개하고 있으니 이것들을 등록해보도록 할게요.
# iptables -A INPUT -p TCP --dport 80 -j ACCEPT (http 허가)
# iptables -A INPUT -p TCP --dport 443 -j ACCEPT (https 허가)
# iptables -A INPUT -p TCP --dport 25 -j ACCEPT (smtp 허가)
# iptables -A INPUT -p TCP --dport 20:21 -j ACCEPT (ftp, ftp-data 허가)

자 등록이 끝났습니다. 그런데 무언가 허전하지 않나요 ? 네, 맞습니다. 위 서비스 외에는 모든 접속을 불허하는 룰이 있어야겠지요. 일부 상용 제품에선 각 체인(용어는 틀리겠지만요)의 마지막에 "모든 접속 불허"라는 룰이 보이진 않지만 자동으로 지정되기도 하는데 iptables에는 그런게 없는듯 하네요.

# iptables -A INPUT -p TCP --dport 1:30000 -j DROP

이것으로 일단 기본 등록은 끝났습니다. 위에서 포트를 1:30000으로 지정하면 1번부터 30000번까지의 포트를 한번에 지정할 수 있습니다. 그럼 다시한번 상황을 살펴볼까요 ?
# /etc/init.d/iptables status
테이블: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:20
6    DROP         tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpts:1:30000

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

네.. 이쁘게 등록이 잘 되었네요. +_+ 방화벽은 기본적으로 등록된 룰을 위에서부터 적용시키기 때문에 순서에 유의하셔야 합니다. 만약 잘못해서 DROP 밑에 룰이 추가된다면 그 룰은 제대로 동작하지 않으니 주의하세요.
참 하나가 빠졌네요... 서버에 계속 ftp접속 시도하던 호스트를 조사한 결과 인도 자카르타의 IP로 확인되었습니다. 호스트명 자체는 dns에 등록되어 있지 않은지라 어쩔 수 없이 같은 대역에 등록되어 있는 24bit를 모두 블록 시키겠습니다.

# iptables -I INPUT 4 -p TCP -s 202.134.0.xxx/24 --dport 20:21 -j REJECT

네 이번에는 맨끝에 추가하는 append가 아닌 중간에 숫자를 지정하여 insert로 룰을 설정하였습니다. 또한 drop이 아닌 reject를 설정함으로서 넌 내가 거부하고 있어!! 라는 것을 티내고 있는 중입니다. ^^;

참고로 iptables명령어를 사용하면 아래와 같이 나오고 init.d의 스크립트를 이용하면 -n이 적용된 결과가 표시됩니다.
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
REJECT      tcp  --  202.134.0.xxx/24    anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data
DROP       tcp  --  anywhere             anywhere            tcp dpts:tcpmux:30000

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

이제 설정이 모두 끝났는데 이걸로 끝일까요 ? 아닙니다.. 이상태에서 재부팅을 하거나 iptables 서비스를 정지시키거나 하면 등록된 정보들은 모두 날아가버립니다. 메모리에만 등록되어 있는 상태이기 때문이죠. 아래 명령어를 실행시켜 등록한 룰을 하드디스크에 저장하도록 합시다.
# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK ]

이렇게 해서 앞으로 서비스를 재시작 하거나 재부팅을 해도 설정한 룰이 사라지지 않고 제대로 동작해줄거라 생각됩니다. 관심있으신 분은 /etc/sysconfig 디렉토리 밑에 있는 iptables, iptables-config 파일들을 살펴보시는 것도 좋겠네요.

다음에 시간이 나면 설정파일등에 대해서 또한번 다루어보도록 하겠습니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Onedayth

TRACKBACK http://linuxwin.com/trackback/20 관련글 쓰기

댓글을 달아 주세요

  1. 내 집에서 돌리는 서버에는 ssh 줄기차게...
    걍 로그파일만 구경만 하고 있었는데 나도 막아볼까 -ㅅ-;

    집안 대청소 했더니 (화장실 위주로) 온몸이 뻐근... 게다가 상 치르냐고 3일 연속 큰절만 했더니 온몸이 부들부들...

    2008/03/13 22:59 [ ADDR : EDIT/ DEL : REPLY ]
    • Oneday

      어.. 큰일치뤘다야... 그리고 ssh같은거는 포트를 바꿔버려.. 난 포트번호 바꿔서 비밀리에 운영중... ㅋㅋㅋ

      2008/03/14 00:26 [ ADDR : EDIT/ DEL ]
  2. 데이야 근데 테터툴즈에서 파일 업로드가 안되는데 어디 손봐야해?
    파일용량 제한 이런거 관계없이 아예 파일 업로드가 종료되지 않아..

    2008/03/16 14:17 [ ADDR : EDIT/ DEL : REPLY ]
    • Oneday

      훔.. 그건 먼가 이상한데 ? ㅡㅡ?
      첨부터 무언가 설정이 잘못된거 아녀 ?

      2008/03/17 18:50 [ ADDR : EDIT/ DEL ]

Linux2008/02/24 04:27
현재 페도라를 이용해서 서버를 운영중입니다.
그리고 2월 21일에 yum 업데이트 체크를 한결과 pam관련 업데이트가 보여서
낼름 실행하였습니다.

Feb 21 11:52:28 Updated: pam - 0.99.8.1-17.fc8.i386
Feb 21 11:52:42 Updated: pam-devel - 0.99.8.1-17.fc8.i386

그런데 업데이트를 한 후에 알고보니 아래와 같은 에러메시지가 발생하면서 cron에 등록해놓은
스크립트들이 죄다 에러가 뜨고 있더군요.

/var/log/cron
Feb 23 20:01:01 oneday crond[10693]: CRON (root): failed to open PAM security session: Module is unknown
Feb 23 20:40:01 oneday crond[10733]: CRON (root): failed to open PAM security session: Module is unknown
Feb 23 21:01:01 oneday crond[10734]: CRON (root): failed to open PAM security session: Module is unknown
Feb 23 21:40:01 oneday crond[10758]: CRON (root): failed to open PAM security session: Module is unknown
Feb 23 22:01:01 oneday crond[10765]: CRON (root): failed to open PAM security session: Module is unknown



그리고 인증관련 로그파일에서도 아래와 같은 에러가 발생하고 있었습니다.
/var/log/secure
Feb 24 02:01:01 oneday crond[11027]: PAM unable to dlopen(/lib/security/pam_access.so)
Feb 24 02:01:01 oneday crond[11027]: PAM [error: /lib/libpam.so.0: version `LIBPAM_MODUTIL_1.1' not found (required by /lib/security/pam_access.so)]
Feb 24 02:01:01 oneday crond[11027]: PAM adding faulty module: /lib/security/pam_access.so
Feb 24 02:01:01 oneday crond[11027]: PAM unable to dlopen(/lib/security/pam_limits.so)
Feb 24 02:01:01 oneday crond[11027]: PAM [error: /lib/libpam.so.0: version `LIBPAM_MODUTIL_1.1' not found (required by /lib/security/pam_limits.so)]
Feb 24 02:01:01 oneday crond[11027]: PAM adding faulty module: /lib/security/pam_limits.so



위와 같은 에러들이 스크립트 실행시간에 로깅되어 있었습니다.

물론 에러가 발생하면서 cron에 등록된 스크립들은 전혀 실행이 안되고 있었습니다.
결국 이틀간 백업이 안되어 있더군요. ;ㅁ;

해결방법은 간단합니다. cron데몬을 재실행 한 결과 에러없이 스크립트들이 실행되는 것을 확인하였습니다.
페도라 기준으로 아래와 같은 명령을 실행하는 것으로 해결 가능합니다.

[root@localhost]# /etc/init.d/crond restart

yum업데이트 하였을때 기억은 안나지만 특별히 재부팅 해야한다는 메시지는 본 적 없는 듯 한데....
이렇게 문제가 발생하였네요..

원인은 pam인지 cron인지 잘 모르겠지만 새로이 갱신된 pam관련 파일들을 cron쪽에서 인식을 제대로 못한 듯 합니다.

특별히 로그감시 같은 것은 생각하지 않았는데 결국 스크립트를 하나 짜야할 듯 합니다.
중요 로그파일에서 fail, error 등등의 문자열이 있으면 알려주는 것으로요.

제일 좋은 방법은 메일로 통지해주는 것인데 ISP에서 25번 포트를 막아놓는 바람에 곤란하네요.
쯔압..

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Onedayth

TRACKBACK http://linuxwin.com/trackback/6 관련글 쓰기

댓글을 달아 주세요

  1. Oneday

    Feb 27 09:38:25 Updated: pam - 0.99.8.1-17.1.fc8.i386
    Feb 27 09:38:38 Updated: pam-devel - 0.99.8.1-17.1.fc8.i386

    2월 27일 또다시 패키지가 업데이트 되었습니다.
    이번에는 업데이트 후 바로 cron을 restart하였기 때문에 위의 문제가 다시 발생하고 있는지는 확인하지 못하였습니다. +_+

    2008/02/28 13:30 [ ADDR : EDIT/ DEL : REPLY ]