[보안] 리눅스 서버 설치후 기본 보안 처리(아랑)

리눅스 서버 설치후 기본 보안 처리

                             작성자 : 서진우 (alang@sysmng.com)

————————————————————————-

——

리눅스 서버를 설치후 기본적으로 서버에 보안 설정을 해 두어야 한다.

그렇지 않을 경우 일반 서버 환경에 맞지 않기 때문에 보안에 허술한 부분을

통해 해킹의 우려가 있다. 서버설치시 초기에 고려해야할 보안 설정 부분이다.

1. Xserver 를 제외한 서버에 필요한 최소 팻키지로 시스템 운영체제를 설치한다.

   그런뒤 현재 설치된 배포판의 패키지 중에서 보안에 문제가 있어서 업그레이드

   된 팻키지가 나왔을 경우 모두 팻키지를 업그레이드 시킨다.

   (Redhat 7.1 경우 : xinetd-2.3.x 이상,sendmail-8.11.6,kernel-2.4.12)

2. 설치 완료후 필요없는 데몬을 죽인다. portmap/identd/atd/lpd/gpm/xfs등 삭제

3. /etc/rc.d/rc3.d 에 S로 실행되는 데몬중에 불필요한것을 제거한다.

   (ntsysv 를 통해 Level 3 로 실행될때 초기 실행 데몬 종류를 선택한다.

    crond/named/network/named/sendmail/proftpd/sshd/telnet/syslog 등 시스템

    에서 꼭 필요한 서비스만 초기 오픈 시켜 놓는다.

4. /etc/xinetd.d 디렉토리 안의 xinetd 제어 데몬 설정중 불필요한것들을 지운다.

   (telnet,pop3 정도를 제외한 나머지..)

# rm -f /etc/xinetd.d/chargen*

# rm -f /etc/xinetd.d/daytime*

# rm -f /etc/xinetd.d/echo*

# rm -f /etc/xinetd.d/finger*

# rm -f /etc/xinetd.d/ntalk*

# rm -f /etc/xinetd.d/r*

# rm -f /etc/xinetd.d/talk*

# rm -f /etc/xinetd.d/time*

5. /etc/passwd 와 /etc/group 에서 불필요한 계정및 그룹을 삭제한다.

# userdel adm

# userdel lp

# userdel sync

# userdel shutdown

# userdel halt

# userdel news

# userdel uucp

# userdel operator

# userdel games

# userdel gopher

# userdel ftp

# groupdel adm

# groupdel lp

# groupdel news

# groupdel uucp

# groupdel games

# groupdel dip

# groupdel pppusers

# groupdel slipusers

6. 불필요한 명령어 및 설정파일의 파일권한을 변경한다.

chmod 700 /usr/bin/finger

chmod 700 /usr/bin/nslookup

chmod 700 /usr/bin/gcc

chmod 700 /usr/bin/cc

chmod 700 /usr/bin/suidperl

chmod 700 /usr/bin/whereis

chmod 700 /usr/bin/sperl5.6.0

chmod 700 /usr/bin/c++

chmod 700 /usr/bin/make

chmod 700 /usr/bin/finger

chmod 700 /usr/bin/pstree

chmod 700 /usr/bin/rlog

chmod 700 /usr/bin/rlogin

chmod 700 /bin/mail

chmod 700 /bin/ps

chmod 700 /bin/mount

chmod 700 /bin/umount

chattr +i /etc/fstab

7. 시스템 관리자용 명령어를 그룹별 허용이 되도록 설정한다.

# chmod 750 /bin/ps

# chmod 750 /bin/netstat

# chmod 750 /bin/dmesg

# chmod 750 /bin/df

# chmod 750 /usr/bin/w

# chmod 750 /usr/bin/who

# chmod 750 /usr/bin/last

# chmod 750 /usr/bin/top

# chmod 750 /usr/bin/lsof

# chgrp wheel /bin/ps

# chgrp wheel /bin/netstat

# chgrp wheel /bin/dmesg

# chgrp wheel /bin/df

# chgrp wheel /usr/bin/w

# chgrp wheel /usr/bin/who

# chgrp wheel /usr/bin/last

# chgrp wheel /usr/bin/top

# chgrp wheel /usr/bin/lsof

/etc/group 에 wheel 에 관리자용 일반 계정을 포함한다.

wheel:x:10:root,kobis 와 같이…

8. setuid,setgid 파일을 점검한다.

# find / -type f \\( -perm -4000 -o -perm -2000 \\)

su,passwd,sendmail 을 제외한 나머지 명령어에 s 권한을 없앤다.

su 명령은 wheel 그룹에 포함시키서 특정 관리자 계정에서만 사용

할수 있도록 한다.

9. 시스템 전체 디렉토리 퍼미션을 조정한다.

# chmod 711 /

# chmod 711 /home

# chmod 711 /var

# chmod 711 /var/log

# chmod 711 /etc

# chmod 700 /root

/home 밑에 웹서비스 계정들의 홈디렉토리 퍼미션을 710 에 nobody 권한으로

추가한다.

[root@zzang911 /home]# ls -al

drwx–x—   62 alang    nobody        8192 12월  3 09:12 alang/

drwx–x—   10 design   nobody        4096  9월 21 00:00 design/

drwx–x—    6 kobis    nobody        4096 11월 30 16:00 kobis/

10. nmap,nc,netstat 등을 이용해서 시스템의 열린 포트를 점검한다.

# nmap localhost -p 1-65535

# nc -w 3 -v -z localhost 1-65535

# netstat -ant | grep LISTEN

21/tcp     open        ftp

22/tcp     open        ssh

23/tcp     open        telnet

25/tcp     open        smtp

53/tcp     open        domain

80/tcp     open        http

3306/tcp   open        mysql

11. /etc/security/limits.conf 를 이용한 계별 System Resource 자원의 제한

*       hard    rss         10000  # 사용메모리 10M 로 제한

*       soft    nproc       20     # 생성가능 프로세서 20개 제한

kobis   hard    maxlogins   3      # kobis 계정 텔넷접속을 3개로 제한

12. 일반 telnet 사용자 history 감시하기

12.1환경조정

# mkdir /……/history

# touch /……/history/user_history

# adduser 특정관리계정   : 그냥 admin 이라 하자..

# chmod 702 /……../history/user_history

12.2. 설정

# vi /etc/profile

제일 밑줄에 다음 구문 추가..

if [ $LOGNAME != “admin” ]

then

HISTFILE=/………/history/user_history

TMOUT=200

echo –

n “===================================================================

userhistory 로그인 ID: $LOGNAME 접속시간 : `/bin/date`

===================================================================

” >> /……/history/user_history

fi

# vi /root/.bashrc

제일 밑에 다음 구문 추가 ..

HISTFILE=/root/.bash_history

TMOUT=-1

이제 일반 접속 계정으로 접속을 하면…

/………./history/user_history 파일에 history 가 남게 됩니다.

13. TCP Wrapper 을 이용하여 tcp 프로토콜을 이용한 접속을 제한한다.

# vi /etc/hosts.deny

————————————————————————-



in.telnetd : ALL : twist ( /etc/host-check Y Y %a %c %d %h %n %p %s %u ) &

sshd : sshd : ALL EXCEPT 211.47.64.

# vi /etc/host-check

————————————————————————-



#!/bin/sh

################################  변수정의부문

# 메일 수신자

mailto=alang at sysmng.com

# 화면출력 여부, 메일전송 여부

dsp=$1; msg=$2

# 접속자 정보 등

a=$3; c=$4; d=$5; h=$6; n=$7; p=$8; s=$9; u=$10

# 현재 시간

time=`date`

# 접속시도자 소속 서버의 finger 정보

finger=`/usr/bin/finger -l @$h 2> /dev/null`

################################  화면 출력부문

if [ $dsp = Y ]

    then

echo ”

                      ===================================

                           접속이 허용되지 않습니다.

                      ===================================

               Access Time             : $time

               Client host address     : $a

               Client information      : $c

               Client host name(or IP) : $h

               Client host name        : $n

               Client user name        : $u

        ”

fi

################################  메일 송신부문

if [ $msg = Y ]

    then

/bin/echo ”

                        ===============================

                              접속 거부자 상세정보

                        ===============================

         Access Time                    : $time

         Access client host address     : $a

         Access client information      : $c

         The daemon process name        : $d

         Access client host name(or IP) : $h

         Access client host name        : $n

         The daemon process id          : $p

         Server information             : $s

         Access client user name        : $u

                   ————————————–

                       Access client finger information

                   ————————————–

                            $finger

              ————————————————

” | \\

      /bin/mail -s “tcp_wrapper report [$d]” $mailto

fi

# vi /etc/hosts.allow

————————————————————————-



in.telnetd : localhost 127.0.0.1 211.47.64.145

sshd : localhost 127.0.0.1 211.47.64.145

14. sendmail 보안 설정

먼저 보안에 문제 있는 기본 팻키지에서 패안 패치된 팻키지로 업그레이드 한다.

(Redhat 7.1 : sendmail-8.11.2  –> sendmail-8.11.6 )

14.1 Sendmail 의 Third Party Relay 허용 여부 점검

/etc/mail/sendmail.cf 파일 설정 확인

# anything else is bogus

R$*                     $#error $@ 5.7.1 $: “550 Relaying denied”

위 부분을 확인하여 Relay 가 허용되지 않을려면 주석 처리가 되어져 있지 않아야

한다. 그런후..

/etc/mail/access 에서 relay 허가 대역을 설정한다.

spammer at aol.com     REJECT

aol.com             REJECT

abc.com             REJECT

111.111             REJECT

211.47.64           RELAY

# makemap hash /etc/mail/access < /etc/mail/access

로 access.db 파일을 갱신해 준다.

마지막으로 http://www.whchang.com/netprg/is-relay.pl 에서 relay 여부 확인

가능

14.2 SMTP 서버에서 보내는 양 제한 설정

/etc/mail/sendmail.cf 파일에서 ..

# maximum message size

O MaxMessageSize=2048000

이부분의 설정을 수정하면 된다. 여기서의 단위는 byte 이며 위의 설정은 2M

이상 크기의 메일은 이 서버를 통해 보낼수 없다는 것이다.

14.3 POP 서버의 받는양 제한

Mlocal,     P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9,

S=EnvFromL/HdrFromL,

R=EnvToL/HdrToL, M=2048000

위와 같이 M=2048000 부분을 추가해 주면 된다.

15. apache 웹서버에서의보안설정

15.1 특정 IP 별로 접근 제어 하는 방법

httpd.conf 에서 ..

<Directory /home/xxx/www>

    Order deny,allow

    Deny from all

    Allow from xxx.xxx.xxx.xxx (접속 허용 IP)

</Directory>

와 같이 설정하여 제어 가능하다.

15.2 특정 디렉토리에 인증을 거는 방법

httpd.conf 에서 AllowOverride All 로 설정되어져 있어야 적용 가능하다.

A. 먼저 .htaccess 파일을 하나 만들어야 합니다. 암호인증을 걸고자 하는

디렉토리로 이동하셔서 편집기를 사용하여 .htaccess 라는 파일을 만듭

니다. 파일의 내용은 다음과 같습니다.

$ vi .htaccess

———————————————————–

AuthName “타이틀명을 적으세요”

AuthType Basic

AuthUserFile /암호를 걸고자 하는 디렉토리 절대경로/.htpasswd

AuthGroupFile /dev/null

ErrorDocument 401

<Limit GET POST>

require valid-user

</Limit>

———————————————————–

B. test 라는 아이디로 인증 과정을 거쳐야만 웹상에서 디렉토리에

들어갈수 있는 경우에 다음과 같이 합니다.

$ htpasswd -c .htpasswd test

Adding password for test

New password:

Re-type new password:

위옜 같이 htpasswd -c .htpasswd <생성하고자 하는 아이디> 라고

해주시면 패스워드를 물어보게 됩니다.

-c 옵션은 최초 사용자 생성시만 붙입니다. 그 다음 생성아이디는

그냥 -c 옵션은 빼고 htpasswd .htpasswd <ID> 라고 해주시면 됩니

다…

부과적인 설명으로 IP 주소별로 디렉토리 인증을 할수 있다.

방법은 .htaccess 파일을 다음과 같이 만들어 준다.

————————————————————–

AuthName “타이틀명을 적으세요”

AuthType Basic

AuthUserFile /암호를 걸고자 하는 디렉토리 절대경로/.htpasswd

AuthGroupFile /dev/null

ErrorDocument 401

<Limit GET POST>

require valid-user

Satisfy any

order deny,allow

allow from 211.47.64( 접속허가된 IP 대역 )

allow from 211.47.64.145( 접속허가된 IP 주소 )

deny from all

</Limit>

————————————————————–

여기서 주의할 설정은 Satisfy 옵션에 주의 해야 한다.

Satisfy any 는 ID와 IP 중 어느 하나만 해당하면 인증이 된다.

Satisfy all 은 ID,IP 둘다 적용이 되어야지만 인증이 된다.

15.2 Webzip,Teleport,wget 등 웹소스 긁어가는 프로그램 차단하기

httpd.conf 에서..

BrowserMatch “WebZIP” go_out

BrowserMatch “Teleport” go_out

BrowserMatch “GetRight” go_out

BrowserMatch “Wget” go_out

와 같이 설정을 추가 하고..

<Directory “/home”>

    Options FollowSymLinks ExecCGI

    AllowOverride All

    Order allow,deny

    Allow from all

    Deny from env=go_out

    Deny from export=go_out

</Directory>

15.3 클라이언트 브라우저 별로 접속 차단하기

BrowserMatch “MSIE” mise

<Directory “/home”>

    Options FollowSymLinks ExecCGI

    AllowOverride All

    Order allow,deny

    Allow from all

    Deny from env=mise

</Directory>

15.4 특정 사이트에서 현 서버의 자료 무단 링크 금지하기

  SetEnvIFNoCase Referer “superboard” link_deny

  SetEnvIFNoCase Referer “hihome” link_deny

  SetEnvIFNoCase Referer “eznara” link_deny

  SetEnvIFNoCase Referer “\\.to” link_deny

  SetEnvIFNoCase Referer “\\.cc” link_deny

  SetEnvIFNoCase Referer “\\.ro” link_deny

  SetEnvIFNoCase Referer “\\.ky” link_deny

  SetEnvIFNoCase Referer “\\.ru” link_deny

  SetEnvIFNoCase Referer “\\.ly” link_deny

  SetEnvIFNoCase Referer “cjb” link_deny

  SetEnvIFNoCase Referer “interpia98” link_deny

  SetEnvIFNoCase Referer “yakult” link_deny

  SetEnvIFNoCase Referer “dreamwiz” link_deny

  SetEnvIFNoCase Referer “warez” link_deny

  SetEnvIFNoCase Referer “lycos” link_deny

  SetEnvIFNoCase Referer “netian” link_deny

  SetEnvIFNoCase Referer “daum” link_deny

  SetEnvIFNoCase Referer “hanmir” link_deny

<FilesMatch “\\.(avi|swf|mpe?g|zip|rar|[a-zA-Z0-9][0-9][0-9]|mp[1-9]

|arj|asf|exe)$”>

  Order allow,deny

  allow from all

  deny from env=link_deny

  deny from env=go_out

</FilesMatch>

  SetEnvIFNoCase Referer “http://(.*)\\.superboard\\.com/” link_deny

  SetEnvIFNoCase Referer “http://(.*)\\.cjb\\.net/” link_deny

  SetEnvIFNoCase Referer “http://(.*)\\.eznara\\.com/” link_deny

  SetEnvIFNoCase Referer “http://korean21\\.cc/” link_deny

  SetEnvIFNoCase Referer “http://(.*)\\.wo\\.to/” link_deny

  SetEnvIFNoCase Referer “http://(.*)\\.interpia98\\.net/” link_deny

  SetEnvIFNoCase Referer “http://(.*)\\.yakultgo\\.net/” link_deny

    

<FilesMatch “\\.(avi|mpe?g|zip|rar|r0*|a0*|mp3|arj|asf|swf|exe)$”>

  Order allow,deny

  allow from all

  deny from env=link_deny

</FilesMatch>

위설정은 superboard,hihome,eznara,dreamwiz,lycos,….등의 사이트에서 현 시스템

에 있는 avi,swf,zip,mpeg…등의 파일을 무단으로 링크거는것을 금지시키는 설정이다.

15.5 특정 사이트에서만 링크 가능하게 하기..즉 다른 사이트에선 링크 금지

    

<VirtualHost xxx.xxx.xxx.xxx>

    ServerAdmin webmaster at

sysmng.com

    DocumentRoot /home/xxxx/www

    ServerName sysmng.com

    SetEnvIf Referer sysmng\\.com go_in

    SetEnvIf Referer www\\.sysmng\\.com go_in

    SetEnvIf Referer ^$ go_in

  <FilesMatch “.(mpg|asf|wmv|swf)$”>

    Order Deny,Allow

    Allow from env=go_in

    Deny from all

  </FilesMatch>

</VirtualHost>

와 같이 버추얼 설정에서 /home/xxxx/www 안에 있는 mpg,asf,wmv,swf 파일은

반드시 sysmng.com 사이트에서만 링크가 가능하다.

15.6 apache 웹서버 버젼 정보 숨기기

httpd.conf 에 ServerTokens Prod 라는 옵션 추가

ServerTokens Prod[uctOnly]   결과 : Server : Apache

ServerTokens Min[imal]       결과 : Server : Apache/1.3.x

ServerTokens OS              결과 : Server : Apache/1.3.x (Unix)

ServerTokens Full            결과 : Server : Apache/1.3.x (Unix) PHP 4.0.5…

이런 버젼 확인은 telnet xxx.xxx.xxx.xxx 80 과 같이 80 번 포트로 접속하면 알수

있다.

16. Proftp 보안 관련

16.1 root 계정 접속 금지 방법

ftp 에서 root 접속은 보안상 금지하는 편이다. root 권한 접속 금지 방법은

기본 설정이 되어져 있다.. 설정 방법은 다음과 같다.

/etc/proftpd/conf/proftpd.conf 설정 파일에서

RootLogin off

DefaultRoot                     ~

와 같이 설정을 추가 혹은 변경 (기본설정은 위와 같이 되어져 있다.) 하고

/etc/proftpd/conf/ftpusers 파일에다가 root 계정을 추가 해주면 된다.

# vi /etc/proftpd/conf/ftpusers

—————————————————

root

bin

daemon

adm

lp

sync

shutdown

halt

.

.

반대로 root 접속을 허가할 경우는 …

RootLogin on 으로 변경하고

    

ftpusers 파일에 root 를 제거해주고 proftpd 데몬을 재시작하면 된다.

  

16.2 기본 보안 환경 설정

/etc/proftpd/conf/proftpd.conf 설정 파일에서

<Global>

Umask               022

MaxClients            9

MaxClientsPerHost       3       “Sorry, one connection allow per one host”

MaxHostsPerUser       3 “Sorry, one hosts allow per one user”

</Global>

<Global> 은 전체 환경 설정부분인데..여기서

Umask 는 down/upload 되어지는 파일의 퍼미션을 결정한다. 022 로 되어져 있을

경우 기본적으로 644 퍼미션의 파일 권한을 가지게 된다.

MaxClients 설정은 ftp 서버에 접속할수 있는 전체 접속자 수를 만한다.

MaxClientsPerHost 설정은 같은 IP를 가지는 원격지에서 동시 접속 가능한 수를

말한다.

MaxHostsPerUser 는 같은 ftp 접속 아이디를 가지고 다중접속 할수 있는 수를

말한다.

MaxInstances            10

위 설정은 Dos 공격을 막기 위해 자식 Process 의 Maximun number 를 조정한다.

16.3 특정 아이피에서만 접속 가능하게 만들기

<Limit LOGIN>

Order allow,deny

Allow from 211.47.67.

Deny from all

</Limit>

위의 설정은 211.47.67 대역에서만 본 시스템에 ftp 접속 가능하고 다른 곳에서

는 접속이 거부 된다.

17. log 서버 설정하기

일반 서버에서 ..

/etc/syslog.conf 파일에서 ..

#authpriv.*     /var/log/seure    를 앞과 같이 주석 처리 하고 ..

authpriv.*      @log.sysmn.gcom   으로 수정한다.

/etc/rc.d/init.d/syslog restart   로 데몬을 재가동 시켜 주고..

로그 서버에서 ..

/etc/rc.d/init.d/syslog stop 으로 데몬을 죽이고..

/sbin/syslogd -m 0 -r -h 를 실행한다.

이러면 시스템의 모든 접속 인증 결과가로그서버의 /var/log/securi 파일안에

저장되어진다.

18. Syn Flooding 공격 방지

먼저 kernel 의 sysctl cooking 기능을 켜주고 컴파일후 ..

sysctl -w net.ipv4.tcp_max_syn_backlog=1024

sysctl -w net.ipv4.tcp_syncookies=1

sysctl -w net.ipv4.icmp_destunreach_rate=1

sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

sysctl -w net.ipv4.icmp_echoreply_rate=1

sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1

sysctl -w net.ipv4.icmp_paramprob_rate=1

sysctl -w net.ipv4.icmp_timeexceed_rate=1

sysctl -w net.ipv4.igmp_max_memberships=1

sysctl -w net.ipv4.ip_default_ttl=64

sysctl -w net.ipv4.ip_forward=0

sysctl -w net.ipv4.ipfrag_time=15

sysctl -w net.ipv4.tcp_syn_retries=3

sysctl -w net.ipv4.tcp_retries1=3

sysctl -w net.ipv4.tcp_retries2=7

sysctl -w net.ipv4.conf.eth0.rp_filter=2

sysctl -w net.ipv4.conf.lo.rp_filter=2

susctl -w net.ipv4.conf.default.rp_filter=2

sysctl -w net.ipv4.conf.default.rp_filter=2

sysctl -w net.ipv4.conf.all.rp_filter=2

sysctl -w net.ipv4.conf.eth0.accept_redirects=0

sysctl -w net.ipv4.conf.lo.accept_redirects=0

sysctl -w net.ipv4.conf.default.accept_redirects=0

sysctl -w net.ipv4.conf.all.accept_redirects=0

sysctl -w net.ipv4.conf.eth0.accept_source_route=0

sysctl -w net.ipv4.conf.lo.accept_source_route=0

sysctl -w net.ipv4.conf.default.accept_source_route=0

sysctl -w net.ipv4.conf.all.accept_source_route=0

sysctl -w net.ipv4.conf.eth0.bootp_relay=0

sysctl -w net.ipv4.conf.lo.bootp_relay=0

sysctl -w net.ipv4.conf.default.bootp_relay=0

sysctl -w net.ipv4.conf.all.bootp_relay=0

sysctl -w net.ipv4.conf.eth0.log_martians=1

sysctl -w net.ipv4.conf.lo.log_martians=1

sysctl -w net.ipv4.conf.default.log_martians=1

sysctl -w net.ipv4.conf.all.log_martians=1

sysctl -w net.ipv4.conf.eth0.secure_redirects=0

sysctl -w net.ipv4.conf.lo.secure_redirects=0

sysctl -w net.ipv4.conf.default.secure_redirects=0

sysctl -w net.ipv4.conf.all.secure_redirects=0

sysctl -w net.ipv4.tcp_keepalive_time=30

sysctl -w net.ipv4.tcp_fin_timeout=30

sysctl -w net.ipv4.tcp_tw_buckets=1440000

sysctl -w net.ipv4.tcp_tw_buckets=1440000

sysctl -w net.ipv4.tcp_keepalive_probes=2

sysctl -w net.ipv4.tcp_max_ka_probes=100

설정을 적용시킨다. 간단히 스크립터 파일을 만들어서 실행해도 되고..

/etc/rc.d/rc.local 파일에 차례로 적어주어 시스템 시작시 적용시켜도

된다.

19. 파일 무결성 체크 프로그램 (Fcheck 설치..)

지금까지의 시스템 설치후 기본 보안에 신경을 써야 할부분에 대해서 알아보았고

마지막으로 현재 기본 보안 처리된 시스템의 무결성에 대해 앞으로 감시해서 유지

해야 할것이다. 무결성 체크 프로그램으로는 대표적인게 Tripwire 가 있다.

하지만 여기서 소개하는 Fcheck 는 가볍고 간단하면서 Tripwire 의 역활을 충분히

할수 있다.

먼저 프로그램을 다운 받도록 하자.

http://www.geocities.com/fcheck2000/

가면 최신 프로그램이 있을것이다. 다운을 받고 /usr/local 및에 둔다.

압축을 풀고..fcheck,fcheck.cfg 파일의 설정값을 몇개 수정하자.

# tar xzvf FCheck_2.07.59.tar.gz

# cd fcheck

# vi fcheck

——————————————————————-

.

.

###############################################################

##############

#                                                                           #

#                 User modifiable variable definitions:                     #

#                                                                           #

###############################################################

##############

# This should be passed through the command line, but hard coding still works

$config=”/usr/local/fcheck/fcheck.cfg”;

—————————————– 이부분을 시스템 환경에 맞게 수정

——————————————————————-

# vi fcheck.cfg

——————————————————————-

Directory   = /etc/

Directory   = /bin/

Directory   = /usr/bin/

Directory   = /sbin/

Directory   = /usr/sbin/

Directory   = /usr/local/bin/

Directory   = /usr/local/sbin/

Directory   = /lib/

Directory   = /usr/lib/

Directory   = /usr/local/lib/

#

# Directory 설정은 fcheck 가 체크할 파일들이 들어 있는 디렉토리로 시스템에

# 중요한 명령어나 설정파일등이 있는 곳을 정해 주면 된다.

#

Exclusion      = /etc/passwd

Exclusion       = /etc/shadow

#

# Exclusion 설정은 Directory 설정에서 정한 디렉토리중 자주 변경이 되는 파일

# 이 있어서 체크때마다 걸리므로 체크 생략을 요하는 파일을 정해 주면 된다.

# 호스팅 업체나 기타 자주 사용자를 추가하는 서버라면 위와 같이 해주면 된다.

#

DataBase        = /usr/local/fcheck/data/data.dbf

#

# DataBase 설정은 리눅스 파일 정보를 DB 파일로 저장해서 다음 체크시 비교

# 분석할때 사용되어진다.

#

TimeZone        = GMT-9

#

# 한국 시간을 적용한다. GMT-9

#

#File   = /usr/local/admtools/logs/sol.dbf

File 설정은 필요 없으니 주석 처리 해준다.

기타 여러 설정값이 있으나 크게 작동하는데 영향을 주지 않는다.기본값을 적용

한다.

이와 같이 적용후 /usr/local/fcheck/data 디렉토리를 만들어 준다.

# mkdir /usr/local/fcheck/data

# /usr/local/fcheck/fcheck -ac

이와 같이 fcheck -ac 로 파일 무결성 체크를 시작한다. 그럼 data 디렉토리 안

에 data.dbf 파일이 생성되어 진다.

이제 Directory 설정에 해당하는 디렉토리 안에다가 파일을 하나 생성하고 재대

로 점검을 하는지 테스트를 하여 보자..

# touch /etc/test

# /usr/local/fcheck/fcheck -a

그럼 아마 아래와 같은 결과를 출력할것이다.

PROGRESS: validating integrity of /etc/

STATUS:

        ADDITION: [zzang911.net] /etc/test

        Inode   Permissons      Size    Created On

        19508   -rw-r–r–      0       Sep 19 20:13 2001

자 이제 이 명령어를 이용하여 주기적으로 시스템 파일 무결성을 체크하고 관리

자에게 통보하는 프로그램을 만들어 보도록 하자.

# vi fcheck.sh

————————————————————————-



#!/bin/sh

CHECK=`/usr/local/fcheck/fcheck -a | grep Inode`

HOSTNAME=`hostname`

if [ -n “$CHECK” ]

    then

    /usr/local/fcheck/fcheck -a > fcheck_result

    mail -s “$HOSTNAME File 무결성 체크 결과” alang at sysmng.com <

fcheck_result

    rm -f fcheck_result

fi

————————————————————————-

간단한 이정도 스크립터로 보다 효율적인 관리가 가능해 질것이다.

이제 cron 에 등록시켜 놓고..매일 파일 무결성 체크를 간단히 메일로 받아서 관리

할수 있게 된다. 만일 변화된 파일이 정당한 변화라면..

# /usr/local/fcheck/fcheck -ac

로 DBfile 를 업데이트 시켜 줘야 한다. 아님..계속 메일이 날아 오게 된다.

이로써 시스템 설치후 점검해야 할 보안 설정에 대해서 마치겠다. 시스템 보안은

초기의 보안 설정이 아주 큰 부분을 차지 하고 있다. 하지만..지속적은 감시와

관리역시 초기 보안 상태를 유지하는 가장 중요한 작업이라고도 할수 있다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.