'리눅스'에 해당되는 글 32건

  1. 2007.07.13 6. vsftp 유용한 옵션
  2. 2007.07.12 5. cron 과 그 활용법
  3. 2007.07.11 4. 리눅스 du 와 df 2
  4. 2007.07.03 3. cp 리눅스 copy 명령어 1
  5. 2007.07.03 2. find 의 다양한 옵션
  6. 2007.07.03 1. rdate 리눅스 서버 시간동기화
  7. 2007.02.23 portsentry를 사용해서 포트스캔 탐지 및 tcp-wrapper 에 자동 기록
  8. 2007.02.23 리눅스 보안 IP 접속 차단 1
  9. 2007.02.23 아파치 서버시에 특정아이피 대역만 허용
  10. 2007.02.23 리눅스 백업 방법 3
  11. 2007.02.23 리눅스 백업 방법 2
  12. 2007.02.23 리눅스 서버의 백업
2007. 7. 13. 12:57

6. vsftp 유용한 옵션

vsftp 는 유용한 옵션을 많이 가지고 있다

(1)  FTP 접속햇을때 파일 시간이 이상하게 나타날때

하지만 파일 시간표시를 Local time 이 아닌 Universal time 으로 표시하기 때문에
다음과 같은 옵션을 vsftpd.conf 파일에 추가해주어야 한다.


use_localtime=YES


이것은 리눅스 시간과 바이오스시간인 hwclock 과 같은때 이것으로 표시해준다

(2) 사용자 home 디렉토리를 벗어나지 못하게 하려면?
ftp사용자가 자기 home디렉토리를 벗어나지 못하게 하려면 다음과 같이 설정합니다.

chroot_list_enable=YES
chroot_local_user=YES


위와같이 설정합니다. 접속하면 /etc/vsftpd.chroot_list 파일이 없다고 에러가 나게 됩니다.
원래 vsftpd.chroot_list 파일은 없습니다. 따라서
단순히 touch /etc/vsftpd.chroot_list 이렇게 파일을 만들어 주면 됩니다.
그리고 특정유저는 제외하려면 /etc/vsftpd.chroot_list 파일에 사용자 계정을 넣어줍니다.


(3) 하위디렉토리의 파일 및 디렉토리를 볼수 있는 ls -R 명령 허용하려면?

하위디렉토리 리스트를 보여주기 위해서 ls -R 명령어를 내릴때가 있습니다.
이런경우 대부분의 ftp 서버는 부하등의 이유로 막아 두게 됩니다.
vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 다음 지시자를 입력하세요.

ls_recurse_enable=YES


(4) 전송속도를 제한하고 싶다면?
다운로드 받는 한 사용자가 네트웍 트래픽을 모두 사용해 버리는 것을 방지하기 위해서
대역폭을 조정해야 하는 경우가 있습니다.
다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는  (Bytes/Sec) 입니다.

local_max_rate=300000


위 설정은 300KByte/Sec의 대역폭을 제공합니다.

(5) mp3, wmv 등의 확장자를 가진 파일의 업로드를 금지하려면?
ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다.
이 vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다.

deny_file={*.mp3,*.wmv}


위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.

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

기타 궁금증 ?
1. 홈 디렉토리를 접속자마다 따로 임의의 디렉토리 설정후 하위의 디렉토리만 접근 가능하도록 설정
2. SSH 유저를 추가시키지 않고 단지 FTP 만 사용하게 하는 것은 ?


2007. 7. 12. 11:34

5. cron 과 그 활용법


cron은 작업 스케줄링 기능을 제공하는 프로그램이다. 다시 말해 특정시간에 특정작업을 자동으로
수행하도록 하는 프로그램으로 대부분의 배포판에 기본적으로 설치되어 있다.
즉 정기적으로 새벽 2시에 데이터 백업을 받거나 특정일에 사용자들에게 메일을 보내든가 하는 작업을
미리 cron에 예약을 해두면 우리는 새벽 2시까지 백업을 받으려고 기다릴 필요도 없고,
특정일에 메일 보내는 것을 잊고 있어도 자동으로 메일이 발송 될 것이다

기본적인 명령어 사용법

crontab -e : 작업할 내용 작성하기
crontab -l : 현재 설정되어 있는 작업내용 보기
crontab -r : 설정되어 있는 작업을 모두 삭제하기
crontab cron.dat : cron.dat 라는 자신만의 파일을 작성해서 자동으로 cron 에 추가되도록 하는 방법 ( 여러개의 cron 을 사용할 경우 이 방법을 사용하면 매우좋음 )
crontab -u user -e : root 권한으로 다른 사용자의 crontab 파일을 편집하기 위한 명령


분     |  시간 | 날짜 | 월    | 요일
0-59  |  0-23 | 1-31 | 1-12 | 0-6

이렇게 다섯개로 구분되어 있다.
요일은
일요일 =0 / 월요일=1 / 화요일=2 / 수요일=3 / 목요일=4 / 금요일=5 / 토요일=6


예제

1. 매일 새벽5시마다 reboot 을 시키는 것
0 05 * * * reboot


2. 1분마다 /usr/src밑에 있는 test.sh 라는 스크립트를 실행시키는 것
*/1 * * * * /usr/src/test.sh


3. 매월 1일과 10일 4시에 명령1을 실행
0 4 1,10 * * 명령1


4. 매 5일마다 실행한다는 것으로 1일, 6일, 11일 등과 같이 5일 간격으로 실행
0 4 */5 * * 명령1


솔라리스10 에서 cron 실행 로그파일 위치 
/var/cron 밑의 log 파일 생성됨

리눅스에서의 cron 실행 로그파일 위치
/var/log 밑의 cron 파일 생성됨 
2007. 7. 11. 11:04

4. 리눅스 du 와 df

*** du ***

du -h --max-depth=1

현재 디렉토리의 한단계 까지만의 디렉토리별 용량을 보여준다.



 
du -sh ./          #   현재디렉토리 이하의 디렉토리 전체 사용량을 보여줌

du -h  ./       #   현재 디렉토리 이하의 디렉토리별 사용량을 보여줌


du -sh /home/myid  # myid계정의 디렉토리 전체 사용량을 보여줌



*** df ***

df 의 옵션

 - i : inode 로 디스크의 정보를 출력
 - k : 킬로바이트 단위로 출력
 - m : 메가바이트 단위로 출력
 - h : 파일을 보기 쉬운 용량으로 출력 ( 기가는 Giga 단위로 쉽게 보여줌 )
 - T : 파일 시스템의 정보를 출력

실제로 df -h 면 만족할 만한 정보를 얻을 수 있다
2007. 7. 3. 17:52

3. cp 리눅스 copy 명령어

1. 기능
파일을 현재의 위치나 다른 디렉토리로 복사(copy)한다.

2. 문법
# cp [ 옵션 ] 파일명1 파일명2
# cp [ 옵션 ] 파일명(들) 디렉토리

3. 옵션
-a : 가능한 한 원 파일의 구조와 속성을 그대로 복사한다.
-b : 복사할 때 덮어쓰게 되는 파일은 백업을 만든다.
-d : 심볼릭 링크는 심볼릭 링크로 복사한다. 그리고 원본 파일과의 하드 링크 관계를 유지한다.
-f : 복사 위치에 존재하는 파일을 제거하고 복사한다.
-i : 복사 시 같은 이름의 파일이 존재한다면 덮어쓸 것인가 확인한다.
-I : 하드 링크를 만든다.
-P : 원본 파일의 소유자, 그룹, 권한, 시간 기록을 그대로 복사한다.
-R , -r : 파일과 하위 디렉토리에 포함된 파일 모두를 복사한다.
-s : 디렉토리가 아닌 파일의 심볼릭 링크를 만든다. 소스 파일의 이름은 전체 경로 이름으로 한다. 목적지 파일 이름은 전체 경로를 주지 않아도 현재 디렉토리로 간주되므로 상관없다.
-u : 파일의 정보를 갱신한다.
-x : 다른 파일 시스템인 하위 디렉토리는 무시한다.



=======================
cp -a 가 가능한 원본파일의 속성을 유지시켜면서 복사하므로 이것이 원츄
2007. 7. 3. 17:48

2. find 의 다양한 옵션

- 파일 이름에 foobar 가 들어간 파일 찾기
   find / -name "foobar" -print

- 특정 사용자(foobar) 소유의 파일을 찾기
   find / -user foobar -print | more

- 최근 하루동안에 변경된 파일을 찾기
   find / -ctime -1 -a -type f | xargs ls -l | more

- 오래된 파일(30일 이상 수정되지 않은 파일) 찾기
   find / -mtime +30 -print | more

- 최근 30일안에 접근하지 않은 파일과 디렉터리를 별도의 파일로 만들기
   find / ! ( -atime -30 -a ( -type d -o -type f ) ) | xargs ls -l > not_access.txt

- 하위 디렉터리로 내려가지 않고 현재 디렉터리에서만 검색하기
   find . -prune ...

- 퍼미션이 777 인 파일 찾기
   find / -perm 777 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾기
   find / -perm -2 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾아 쓰기 권한을 없애기
   find / -perm -2 -print | xargs chmod o-w
      또는
   find / -perm -2 -exec chmod o-w {} ; -print | xargs ls -l | more

- 사용자이름과 그룹이름이 없는 파일 찾기
   find / ( -nouser -o -nogroup ) -print | more

- 빈 파일(크기가 0 인 파일) 찾기
   find / -empty -print | more
      또는
   find / -size 0 -print | more

- 파일 크기가 100M 이상인 파일을 찾기
   find / -size +102400k -print | xargs ls -hl

- 디렉터리만 찾기?
   find . -type d ...

- root 권한으로 실행되는 파일 찾기
   find / ( -user root -a -perm +4000 ) -print | xargs ls -l | more

- 다른 파일시스템은 검색하지 않기
   find / -xdev ...

- 파일 이름에 공백이 들어간 파일 찾기
   find / -name "* *" -print

- 숨겨진(hidden) 파일을 찾기
   find / -name ".*" -print | more

- *.bak 파일을 찾아 지우기
   find / -name "*.bak" -exec rm -rf {} ;

- *.bak 파일을 찾아 특정 디렉터리로 옮기기
   mv `find . -name "*.bak"` /home/bak/

- 여러개의 파일에서 특정 문자열을 바꾸기
   find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} ;


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

유닉스에서 세미콜론(;)은 명령어 구분자로 사용됩니다. 따라서 질문하신 분 처럼 사용하시면 쉘이 이를 명령어 구분자로

인식하여 find에게 전달이 안되는 것입니다.

이러한 경우 다음과 같이 하시면 됩니다.

find . -name "*.log" -a -mtime +3 -exec rm {} \;

또한 질문하신 내용중 -mtime +3 이라고 하면 마지막 수정시간이 3일을 포함하여 그 이후의 것... 예를들어 3일전 4일전

5일전 6일전 ...  이 되는 것이구요..
-mtime -3이라고 하면 3일 이전의 것 0일전, 1일전, 2일전, 3일전 뭐 이런 의미가 됩니다.

정확히 3일전 것만 하시려면 +나 -없이 그냥 -mtime 3이라고만 지정하시면 됩니다.
================
실제사용 예

find . -name "OUT200703*"

OUT200703 으로 시작하는 파일 찾기

find . -name "OUT200703*" -exec rm -f {} \;

OUT200703 으로 시작하는 파일 찾고 지우기

find . -name "OUT200703*" && find . -name "*.mp3"

OUT200703으로 시작하는 파일과 mp3 로 끝나는 파일 찾기

find . -name "cdr1.txt.2006*"





==================== 생성된지 3분이상된 파일을 이동시키는 것

find /var/spool/asterisk/monitor -cmin +3 -exec mv /var/spool/asterisk/tmp {} \;
find . -cmin +3 -exec cp /var/spool/asterisk/tmp {} \;

find . -cmin +3 && find . -name "OUT*.wav" -exec mv /var/spool/asterisk/tmp {} \;




find . -cmin +3 && find . -name "OUT*.wav" -exec mv /var/spool/asterisk/tmp {} \;

find . -cmin +3 -mtime 0 -exec rm -f {} \;


find . -name "*.wav" | xargs ls -l | grep  test


find . -name "*.wav" | xargs ls -l | grep  OUT105




mv `find . -cmin +3` /var/spool/asterisk/

find / -name "*.c" -print -depth&

   루트디렉토리(/)에서 아래로 내려가면서(-depth)

   확장자가(.c)인 파일(-name "*.c")을 찾아  프린트(-print)해라

   맨 끝에 &는 백그라운드 프로세스로 실행하란 겁니다.


2007. 7. 3. 17:25

1. rdate 리눅스 서버 시간동기화

1. 리눅스 서버 시간 동기화 하기

rdate -s time.bora.net -> tiem.bora.net 서버의 시간으로 이 서버의 시간을 동기화한다

rdate -p time.bora.net  -> time.bora.net 서버의 시간을 표시한다

rdate -s time.kriss.re.kr -> 외부서버와 동기화
rdate -s time.bora.net
clock -w -> 하드웨어 바이오스 동기화
hwclock --show -> 하드웨어 설정 시간 보기




============ 실제 사용예
rdate -s time.bora.net && hwclock -w

'내가쓰는리눅스 강좌' 카테고리의 다른 글

10. 시간 동기화 rdate 와 다른 NTP  (6) 2008.04.21
[리눅스 다운받는 곳]  (1) 2008.03.05
9. 리눅스 df 명령어  (0) 2007.11.20
8. 리눅스 명령어 find 와 옵션  (12) 2007.10.15
7. 리눅스의 시간 date 와 hwclock  (0) 2007.09.04
6. vsftp 유용한 옵션  (0) 2007.07.13
5. cron 과 그 활용법  (0) 2007.07.12
4. 리눅스 du 와 df  (2) 2007.07.11
3. cp 리눅스 copy 명령어  (1) 2007.07.03
2. find 의 다양한 옵션  (0) 2007.07.03
2007. 2. 23. 22:23

portsentry를 사용해서 포트스캔 탐지 및 tcp-wrapper 에 자동 기록

portsentry를 사용해서 포트스캔 탐지 및 tcp-wrapper 에 자동 기록.

portsentry는 누군가 내 시스템의 포트를 스캔 하는지 검사하여,

tcp_wrapper에서 자동으로 ip를 막아주는 프로그램이다.

일반적으로 포트를 스캔 하는 경우는 해킹에 대비하기 위해서

내 시스템의 열려있는 포트를 스캔 하거나,

다른 서버를 해킹할 목적으로 열려 있는 포트를 스캔 하는 경우가

대부분 이기 때문에 누군가 내 시스템의 포트를 스캔했다면,

해킹을 위한 시도라고 생각하면 된다.

portsentry를 설치하면, 누군가 내 시스템의 포트를 스캔 했을때

아래와 같은 형식으로 /etc/hosts.deny 파일에 기록이 되어,

해당 아이피의 접근을 차단하게된다.

 ALL: 123.23.123.3

하지만 자신의 /etc/hosts.deny 에 ALL:ALL 로 설정해 놓았다면

단순히 로그분석용으로만 사용하는것과 같을 것이다.

- 설치 과정

tar xvzf portsentry*

우선 MakeFile 을 열어 중요부분을 살펴보자.

INSTALLDIR = /usr/local/psionic
CHILDDIR=/portsentry

설치되는 디렉토리를 정의하고 있다.

linux:
SYSTYPE=linux
@echo "Making $(SYSTYPE)"
$(CC) $(CFLAGS) -DLINUX -DSUPPORT_STEALTH -o ./portsentry ./portsentry.c
./portsentry_io.c ./portsentry_util.c $(LIBS)

debian-linux:
SYSTYPE=debian-linux
@echo "Making $(SYSTYPE)"
$(CC) $(CFLAGS) -DLINUX -DDEBIAN -DSUPPORT_STEALTH -o ./portsentry ./portsentry.c
./portsentry_io.c ./portsentry_util.c $(LIBS)


bsd:
SYSTYPE=bsd
@echo "Making $(SYSTYPE)"
$(CC) $(CFLAGS) -DBSD44 -o ./portsentry ./portsentry.c
./portsentry_io.c ./portsentry_util.c


openbsd:
SYSTYPE=openbsd
@echo "Making $(SYSTYPE)"
$(CC) $(CFLAGS) -DBSD44 -o ./portsentry ./portsentry.c
./portsentry_io.c ./portsentry_util.c


freebsd:
SYSTYPE=freebsd
@echo "Making $(SYSTYPE)"
$(CC) $(CFLAGS) -DBSD44 -o ./portsentry ./portsentry.c
./portsentry_io.c ./portsentry_util.c

 

이하 생략...

make , 즉 make 명령어 뒤에 자신의 시스템 타입을 적어 주어야 한다.

예)
make linux
make install

위와 같은 순서로 컴파일, 인스톨 하면 된다.


cd /usr/local/psionic/portsentry

세개의 파일이 보일것이다. portsentry.conf 파일을 보자.

# Use these if you just want to be aware: 검사하고 싶은 대상 포트를 적어줌
(각종 트로이 포트들을 적어주면 검사를 잘 해줄 것이다.)


TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,31337,32771,32772,32773,32774,40421,49724,54320"
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,31337,54321"

# Default TCP ident and NetBIOS service: 검사에서 제외될 tcp/udp 포트들이다.
ADVANCED_EXCLUDE_TCP="113,139"
# Default UDP route (RIP), NetBIOS, bootp broadcasts.
ADVANCED_EXCLUDE_UDP="520,138,137,67"

 

아래와 같은 방법으로 portsentry 데몬을 띄운후에...

# /usr/local/psionic/portsentry/portsentry -tcp
# /usr/local/psionic/portsentry/portsentry -stcp
# /usr/local/psionic/portsentry/portsentry -udp
# /usr/local/psionic/portsentry/portsentry -sudp

# ps -ef | grep portsentry 로 데몬이 떠 있는지확인 하고, 로그파일을 확인 하면, 포트스캔의 흔적이 로그에 남게된다.

# tail -100 /var/log/messages

Mar 1 23:38:59 myserver portsentry[28771]: attackalert: TCP SYN/Normal scan from host: 21x.11x.11x.13x/21x.11x.11x.13x to TCP port: 12345

위 로그는 누군가가 내 시스템의 12345 번 포트를 검사하고 있다는 로그이다.

그리고 /etc/hosts.deny 파일을 확인 하면.. 아래와 같이 추가되어 있을 것이다.

ALL: 21x.11x.11x.13x

portsentry는 내 시스템의 포트를 스캔한 아이피를 차단만 하는 것이기 때문에, 스캔후에 다른 아이피로 침입을 시도한다면, 무용지물이 될것이다.
nmap 등의 프로그램을 이용해서 내 시스템의 포트를 주기적으로 스캔 해보고, 불필요한 포트는 미리미리 막아 놓는 습관이 더 중요 할 것이다.

2007. 2. 23. 22:18

리눅스 보안 IP 접속 차단

아래에 홍석범님께서 글을 쓰셨듯 IP를 변경해서 접속하는것이 아닙니다.

불특성 다수가 해당서버의 IP로 접속을 시도하는것입니다.

저같은 경우에는 portsentry를 이용 자동으로 불량패킷& 허가되지않은 접속을 시도할시 차단을 하고 있습니다.

저도 처음엔 iptables를 이용해서 IP를 차단할려고 했으나 , 제 실정에 맞지않아 portsentry를 이용하고 있습니다.

etc/아래에 hosts.deny에 차단된 IP들이 자동으로 저장이 됩니다.

방화벽을 사용하지 못하신다면 ~ portsentry를 강력추천해 드립니다.

그게 아닌 특정 IP대역을 모두 차단하신다면 아래의 url를 참고하시기 바랍니다.
 

특정 IP대에서 접속을 시도한다면 아래와 같이 iptables를 이용  ip대역차단을 하면 됩니다.  자세한 사항은 아래 url로 가셔서 살펴보시는게 좋을것 같습니다.



http://blog.naver.com/almdri1004/50006230730

2007. 2. 23. 22:06

아파치 서버시에 특정아이피 대역만 허용

아파치 웹서버를 돌리고 있는데 삼바 서버처럼 특정 아이피 대역폭만 접속가능토록 하는 방법이 있나요?




  김우진(skylight) 2007-01-23 21:10   [삭제]
  답변 감사합니다...
쓰는 위치가 정확히 어디인지 초보라 헤갈리네요

<directory />
Options FollowSymLinks
AllowOverride None
</directory>

를 수정하는지 알고 했다가...접속이 전체가 안되는데....위의 문구 밑에 기입하면
되는건가요?

  배준태(juunoya) 2007-01-22 9:07   [삭제]
  httpd.conf에
<Directory "/home/hosting/xxxxx/html">
AllowOverride
Order deny,allow
Allow from 1.1.1.

Deny from all
</Directory>

이렇게 해주면 1.1.1. 대역의 IP만 싸이트에 접속가능합니다.


상단의 <Directory "/home/hosting/xxxxx/html">는

자신의 웹싸이트 디렉토리에 맞게 설정하여야합니다..
2007. 2. 23. 22:01

리눅스 백업 방법 3


있습니다 !!!

시스템에 문제가 생겼을경우 다시 표멧하고 재설치 한 후 모든 셋팅을 새로 하지요...

하지만 긴급한 경우를 생각하여 고스트처럼 파티션을 백업받아 처음의 설정 그대로 복구 할수가

있습니다.

프로그램 이름은 SystemRescueCd, Partition Image 프로그램입니다.

흔히 아는 dd 는 전체를 백업받아 아주 무겁지만 요것들은 사용하는 공간만 백업하므로 크기를

많이 줄일수있습니다.

SystemRescueCd 는 부팅가능한 CD-ROM 이미지를 제공합니다. 여기에는 GNU Parted (파티션툴),

QtParted (리눅스용 파티션 매직 클론 프로그램), Partimage (리눅스용 고스트), File systems tools , Sfdisk

(파티션 테이블 백업 및 복원) 프로그램등으로 구성이 되어 있습니다.
2007. 2. 23. 21:54

리눅스 백업 방법 2

저도 비슷한 고민으로 이것저것 시도해 봤는데,
폴더를 통째로 백업을 하는 경우라면 tar 를 이용한 백업이 가장 확실하더군요.
권한,날짜등을 그대로 유지시켜 줄 뿐만 아니라(zip,rar같은 압축으로는 해결못하는 부분이죠),옵션도 매우 다양하고 분할압축도 가능합니다.



그리고 리눅스에서도 고스트처럼 백업이미지 프로그램이 있습니다.
1.dd(기본명령어)를 이용하는 방법.
2.Partimage (http://www.partimage.org) ->무료
3.TrueImage (http://www.acronis.com) ->상용
저는 TrueImage를 쓰는데,완벽하게 잘 처리해 주더군요.(ext3,swap)



그리고 하드교체시 용량이 틀려도 상관없습니다.
tar로 백업해둔 걸 그대로 풀어놓으면 됩니다.
저같은 경우는 6기가의 하드에 이것저것 설치하고 세팅한 뒤에 TrueImage로 만들어 두었는데,
나중에 13기가로 옮길때 그냥 복구할때 자동으로 용량조절 해주더군요.
단,데이터 폴더(var,usr)는 심볼릭 링크를 이용해서 다른 하드디스크에 저장되도록 해 두었습니다.


이상,제가 알고있는 한도내에서 썼습니다.
혹시 잘못된 부분이나 추가할 것이 있으면 말씀해 주세요.
2007. 2. 23. 21:46

리눅스 서버의 백업

제 8장. 백업과 복구 절차

정기적으로 백업을 수행하는 것은 책임있는 시스템 관리자에게는 최우선의 일로 간주되어야 한다. 비록 리눅스가 극도로 안정적인 운영체제이지만, 장애는 일어날 수 있고, 일어나고 있으며, 아마도 일어날 것이다. 하드웨어상의 장애, 정전 또는 그 외 예측하지 못한 문제로부터 이러한 장애는 발생할 수 있다.

그러나 이러한 요인보다는 사람의 실수에 의하여 문제가 발생하는 경우가 더 많다. 그 결과로 중요한 파일을 원하지 않게 고치거나 심지어는 삭제할 수가 있다. 만약 당신의 시스템을 여러 사용자들이 쓰고 있다면 아마 실수로 지운 파일을 복구해달라는 요구를 틀림없이 받게될 것이다.

만약 정기적으로 백업을 한다면 (최소한 자주 갱신되는 사용자 파일들이라도) 그것도 일단위로 한다면 그러한 파일 손실의 가능성을 줄이고 복구 가능성을 높일 수 있다.

백업을 실행하는 가장 안전한 방법은 테이프, 제거가능한 드라이브, 기록가능한 씨디 등 분리된 매체에 기록하여 리눅스 시스템과는 떨어진 위치에 저장해두는 것이다. 어떤 경우에는 이러한 것이 현실성이 없을 수도 있다 -- 아마 백업 테이프를 넣어 둘만한 내화성 금고를 갖고 있지도 않을 것이다! 또는 처음에는 외장 백업 시스템 자체가 없을 수도 있다. 그렇다손 치더라도 백업을 어떻게든 비록 제한된 방법으로나마 수행할 수는 있다.

우리 회사에서 나는 여러대의 리눅스 서버에 대하여 백업을 수행한다. 상황에 따라서 어떤 백업 세트는 테이프에 쓰고 또 어떤 것은 네트웍으로 연결된 다른 서버에 쓰기도 하고 그렇지도 않은 것들은 다른 디스크 파티션에 (예컨대, ``/archive/'' 파일 시스템에) 쓰기도 한다. 이 작업은 자동으로 cron 작업으로 실행된다. (대개 서버는 다른 곳에 있는 경우가 많으므로 테이프 백업을 하기 위하여 여기 저기를 매일 같이 방문한다는 것은 실용적이지 않거나 불가능하다.)

집에서는 외장 백업 시스템이 없을 뿐만 아니라 백업 이미지를 기록해둘만한 여분의 디스크 공간을 충분히 갖고 있지도 않다. 따라서, 따라서, 대신 ``/home/'' 디렉토리에 있는 나의 사용자 파일과 ``/etc/'' 디렉토리에 있는 몇몇 설정 파일만을 별도의 디스크 파티션에 백업하고 있다.

서버의 백업 절차

리눅스에서 백업을 수행하는데에는 매우 다양한 방법이 있다. 모든 리눅스 배포판에 포함되어 있는 명령행 도구인 ``dd'', ``dump'', ``cpio'', 나 ``tar'' 를 사용하는 방법도 이에 속한다. 그 외에도 백업과 복구 절차에 좀 더 사용하기 편리한 인터페이스를 추가하려고 만든 텍스트 기반의 유틸리티로서 ``아만다(Amanda)'' 와 ``테이퍼(Taper)'' 가 있다. 구이 기반의 ``KDat'' 라는 유틸리티도 있다. 마지막으로는 상용 백업 유틸리티로서 ``BRU'' 와 ``PerfectBackup+'' 가 있다. 이들 중 어느 것을 사용하더라도 당신의 귀중한 자료를 보호할 수 있다.

사용가능한 도구와 그것을 어디서 얻을 수 있는 지를 정리한 목록은 http://www.xnet.com/~blatura/linapp2.html#back 에 있는 "Linux Applications and Utilities Page" 에서 얻을 수 있다. 백업 솔루션을 결정할 때에는 다음과 같은 사항을 고려할 필요가 있다:

  • 이식성 - 백업의 이식성이 (즉, 한 리눅스 또는 유닉스 시스템에서 백업한 것을 다른 시스템에 복구하는 것; 예를 들어, 솔라리스에서 백업한 것을 레드햇 리눅스에다가 복구하는 경우) 중요한가? 만약 그렇다면 명령행 도구(예. ``dd'', ``dump'', ``cpio'', ``tar'')를 사용하는 것이 좋을 것이다. 왜냐하면, 그러한 도구는 어떤 리눅스/유닉스 시스템에서도 사용가능하다고 확신할 수 있기 때문이다.

  • 자동 백업 - 사람의 개입없이 정기적으로 자동화된 백업이 수행되는 것이 당신에게 중요한가? 만약 그렇다면, 그러한 백업 방식을 지원할 수 있는 도구와 백업 매체를 갖추어야 할 것이다.

  • 사용의 편의성 - 편리한 사용자 인터페이스가 중요한가? 그렇다면 텍스트 또는 구이 기반의 인터페이스를 제공하는 도구를 선택하고 싶을 것이다. 상용 유틸리티는 가장 사용하기 쉬운 인터페이스를 제공할 뿐 만 아니라 기술지원도 해줄 수 있다.

  • 원격 백업 - 원격지의 기계에서 백업을 시작하거나 복구하는 기능이 중요한가? 그렇다면, (X 세션을 무리없이 실행할 수 있을 정도로 고속 네트웍으로 연결되어 있지 않다면) 구이 기반의 유틸리티보다는 명령행 도구나 텍스트 기반의 유틸리티를 선택하는 것이 좋을 것이다.

  • 네트웍 백업 - 네트웍으로 연결된 호스트의 백업과 복구를 실행하는 것이 중요한가? 만약 그렇다면, 백업 장치에 대하여 네트웍 액세스를 지원하는 (``tar'' 같은) 명령행 유틸리티나 ``아만다(Amanda)'' 같은 특별한 유틸리티 또는 상용 유틸리티가 좋을 것이다.

  • 매체의 종류 - 백업은 테이프, 추가의 하드 드라이브, 집 드라이브, 다시쓸 수 있는 씨디 등 다양한 매체에 저장될 수 있다. 가격 대 안정성, 저장 용량, 전송 속도 등을 비교하여야 할 것이다.

Caution

특별 주의: 파일 시스템을 백업할 때, 가짜 파일 시스템인 ``/proc'' 를 절대로 포함시키지 마라! /proc 에 있는 파일은 실제 파일이 아니고 파일 모양의 링크로서 커널의 자료구조를 가리키고 있다. 당신의 전체 메모리의 내용을 담고 있는 가짜 파일인 ``/proc/kcore'' 파일을 백업하는 것은 테이프의 엄청난 낭비일 뿐이다! :-) 또한, 씨디롬 장치, 플로피 장치, 네트웍 파일 공유 그리고 그 외 마운트된 장치의 내용을 백업하려는 경우가 아니라면, ``/mnt'' 파일 시스템도 백업하지 않도록 하여야 한다.

당연히, 당신이 어떤 백업 솔루션을 선택하느냐에 따라 백업과 복구를 수행하는 절차는 다르다. 하지만, 이 섹션에서는 내가 가장 자주 사용하는 다음과 같은 두개의 도구를 이용하여 백업을 수행하는 방법을 설명할 것이다: ``tar'' (이 이름은 "Tape ARchiver" 에서 따낸 말이다) 는 명령행 백업 도구로서 유닉스/리눅스 시스템에서 상당히 이식성이 높다. ``KDat'' 는 구이 기반의 테이프 백업 유틸리티로서 KDE 패키지에 (KDE 에 대하여는 KDE 설치와 설정 섹션 - 제 5 장 을 참조하시요) 포함되어 있다.

마지막으로 덧붙이고 싶은 것은 선택한 백업 솔루션에 따라, 심지어는 그 도구가 자동 백업 기능을 내장하고 있지 않다 하더라도, cron 기능을 이용하여 백업을 자동화할 수 있다는 것이다. cron 을 사용하는 방법과 crontab 스케쥴 파일을 만드는 방법에 대한 상세한 내용은 Cron 과 Crontab 파일을 이용하여 작업을 자동화하기 섹션 - 제 9 장 을 참조하시요.

``tar'' 를 이용한 백업:

``tar'' 를 백업 솔루션으로 사용하기로 결정하였다면 다양한 명령행 옵션을 알기 위하여 시간을 투자할 필요가 있다; 옵션에 대한 설명을 보려면 "man tar" 라고 타이핑하면 된다. 그리고 적당한 백업 매체에 액세스하는 방법도 알아야 할 것이다; 비록 유닉스 세계에서는 모든 장치가 파일과 같이 취급되지만, 테이프와 같은 문자 장치에 기록을 할 때에는 "파일" 의 이름이 장치 자체를 나타낸다. (예를 들어, ``/dev/nst0'' 는 스카시 기반의 테이프 드라이브를 나타낸다.)

다음의 명령은 당신 리눅스 시스템 전체를 ``/archive/'' 파일 시스템에 백업할 것이다. 이 백업에서 빠지는 부분은 가짜 파일 시스템인 ``/proc/'', ``/mnt/'' 에 마운트된 파일 시스템, ``/archive/'' 파일 시스템 (백업 셋트 자체를 다시 백업한다는 것은 의미가 없다!), Squid 가 사용하는 상당히 큰 캐시 파일이다. (이들을 백업하는 것은, 내 의견으로는, 백업 매체의 낭비이며 필요하지도 않다):

tar -zcvpf /archive/full-backup-`date '+%d-%B-%Y'`.tar.gz \
--directory / --exclude=mnt --exclude=proc --exclude=var/spool/squid .

이 명령의 길이에 겁먹지마라! 우리가 명령을 구성 부분으로 쪼개놓고 나면 이 강력한 유틸리티의 아름다움을 알게될 것이다.

앞의 명령에서 지적한 옵션으로는, ``z'' (압축; 백업 자료를 ``gzip'' 을 이용하여 압축한다), ``c'' (생성; 새로운 저장 파일을 만든다), ``v'' (수다; 백업이 되고 있는 파일의 목록을 보여준다), ``p'' (퍼미션 보존; 파일 보호를 위한 정보는 복구할 수 있도록 "기억해" 둔다) 가 있다. 그 외에도, ``f'' (파일) 옵션은 그 다음의 인자가 생성할 저장 파일 (또는 장치) 의 이름이라는 것을 나타낸다. 파일 이름에 오늘 날짜를 넣기 위하여 어떻게 했는지 보면, ``date'' 명령을 두개의 역따옴표로 둘러싸서 만들어내고 있다. 일반적으로 사용되는 이름 규칙은 압축되지 않은 저장 파일에는 ``tar'' 를 뒤에 붙이고, 압축된 저장파일의 경우에는 ``tar.gz'' 를 뒤에 붙이는 것이다.

``--directory'' 옵션은 백업을 시작하기 전에 옵션 뒤에 지정한 디렉토리 경로로 일단 가라는 것을 나타낸다. (우리의 예에서는, ``/'' 디렉토리로 가서 백업이 시작된다.) ``--exclude'' 옵션은 지정한 디렉토리나 파일은 백업하지 말라고 지시한다. 마지막으로, ``.'' 글자는 현재 디렉토리에 있는 모든 것을 백업해야 함을 나타낸다.

Note: 주의: tar 에 사용되는 옵션은 대소문자를 구분한다는 것을 명심하여야 한다! 게다가, 대부분의 옵션은 한 글자짜리 (예. ``f'') 로 사용될 수도 있고, 좀 더 외기 쉬운 완전한 옵션 이름 (예. ``file'') 으로도 사용될 수 있다. 한 글자짜리를 쓸 때에는 그 앞에 ``-'' 문자를 붙여야 하고, 완전한 이름을 사용할 때에는 그 글자를 두개를 써야 한다. 다시한번 말하지만, tar 명령에 대한 "man" 페이지를 꼭 참조하기 바란다.

또 하나의 예로서, (앞의 예에서는 전체 를 백업하면서 그 중에 몇가지를 제외하는 방식을 썼지만) 이번에는 지정한 몇개의 파일 시스템만을 스카시 테이프 드라이브에 기록하는 방법을 살펴 보자:

tar -cvpf /dev/nst0 --label="Backup set created on `date '+%d-%B-%Y'`." \
--directory / --exclude=var/spool/ etc home usr/local var/spool

위의 명령에서 ``z'' (압축) 옵션이 사용되지 않았음을 주목하기 바란다. 나는 테이프에 압축된 자료를 기록하는 것을 강력히 반대한다. 왜냐하면, 테이프에 있는 자료의 일부가 깨지면 백업 셋트 전체를 못쓰게 되기 때문이다. 테이프의 일부가 파손되더라도 압축을 사용하지 않고 저장된 경우에는 파손되지 않은 파일은 상당히 많이 복구할 수 있다.

테이프 드라이브는 문자 장치이기 때문에, 실제 파일 이름을 지정하는 것은 불가능하다. 따라서, tar 에서 파일 이름에 해당하는 인자는 장치의 이름 즉 ``/dev/nst0'' (스카시 버스에 연결된 첫번째 테이프 장치) 와 같은 방식으로 지정하여야 한다.

Note: 주의: ``/dev/nst0'' 장치는 백업 셋트를 다 기록한 다음 자동으로 되감기를 하지 않는다; 따라서 하나의 테이프에 여러개의 셋트를 기록할 수 있다. (같은 장치를 ``/dev/st0'' 라고 지정하게 되면 백업 셋트가 기록되자마자 테이프는 자동으로 감기게 된다.)

백업 셋트에 파일이름을 지정할 수 없기 때문에, ``--label'' 옵션을 사용하여 저장 파일 자체에다가 백업 셋트에 대한 추가 정보를 저장할 수 있다.

마지막으로, ``/etc/'', ``/home/'', ``/usr/local'', ``/var/spool/'' 에 있는 파일들만 (Squid 캐시 자료 파일은 빼고) 테이프에 기록된다.

테이프를 이용할 때에는 테이프를 되감거나 꺼내기 위하여 다음과 같은 명령을 사용하게 된다:

mt -f /dev/nst0 rewind
mt -f /dev/nst0 offline

Tip: 팁: 저장 파일이 만들어질 때 맨 앞에 있는 ``/'' (슬래시) 문자는 잘리는 것을 보게 될 것이다. 이는 tar 의 기본적인 동작 방식으로서 복구하는 과정에서 실수로 중요한 파일을 옛날 버전의 파일로 덮어쓰는 것을 막기위한 것이다. 만약 이런 식으로 동작하는 것을 원하지 않는다면 (이것도 하나의 기능 이라는 사실을 기억하라!), tar 명령에다가 ``--absolute-paths'' 옵션을 주면 맨 앞의 슬래시가 보존된다. 물론, 나는 이렇게 하는 것이 위험 하기 때문에 권장하지는 않는다!

``KDat'' 를 이용한 백업:

만약 KDE 데스크탑 환경을 사용하고 있다면, ``KDat'' 유틸리티가 강력할 뿐만 아니라 사용하기도 편리하다는 것을 알게될 것이다. 게다가, 한가지 덤으로 따라오는 것은 KDat 가 ``tar'' 를 백업 엔진으로 사용한다는 점이다. 따라서, KDat 로 기록된 백업 셋트는 KDat 로 읽을 수 있을 뿐만 아니라 tar 를 이용해서도 읽을 수 있다! 따라서 KDat 는 사용의 편리성과 백업의 이식성을 동시에 만족하는 아주 좋은 선택이 되는 것이다.

Tip: 팁: KDE 패키지를 사용하지 않거나 전체를 다 설치하지 않기로 하였다고 하더라도, Qt 라이브러리만 설치한다면 여전히 KDat 를 사용할 수는 있다.

처음으로 KDat 프로그램을 실행시킬 때 백업 프로파일을 만들 필요가 있다. 그러한 프로파일은 KDat 에게 시스템에서 어느 파일을 백업하고 싶은지를 알려주는 역할을 한다. 만약 필요하다면 여러개의 백업 프로파일을 만들 수도 있다. (예를 들어, 시스템 전체를 백업해주는 "전체 백업" 이라는 프로파일과 사용자 파일만 백업해주는 "빠른 백업" 이라는 프로파일을 각각 만들어 두고 필요에 따라 골라 쓸 수 있다.)

백업 프로파일을 만들려면, 메뉴 바에서 "File" 옵션에서 "Create Backup Profile" 을 선택하거나 또는 "Backup Profiles" 폴더에서 오른쪽 버튼을 누른다음 "Create Backup Profile" 을 선택하면 된다. KDat 창의 오른쪽 편에서는 프로파일의 이름, 저장 파일의 이름, tar 옵션 등 다양한 셋팅을 바꿀 수 있다. 이러한 셋팅이 어디에 쓰이는 지를 알려면 메뉴에서 "Help" 를 선택하여 살펴보면 된다.

백업 프로파일에 포함시킬 파일을 지정하려면, ``/'' 디렉토리 폴더의 옆에 있는 체크박스를 클릭하면 된다. 이렇게하면 이 디렉토리 아래의 모든 파일을 백업하도록 지정한 것이 된다. 그러고 나서, 폴더의 옆에 있는 조그마한 ``+'' 표시를 클릭한다. 그러면 폴더가 확장되어 그 안에 들어있는 파일의 목록을 보여준다. 여기서 백업에 포함시키고 싶지 않은 파일을 빼낼 수 있다; 빼고 싶은 파일이나 디렉토리 옆에 있는 체크박스를 클릭해주기만 하면 된다. 예를 들어, 전체 백업은 모든 파일과 디렉토리는 체크 표시를 해주고 단, ``/proc'' (실행 중인 시스템에 대한 정보를 갖고 있는 가짜 파일 시스템), ``/mnt'' (씨디롬 드라이브, 플로피, 네트웍 공유 등이 대개 마운트되는 디렉토리), 그리고 Squid 를 사용하고 있다면, ``/var/spool/squid'' (Squid 의 캐시 데이터 파일) 만 예외로 빼준다. 일단 필요한 파일을 선택하였다면 만들고 있는 백업 프로파일을 클릭하고 "Files >>" 버튼을 클릭하여 선택된 파일 목록을 백업 프로파일로 옮긴다.

Note: 주의: 자료의 규모가 너무 커서 하나의 테이프에 모두 담을 수 없다면, 여러개의 백업 프로파일을 만들어서 각기 백업할 대상의 일부를 담당하도록 하여야 한다.

실제로 백업을 수행하려면, 드라이브에 테이프를 넣고나서 "File" 메뉴에서 "Mount Tape" 를 선택한다. (또는 테이프같이 생긴 아이콘을 클릭한다) 이렇게 하면 테이프를 "마운트" 하게 된다. (실제로는 테이프 장치가 문자 장치이기 때문에 마운트하는 것이 불가능하다 -- KDat 가 실제로 하는 일은 테이프를 되감고 헤더 정보를 읽으려고 시도하여 만약 읽을 수 있으면 해당되는 테이프 색인을 찾아낸다. 만약, 헤더 정보를 읽을 수 없으면 KDat 는 테이프를 포맷하라고 할 것이다.)

Note: (주의: 만약 드라이브에 테이프가 확실히 들어있는데도 계속해서 KDat 가 테이프가 드라이브에 들어있지 않다고 투덜대면 preference 에 테이프 장치의 이름이 제대로 되어 있는지 확인하여야 한다; 메뉴 바에서 "Edit" 옵션을 클릭하고 "User Preferences" 를 선택하면 된다.)

일단 KDat 가 테이프를 마운트하고 나면 백업을 시작하기에 앞서 이번 백업에서 어느 백업 프로파일을 사용할 것인지를 선택하여야만 한다. 백업을 시작하려면, 원하는 백업 프로파일을 오른쪽 버튼으로 클릭한 뒤 "Backup" 옵션을 클릭해주면 된다. 그러면 KDat 는 당신이 선택한 백업 프로파일에 대한 상세한 내용을 보여주는 대화상자를 보여준다; 여기에서 백업을 시작하려면 "Ok" 버튼을 클릭하면 된다.

백업이 진행되는 동안, KDat 는 다양한 통계 정보 (작업 시간, 백업의 크기, 백업한 비율, 남은 시간의 예상치, 파일의 수, 기록된 바이트 수 등) 와 백업된 파일의 목록을 나타내는 대화상자를 보여줄 것이다. 수 기가 바이트에 달하는 전체 백업은 끝나는데 까지 몇시간이 걸릴 것이다. 만약 필요하다면 백업이 진행되는 중에 언제라도 "Abort" 버튼을 눌러 백업을 중단시킬 수 있다.

일단 백업이 완전히 끝나고 나면, 메뉴 바에서 "Edit" 를 선택한다음 "Unmount Tape" 를 선택하여 테이프의 마운트를 해제하거나 테이프 모양의 아이콘을 클릭하여 테이프를 되감은 뒤 튀어나오게 할 수 있다.