오래된거기는 하지만 참고하면 좋다.
아! 참고만 한다. 몇 개는 고대로 따라했다가는 망한다 ㅋㅋㅋ
http://blog.syszone.co.kr/442
리눅스 서버 설치후 기본 보안 처리
작성자 : 서진우
(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 를 업데이트 시켜 줘야 한다. 아님..계속 메일이 날아 오게
된다.
이로써 시스템 설치후 점검해야 할 보안 설정에 대해서 마치겠다. 시스템 보안은
초기의
보안 설정이 아주 큰 부분을 차지 하고 있다. 하지만..지속적은 감시와
관리역시 초기 보안 상태를 유지하는 가장 중요한 작업이라고도 할수
있다.