[필독] 리눅스(RedHat 9) 설치후 기본 셋팅
출처: http://goding.tistory.com/2270?srchid=BR1http%3A%2F%2Fgoding.tistory.com%2F2270
앞의 강좌를 보고 설치를 멋지게 했다면, 기본적인 것을 몇 개 셋팅하고 사용할 것이다. 별 것 없지만 기본적인 보안 셋팅과 서버 관리에 도움이 되는 셋팅 몇가지 하겠다. 인터넷이 좋아서 여기 저기 뒤적거려 보면 많은 자료가 나온다. 하나 하나 자기 것으로 만들며 내공을 쌓아가야 할 것 이다.^^
1. ftp 보다 좋은 ncftp 설치
서버 작업을 많이하면, ftp를 많이 사용한다. 하지만 ftp 보다 사용하기 편한 ncftp를 알면 ftp 쓰는 것이 그렇게 불편하게 느껴질 수 가 없다. 난 처음부터 ncftp를 사용해 왔다. RH9에서는 기본설치가 안되어 따로 패키지를 받아서 설치 하겠다. 물론 배포판 CD에 있지만, 넣고 마운트하고 어쿠 어쿠 귀찮은 것~~ 간단하게 받아서 설치 할 것이다.
wget http://ftp.superuser.co.kr/pub/redhat/9/RPMS/ncftp-3.1.5-4.i386.rpm
위와같은 명령을 입력하면 받아진다.^^ 물론 내가 올려놓았다.
rpm -Uvh ncftp-3.1.5-4.i386.rpm
이렇게 하면 설치하고,
rm -rf ncftp-3.1.5-4.i386.rpm
이렇게 해서 원본 파일을 지워 버린다.^^ 이렇게 설치를 하면 끝이다. 아주 쉽다^^ 이제 ncftp 의 대표적인 기능 몇가지만 알아 보겠다.
[doly@doly ~]$ ncftp ftp.superuser.co.kr
NcFTP 3.0.3 (April 15, 2001) by Mike Gleason (ncftp@ncftp.com).
Copyright (c) 1992-2001 by Mike Gleason.
All rights reserved.
Connecting to ftp.superuser.co.kr...
ProFTPD 1.2.8 Server (ProFTPD Default Installation) [su21.nicekorea.co.kr]
Logging in...
Anonymous access granted, restrictions apply.
Logged in to ftp.superuser.co.kr.
ncftp / >
위와같이 간단하게 쳐 주면, 무명(anonymous) 로긴이 가능하다.
물론 -u 옵션을 주면 사용자로긴이 가능하다.
ncftp -u doly ftp.superuser.co.kr
그리구 파일이나, 디렉토리이름을 모두 칠 필요 없이 Linux 터미널 처럼 몇자 치고 Tab 키를 누르면, 자동완성이 된다. 이 기능이 아주 좋기 때문에 난 이 프로그램을 쓴다.
전송기능에 있어 다음과 같이 상황이 나온다.
ncftp /apache > get httpd-2.0.49.tar.gz
httpd-2.0.49.tar.gz: 5.65 MB 299.92 kB/s
이런 이유들 때문에 ncftp를 쓴다. ncget , ncput 등의 명령어도 제공된다. 그건 잘 쓰지 않지만 좋은 프로그램들이다.
2. MAN 페이지에서 한글이 깨어진다면.
** 참고 : 아래의 설정은 멘 페이지의 한글이 깨어지는 것을 보안하기위한 설정입니다. 아래 패키지를 설치한다고 해서 콘솔에서 한글이 안 깨지는 것은 아닙니다. 콘솔에서 한글이 깨어지지 않게 하려면, Unicon등 콘솔에서 한글을 지원하는 특별한 프로그램을 커널 컴파일 할 때 넣어야 합니다. 서버를 운영하시는 대부분의 사람들은 콘솔에서 한글 쓸일이 거의 없기 때문에 그 부분은 다루지 않겠습니다.
아마 RH9를 설치한 모든 사람들이 격을 것이다. 멘 페이지에 가끔 한글로 된 것을 볼 수 있는데, 100% 깨어질 것이다. 다음 화면과 같이~^^
이렇게 알 수 없는 &&& 문자들로 이루어질 것이다.
이런 경우 다음 패키지를 깔면 문제가 없다.^^
[root@doly root]# wget http://ftp.superuser.co.kr/pub/redhat/9/less-378-8KR.i386.rpm
--21:33:50-- http://ftp.superuser.co.kr/pub/redhat/9/less-378-8KR.i386.rpm
=> `less-378-8KR.i386.rpm'
Resolving ftp.superuser.co.kr... 완료.
Connecting to ftp.superuser.co.kr[210.114.223.221]:80... connected.
HTTP 요청을 보냅니다, 서버로부터의 응답을 기다림...200 OK
길이: 100,767 [audio/x-pn-realaudio-plugin]
100%[=================================================================>] 100,767 289.43K/s ETA 00:00
21:33:50 (289.43 KB/s) - `less-378-8KR.i386.rpm'가 보존되었습니다 [100767/100767]
[root@doly root]# rpm -Uvh less-378-8KR.i386.rpm
준비 중... ########################################### [100%]
1:less ########################################### [100%]
[root@doly root]# rm -rf less-378-8KR.i386.rpm
이렇게 서치가 끝나고 실행해 보면 다음과 같은 결과를 볼 수 있다.
3. rpm으로 커널 업그래이드
2004년에 커널 버그가 엄청 많이 보고 되었다. 지금까지 나온 커널을 패치한 rpm 버전이 있다. 이것을 설치한다. 물론 조금 더 공부했다며, 최신 버전 커널을 컴파일 해서 설치하는 것도 좋지만, 시간이 너무 오래 걸리고, 알아야할 것도 많기 때문에 지금까지 나온 버그를 모두 고친 커널을 rpm 으로 설치한다.
wget http://ftp.superuser.co.kr/pub/redhat/9/update/kernel-smp-2.4.20-30.9.i686.rpm
wget http://ftp.superuser.co.kr/pub/redhat/9/update/kernel-2.4.20-30.9.i686.rpm
rpm -Uvh kernel-smp-2.4.20-30.9.i686.rpm
rpm -Uvh kernel-2.4.20-30.9.i686.rpm
rm -rf kernel-*.rpm
cpu 가 2개라면 smp 커널을 설치해야한다. 하지만 cpu가 하나라면, smp 는 설치하지 말아두 된다.^^
4. badblock 채크 및 마킹
설치할 때도 배드블락을 채크했을 것이다. 그렇지만 어디에 배드블럭이 있고 어떻게 되었는지에 대한 정보를 얻을 수 없다. 그래서 다시 배드블락을 채크할 것이다. 그리고 만약 발견된다면, 파일 시스템 수준에서 그 블락을 쓰지 못하게 마킹을 할 것이다.
[root@doly root]# badblocks -sv /dev/hda11
Checking for bad blocks in read-only mode
From block 0 to 2096451
Checking for bad blocks (read-only test): 2096451/ 2096451
2096449
2096450
done
Pass completed, 3 bad blocks found.
위와같이 3개의 배드블럭이 발견되었다면, 다음 명령어로 아쉬운데로 마킹을 한다. (fsck 명령의 -c 옵션)
[root@doly root]# fsck.ext3 -cvf /dev/hda11
e2fsck 1.32 (09-Nov-2002)
/dev/hda11 is mounted.
WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.
Do you really want to continue (y/n)? yes
/123: recovering journal
Checking for bad blocks (read-only test): done
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/123: ***** FILE SYSTEM WAS MODIFIED *****
/123: ***** REBOOT LINUX *****
78868 inodes used (30%)
98 non-contiguous inodes (0.1%)
# of inodes with ind/dind/tind blocks: 3503/14/0
325956 blocks used (62%)
0 bad blocks
0 large files
53903 regular files
3890 directories
2522 character device files
15884 block device files
1 fifo
4162 links
2658 symbolic links (2658 fast symbolic links)
1 socket
--------
83021 files
이렇게 작업을 하였다면, 어느정도 안심해두 된다고 생각한다^^;
5. tcp_wapper 설정으로 기본 보안 설정
물론 처음 설치시 iptabls(방화벽)을 구축했지만, tcpd를 사용하는 데몬들중 허용하는 ip에서만 접근 가능하게 설정 할 것이다.
echo "ALL:ALL" >> /etc/hosts.deny
이런 간단한 명령어로 모든 서비스를 막는다. 물론 막히는 서비스는 몇가지 안 된다^^ 다 열거하며 힘드니~~
그런다음 항상 허용할 데몬들과 허용할 ip를 등록한다.
echo " ipop3d : ALL
sendmail : ALL
ALL : 192.168.0." >> /etc/hosts.allow
위와 같이 입력하여, pop3 서버와 sendmail 은 모든 ip에 대해서 허용하고, 192.168.0.XXX에서 접근 하면 모든 서비스를 허용하도록 한다. 위와 같이 설정하는 것은 telnet 및 ssh에 가장 영향을 많이 받기 때문에 기본 보안설정으로 사용한다. 만약 유동 ip에서 접속한다면 이런 설정이 무의미 하다.^^; ip가 변해서 잘못하면 서버에 접속하지 못하는 불상사가 발생할 수도 있다.
6. ssh 접속시 root 접속 못하게 설정
ssh에서 root로 바로 접속해서 사용하면 너무 위험하다. 그래서 일반계정으로 접속한 다음 su - 명령어로 root 권한을 획득한 다음 작업하는 것이 좋다. 다음과 같이 간단하게 설정한다.
/etc/ssh/sshd_config 파일을 편집해서 다음과 같이 설정한다.
PermitRootLogin no
이렇게 하구 sshd를 재시작한다.
/etc/rc.d/init.d/sshd restart
7. su 명령어 특정 사용자만 실행 가능하게 설정
우선 root 권한으로 명령을 실행할 수 있는 명령어 sudo를 삭제한다.
[root@doly bin]# rm -rf /usr/bin/sudo
아래와같이 권한 설정을 바꾸고,
chmod 4750 /bin/su
chown root:wheel /bin/su소유그룹을 wheel로 한다. 그런 다음
/etc/group 파일을 열어 wheel 그룹에 su 명령어를 쓸 사용자들을 등록한다.
(예 : wheel:x:10:root,doly)
9. 자동 시간 설정
자동으로 정확한 시간을 맞추는 것은 의외로 간단하다. 다음과 같이한다.
[root@doly bin]# crontab -e 05 00 * * * '/usr/bin/rdate -s time.bora.net && /sbin/clock -w'
위와 같은 내용을 복사해서 넣으면 된다. 위와같이 설정해 두면, 매일 매일 00시 05분에 time.bora.net에 접속하여 시간을 동기화한다.^^
10. 일일 백업
이젠, 서버에서 가장 중요한 백업에 대한 설정을 하겠다. RAID로 구성되어 있다면 좋겠지만, 비용 문제 때문에 대부분 이 방법을 사용하지 않는다. 일반적인 방법은 하루에 한번정도 압축해 둔다. 시간은 제일 사용자가 없을 시간을 선택한다. 세벽 4시정도^^ 그리구 만약을 위해 누적 백업할 것이다. 디스크 용량이 충분하다면, 백업 데이터는 많이 가지고 있는 것이 좋다. 자.. 그럼 이런 백업 정책을 구상했다면 이 백업정책을 프로그램으로 짠다. 다음과 같이^^;
아래 내용을 /root/backup.sh 파일에 넣는다.
#!/bin/bash
export Today="`date '+%y-%m-%d'`"
backup_dir="/backup/data"
backup_count="2" #### 백업본 보관 일 수 (2일간 보관)
########### delete 오래된 백업데이터 삭제
dirlists=`/bin/ls -t $backup_dir 2>/dev/null`
i=1
for dir in $dirlists ; do
if [ "$i" -ge $backup_count ] ; then
/bin/rm -rf "$backup_dir/$dir"
fi
i=$(($i+1))
done
################ 새로운 디렉토리 생성 ####
/bin/mkdir -p ${backup_dir}/$Today
cd ${backup_dir}/$Today
########### home 디렉토리에 사용자별로 백업을 한다.
dirlists=`/bin/ls -t /home 2>/dev/null`
for dir in $dirlists ; do
tar cvfpz ${backup_dir}/$Today/$dir.tar.gz /home/$dir
done
####### 기타 디렉토리를 백업한다
tar cvfpz ${backup_dir}/$Today/usr.local.tar.gz /usr/local
tar cvfpz ${backup_dir}/$Today/etc.tar.gz /etc
tar cvfpz ${backup_dir}/$Today/var.named.tar.gz /var/named
tar cvfpz ${backup_dir}/$Today/var.spool.mail.tar.gz /var/spool/mail
############# 링크를 만들어 준다.####
rm -rf /backup/today
ln -s ${backup_dir}/$Today /backup/today
위의 내용을 복사해서 넣는다. 그리구 실행권한을 준다.
[root@doly root]# chmod 700 /root/backup.sh
그 다음 새벽 4시에 자동실행되게 crontab에서 설정한다.
[root@doly bin]# crontab -e 00 04 * * * su - root -c '/root/backup.sh | mail -s "백업결과보고" 메일주소'
백업 결과를 메일로 받을 것이다. 그렇기 때문에 위에 메일주소 부분을 받고자 하는 메일주소 바꿔줘야한다.
11. 일일 시스템 점검
일일 점검사항은 많으면 많을수록 좋다.^^ 서버에 들어와서 일일이 검사하면 좋겠지만. 여간 귀찮은 일이 아닐 수 없다. 그래서 기본적으로 관찰해야 할 놈들을 모아서 하루에 한번씩 실행한 다음 메일로 받아본다.
아래 내용을 /root/check.sh 파일에 넣는다.
#!/bin/bash
echo -e "n 1. 오늘날짜:"
date
echo -e "n 2. 디스크 용량 점검 "
df -h
echo -e "n 3. 포트 점검 "
netstat -an | grep LISTEN
echo -e "n 5. /tmp 디렉토리 점검 "
ls -al /tmp
ls -al /var/tmp
echo -e "n 6. /var/spool/mqueue 점검 (큐에 쌓인 메일 수 카운트==> 너무 많으면 문제) "
ls -l /var/spool/mqueue | wc -l
echo -e "n 7. 실행 프로세스 점검 "
pstree
echo -e "n 8. 최후 접속자 점검"
lastlog | grep -v "한번도"
위의 내용을 복사해서 넣는다. 그리구 실행권한을 준다.
[root@doly root]# chmod 700 /root/check.sh
그 다음 새벽 7시에 자동실행되게 crontab에서 설정한다.
[root@doly bin]# crontab -e 00 07 * * * su - root -c '/root/check.sh | mail -s "시스템 점검 결과보고" 메일주소'
채크 결과를 메일로 받을 것이다. 그렇기 때문에 위에 메일주소 부분을 받고자 하는 메일주소 바꿔줘야한다.
2004년 7월 22일 : 클론으로 백업 및 시스탬 체크를 하는데 스크립트의 환경때문에 돌아가지 않았던 부분을 수정했습니다.
12. 본 강좌를 마무리 하며 ...
서버 설치후에 손봐야 할 것이 한 두가지가 아니다. 내가 하는 것은 이 보다 더 많고 복잡하다. 하지만 최소한 해야 한다는 것은 올려 두었다. 위의 내용뿐 아니라 백업이나 점검 같은 경우는 필요하다면 추가해서 결과를 받아보는 것이 좋다.
지금 까진 기본 설정이 었다. 다음에도 강좌는 계속 이어진다. 본 강좌를 읽고 부디 도움이 되길 바란다. 힘들 게 쓴만큼^^
혹시 본 강좌에 대한 질문 및 문의사항이 있으면, 메일 한통 보내주기 바란다. 메일주소는 doly 골뱅이superuser.co.kr 이다. 메일 주소를 무단 수집해서 스팸메일을 보내는 이를 막기 위해서 위와 같이 표기했으며, 골뱅이 부분은 @ 치환하면 된다.