/etc/named.conf 파일에서

options {
listen-on port 53 { 192.168.100.1; }; <=== 이부분 수정
// 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; };
recursion yes;
};

나머지는 그대로...

/etc/named.rfc1912.zones 파일에서는
// Config Primary DNS

zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};

zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};

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

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

// Add test domain


zone "test.co.kr" IN {
type master;
file "test.hosts";
};

zone "100.168.192.in-addr.arpa" IN {
type master;
file "192.168.100.rev";
};

[/var/named/chroot/var/named]# cat test.hosts
$TTL 86400
@ IN SOA ns.test.co.kr. root.test.co.kr. (
2009030300 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.test.co.kr.
ns IN A 192.168.100.1
www IN A 192.168.100.2
ftp IN A 192.168.100.3
blog.test.co.kr. IN A 192.168.100.4

[/var/named/chroot/var/named]# cp test.hosts 192.168.100.rev 복사하여
아래처럼 수정하면 된다.

[/var/named/chroot/var/named]# cat 192.168.100.rev

$TTL 86400
@ IN SOA ns.test.co.kr. root.test.co.kr. (
2009030300 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.test.co.kr.
1 IN PTR ns.test.co.kr.
2 IN PTR www.test.co.kr.
3 IN PTR ftp.test.co.kr.
4 IN PTR blog.test.co.kr.
[/var/named/chroot/var/named]#

그런다음 아래처럼 /var/named 디렉토리에 링크를 건다.
cd /var/named 로 이동후
[/var/named]# ln -s /var/named/chroot/var/named/test.hosts test.hosts
[/var/named]# ln -s /var/named/chroot/var/named/192.168.100.rev 192.168.100.rev
[/var/named]#
[/var/named]# ifconfig eth0:1 192.168.100.1 <== dns ip 를 올려주어야 한다.
그렇지 않으면 dns 서버에 접속할수 없으므로 도메인 질의를 할수 없다.

[/var/named]# cat /etc/resolv.conf
;nameserver 168.126.63.1 <== 기존의 찾을 dns 는 주석처리하고
nameserver 192.168.100.1 <== 자신이 만든 dns 를 등록한다.
[/var/named]#

여기까지 완료되었으면

[/var/named]# ping 192.168.100.1 ; dns 가 살아있는지 확인.
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.144 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=0.096 ms
^C

[/var/named]# service named start <== dns 가 이미 올라와 있는 상태이면
(service named restart 하여야 한다)
named 시작 중: [ OK ]
[/var/named]#

[/var/named]# nslookup www.test.co.kr
Server: 192.168.100.1
Address: 192.168.100.1#53

Name: www.test.co.kr
Address: 192.168.100.2

[/var/named]# nslookup ftp.test.co.kr
Server: 192.168.100.1
Address: 192.168.100.1#53

Name: ftp.test.co.kr
Address: 192.168.100.3

[/var/named]# nslookup 192.168.100.3
Server: 192.168.100.1
Address: 192.168.100.1#53

3.100.168.192.in-addr.arpa name = ftp.test.co.kr.

[/var/named]#

* 테스트가 잘됨을 알수 있다.

그런데 잘 안되면...
아래처럼 로그 파일을 확인해서 에러를 찾고 고쳐서 dns 서버를 재구동 하여야 한다.
[/var/named]# tail -10 /var/log/messages
Feb 21 02:23:29 fedora165 named[5644]: zone 0.in-addr.arpa/IN: loaded serial 0
Feb 21 02:23:29 fedora165 named[5644]: zone 1.0.0.127.in-addr.arpa/IN: NS '1.0.0.127.in-addr.arpa' has no address records (A or AAAA)
Feb 21 02:23:29 fedora165 named[5644]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
Feb 21 02:23:29 fedora165 named[5644]: zone 100.168.192.in-addr.arpa/IN: loaded serial 2009030300
Feb 21 02:23:29 fedora165 named[5644]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: NS '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa' has no address records (A or AAAA)
Feb 21 02:23:29 fedora165 named[5644]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0
Feb 21 02:23:29 fedora165 named[5644]: zone test.co.kr/IN: loaded serial 2009030300
Feb 21 02:23:30 fedora165 named[5644]: zone localhost.localdomain/IN: loaded serial 0
Feb 21 02:23:30 fedora165 named[5644]: zone localhost/IN: loaded serial 0
Feb 21 02:23:30 fedora165 named[5644]: running
[/var/named]#

'Log > Linux' 카테고리의 다른 글

리눅스 방화벽 - iptables  (0) 2011.11.28
apache / php / mysql 설치 및 연동  (0) 2011.11.28
NFS 서비스  (0) 2011.11.28
dns 설정 실습  (0) 2011.11.28
DNS - Secondary(Slave) 구성  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:31 Log/Linux

NFS 서비스


NFS (Network File System)

- unix 또는 리눅스 host 간의 파일시스템 및 디렉토리 공유.
단. 파일은 공유 대상이 아니다. 공유대상은 파일시스템의
마운트 포인터이거나 단순한 디렉토리이다.

서버에서 공유자원을 걸어두면 nfs 클라이언트가 공유자원에
주어진 권한을 가지고 접근할 수 있다.

nfs 서비스 연결 과정

1. client 는 mount 가 mount 데몬의 포트 넘버를 알려달라고
portmap 데몬(111번 포트사용)에게 요청한다.
(rpc.mountd 는 동적포트를 사용하는 서비스이므로 포트넘버가 고정되어 있지 않고
올라올때 마다 바뀔수 있다)

- 대부분의 서비스는 미리정해진 정적포트를 사용하지만 mount 데몬같은 일부 서비스는
동적포트를 사용한다.
- 동적포트를 사용하는 서비스는 services 파일에 등록되어 있지 않다.
- 그래서 클라이언트는 동적포트를 사용하는 서비스에 접속하기위해서는 포트 넘버를
먼저 알수 있어야 하며 그래서 모든 동적 포트를 사용하는 서비스에 접속하는 클라이언트는
portmap 데몬에 먼저 접속하게 된다.

2. 서버측에서는 portmap 데몬이 mount데몬(rpc.mountd)의 포트넘버를 확인해서 알려준다.

3. client 는 mount 가 서버측에서 알려준 port 번호로 다시 접속을 시도한다.

4. 서버측의 mount 데몬은 client 가 mount 를 할 수 있도록 허용받은 주소인지를 확인하고
허용받은 주소라면 공유자원을 마운트 되게 한다. 그렇지 않으면 mount 를 거부한다.

5. 클라이언트는 마운트 한 서버측 자원을 읽기 또는 읽기/쓰기 권한으로 접근하여 파일을
읽거나 만들 수 있다.


nfs 서버 설정

nfs 서버는 standalone 방식으로 구동되며 /etc/init.d/nfs 스크립트 파일을 실행하면 된다.


- 설정파일은 /etc/exports 파일이며 설정 방법은 단순하다.

[root@star init.d]# cat /etc/exports
/share 192.168.37.10 => /share 자원을 마운트 할수 있는 클라이언트는 192.168.37.10 만 가능하다.
/share2 192.168.37.10(rw,sync) => 괄호안에 있는 것은 권한과 옵션이다. rw - 읽기쓰기권한.
sync 는 클라언트와 동기화 하기 위한 옵션. 디폴트값이다.
/share3 192.168.37.0/255.255.255.0(rw)
/share4 192.168.37.10(rw,no_root_squash) /share4 디렉토리는 192.168.37.10 에서 읽기 쓰기권한으로
마운트 할수 있으며 클라이언트의 root 가 공유자원에 접근시 root 권한을 가지고 접근할 수 있다.
디폴트 옵션은 root_squash 로서 root 가 공유자원에 접근시 nfsnobody 권한으로 접근하게 된다.

공유자원 확인(서버측에서)
[root@star init.d]# showmount -e
Export list for star:
/share3 192.168.37.0/255.255.255.0
/share 192.168.37.10
/share4 192.168.37.10
/share2 192.168.37.10
[root@star init.d]#

공유자원사용(클라이언트측에서)

mount -t nfs 서버ip(또는 도메인이나 host명):/share /mnt/nfs1

이렇게 mount 해서 사용하면 된다.

리부팅후에도 계속 공유자원을 사용하려면 /etc/fstab 파일에

server1:/share /mnt/nfs1 nfs defaults 0 0

<= 맨 끝에는 0 0 으로 한다. 이것은 nfs 자원은 자신의 것이 아니므로
부팅시 파일시스템 체크를 할 필요가 없기때문이다.


그리고 사용하지 않으려면 간단히 마운트 해제 하면 된다.

umount /mnt/nfs1

[root@star init.d]

===========================================
추가사항

sync : Reply to requests only after the changes have been committed to stable storage
nfs 마운트 포인터에 파일생성시 파일생성을 동기화 한후에 다음 요청을 받아들이게 한다.

async : This option allows the NFS server to violate the NFS protocol and reply to requests before any
changes made by that request have been committed to stable storage (e.g. disc drive).
Using this option might improve performance with version 2 only, but at the cost that an unclean
server restart (i.e. a crash) can cause data to be lost or corrupted.

nfs 마운트 포인터에 파일생성시 파일생성이 동기화 되기전에도 다음 요청을 받아들인다.
이럴경우 데이터 기록에 대한 안정성이 떨어진다.
그리고 nfs 서버 버전2일때만 성능향상을 기대할 수 있다.
그러므로 nfs 서버버전이 2 버전이 아니라면 이 옵션을 사용할 이유가 없다.

*. 현재 centos5.x 버전이라면 디폴트 nfs 서버버전은 3 버전이다.


all_squash : nfs 서버의 공유자원에 접근하는 모든 nfs 클라이언트 계정을 anonymous user 로 취급한다.
anonuid / anongid : anonymous 의 계정이나 그룹을 특정 uid 권한 또는 특정 gid 권한을 가지게 한다.

공유자원 설정예제.
# sample /etc/exports file
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub (ro,insecure,all_squash)

secure / insecure 옵션

secure This option requires that requests originate on an internet port less than IPPORT_RESERVED (1024). This
option is on by default. To turn it off, specify insecure.


1024 번 이하 포트까지는 well-known port 이고 특별한 목적으로 예약되어 있다.
secure는 이 포트들을 사용하고 1024 이상의 포트를 사용한 연결을 허용하지 않는다.
default 옵션은 secure 이다.

no_wdelay
This option has no effect if async is also set. The NFS server will normally delay committing a write
request to disc slightly if it suspects that another related write request may be in progress or may arrive
soon. This allows multiple write requests to be committed to disc with the one operation which can improve
performance. If an NFS server received mainly small unrelated requests, this behaviour could actually reduce
performance, so no_wdelay is available to turn it off. The default can be explicitly requested with the wde-
lay option.

이 옵션은 async 옵션과 같이 사용할 수 없다.
NFS 서버는 쓰기 요청에 대해 일반적으로 작은 크기의 데이터가 들어오면 그것을 모아두었다가
한번에 기록을 하는것이 성능상 유리할 것이다. nfs 는 실제로 디스크에 데이터를 쓸때까지 잠시
지연시간을 두기도 하는데 no_wdelay 옵션은 데이터가 오면 즉시 기록하는 방식이다.

*. 공유자원 정보 갱신 및 확인
exportfs(8) exportfs(8)

NAME
exportfs - maintain list of NFS exported file systems

SYNOPSIS
/usr/sbin/exportfs [-avi] [-o options,..] [client:/path ..]
/usr/sbin/exportfs -r [-v]
/usr/sbin/exportfs [-av] -u [client:/path ..]
/usr/sbin/exportfs [-v]
/usr/sbin/exportfs -f

/etc/exportfs 내용을 수정한 경우
nfs 서비스 재시작 하지 않고도 exportfs 명령으로 수정한 내용을
바로 적용할 수 있다.
-r Reexport all directories. It synchronizes /var/lib/nfs/xtab with /etc/exports. It
removes entries in /var/lib/nfs/xtab which are deleted from /etc/exports, and remove any
entries from the kernel export table which are no longer valid.

서버의 공유자원 정보는 showmount 또는 exportfs 명령어로 확인할 수 있다.
[root@centos100 ~]# showmount -e server
Export list for server:
/var/share 192.168.203.100/255.255.255.0

[root@centos1 ~]# exportfs
/var/share 192.168.203.100/255.255.255.0
[root@centos1 ~]# exportfs -v
/var/share 192.168.203.100/255.255.255.0(ro,wdelay,root_squash,no_subtree_check,anonuid=65534,anongid=65534)
[root@centos1 ~]#

공유자원을 해제 하고 싶을때는
exportfs -u 옵션을 사용하면 된다.
-u Unexport one or more directories.

[root@centos1 ~]# showmount -d [server] ; 클라이언트에 의해 마운트되어 있는 디렉토리만 출력해준다.
Directories on centos1:
/var/share2
-d or --directories
List only the directories mounted by some client.

'Log > Linux' 카테고리의 다른 글

apache / php / mysql 설치 및 연동  (0) 2011.11.28
fedora9 dns 서버 설정 테스트 내용.  (0) 2011.11.28
dns 설정 실습  (0) 2011.11.28
DNS - Secondary(Slave) 구성  (0) 2011.11.28
DNS - Primary DNS 설정 및 테스트  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:31 Log/Linux

dns 설정 실습

*. 설정하기전에 잘못될 경우를 대비하여 원본 설정파일은
백업 해 둔다.

=> cp /etc/named.conf /etc/named.conf_org

[root@vhost26 named]# cat /etc/named.conf
//
// named.conf for Red Hat caching-nameserver
//

options {
directory "/var/named";
};

zone "." IN {
type hint;
file "named.ca";
};
/*
zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
*/

zone "abc.co.kr" IN {
type master;
file "abc.zone";
};

zone "10.168.192.in-addr.arpa" IN {
type master;
file "192.168.10.rev";
};

==> 복잡한 설정을 쉽게 이해하기 위해 꼭 필요한 부분만 남겨두고 나머지는 삭제하거나
주석처리하였다. 그런다음 임의의 하나의 도메인을 등록하였다.

그리고 세부설정 파일은 /etc/named.conf 파일의 options 는 /var/named 로 되어 있으나
chroot 기능 사용으로 인하여 아래의 디렉토리에 존재해야 한다.

[root@vhost26 named]# pwd
/var/named/chroot/var/named => 여기에 세부설정 파일을 만들어야 한다.
[
root@star named]# cp named.local abc.zone => 포맷이 일정하므로 복사해서 수정하면 쉽게
만들수 있다.
[root@vhost26 named]# cat abc.zone => 이 출력결과가 가리키는 것처럼 설정
$TTL 86400
@ IN SOA ns.abc.co.kr. root.ns.abc.co.kr. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.abc.co.kr.

www IN A 192.168.10.1 =>테스트를 위해 임의의 ip 지정
ns IN A 192.168.10.100 (단, 이대역의 주소는 named.conf 에
ftp.abc.co.kr. IN A 192.168.10.2 reverse 영역으로 설정되어 있어야 한다)
[root@vhost26 named]#
[root@star named]# cp abc.zone 192.168.10.rev => reverse 파일도 설정형태가 forward
파일과 유사하므로 복사해서 작업한다.

[root@vhost26 named]# cat 192.168.10.rev
$TTL 86400
@ IN SOA ns.abc.co.kr. root.ns.abc.co.kr. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.abc.co.kr.

1 IN PTR www.abc.co.kr. <= 왼쪽 숫자 1은 호스트 ip 끝자리이며 192.168.10.1 을 의미
2 IN PTR ftp.abc.co.kr.
100 IN PTR ns.abc.co.kr.
[root@vhost26 named]#

이렇게 설정한 다음 dns 서버 테스트를 위해 몇가지 작업이 더 필요하다.
먼저 dns 서버 ip 가 활성화 되어 있어야 한다.

물리적인 랜카드에 직접 ip를 할당해도 되지만 편의상 가상 랜카드로 테스트한다.

ifconfig eth0:1 192.168.10.100 up

[root@star named]# ping -c 3 192.168.10.100
PING 192.168.10.100 (192.168.10.100) 56(84) bytes of data.
64 bytes from 192.168.10.100: icmp_seq=0 ttl=64 time=0.120 ms
64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.094 ms
64 bytes from 192.168.10.100: icmp_seq=2 ttl=64 time=0.451 ms

--- 192.168.10.100 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.094/0.221/0.451/0.163 ms, pipe 2
[root@star named]#

==> dns 서버 ip 는 문제가 없음을 알수 있다.

그 다음 로컬(this host)호스트에서 dns 서버를 직접 테스트하기 위해서는
/etc/resolv.conf 를 열어서 기존에 설정된 dns 주소는 주석으로 처리해두고
직접 구성한 dns 서버 주소를 적어 넣는다. 아래처럼.

[root@star named]# cat /etc/resolv.conf
;nameserver 168.126.63.1 => 여기서 ';' 이 주석을 의미하는 기호이다.
nameserver 192.168.20.101

여기까지 되었으면 dns 서버가 현재 구동중인지 확인해보고 구동중이라면
restart 하고 그렇지 않으면 start 한다.

dns 서버는 standalone 서버이므로 올라가 있지 않다면 직접 올려줘야 한다.
[root@star named]# pgrep -fl named
[root@star named]# => 현재 구동되어 있지 않은 상태이므로
[root@star named]# /etc/init.d/named start => start 인수를 줘서 구동한다.
named (을)를 시작합니다: [ 확인 ]

[root@star named]# pgrep -fl named
29362 /usr/sbin/named -u named -t /var/named/chroot => 올라왔다.
[root@star named]#

여기서 u 옵션은 named 데몬의 소유주 권한을 named 계정으로 하겠다는 의미.
-t 옵션은 보안을 위해서 chroot 기능을 사용하겠다는 의미이며 -t 에 해당되는
디렉토리는 설정파일 경로이다.

만약 -t 옵션을 생략한다면 위에 설정한 /etc/named.conf 파일에 포함된 세부설정
파일위치는 options 키워드가 가리키는 디렉토리 즉, /var/named 바로 아래에 존재
해야 한다.
-t 옵션은 /etc/init.d/named 라는 스크립트에 기본적으로 포함되어 있다.
OPTIONS="${OPTIONS} -t ${ROOTDIR}" <= 이 부분이이다.

그리고 테스트

[root@star named]# nslookup www.abc.co.kr => 이건 비대화식 질의
Server: 192.168.10.100
Address: 192.168.10.100#53

Name: www.abc.co.kr
Address: 192.168.10.1

[root@star named]# nslookup => 이건 대화식 질의
> ftp.abc.co.kr => 정방향(forward) 질의
Server: 192.168.10.100
Address: 192.168.10.100#53

Name: ftp.abc.co.kr
Address: 192.168.10.2
> 192.168.10.2 => 역방향(reverse) 질의
Server: 192.168.10.100
Address: 192.168.10.100#53

3.10.168.192.in-addr.arpa name = ftp.abc.co.kr.
>exit
[root@star named]#

- 이 테스트 결과는 dns 서버가 문제가 없음을 보여준다.

만약 질의 결과가 제대로 검색되지 못하면 dns 서버 설정에 문제가 있는것이다.
그런경우 dns 설정을 확인해서 제대로 수정한다음 dns 서버를 다시 구동시켜서
테스트 해야 한다.

'Log > Linux' 카테고리의 다른 글

fedora9 dns 서버 설정 테스트 내용.  (0) 2011.11.28
NFS 서비스  (0) 2011.11.28
DNS - Secondary(Slave) 구성  (0) 2011.11.28
DNS - Primary DNS 설정 및 테스트  (0) 2011.11.28
dns 설정파일 문법  (0) 2011.11.28
Posted by logwatch
*** slave DNS 설정

//
// named.conf for Red Hat caching-nameserver
//

options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

zone "." IN {
type hint;
file "named.ca";
};

zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

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

zone "lee.pe.kr" IN {
type slave;
file "slaves/lee.hosts";
masters { 192.168.20.101; };
};

zone "20.168.192.in-addr.arpa" IN {
type slave;
file "slaves/192.168.37.rzone";
masters { 192.168.20.101; };
};


zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local";
allow-update { none; };
};

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

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

include "/etc/rndc.key";

'Log > Linux' 카테고리의 다른 글

NFS 서비스  (0) 2011.11.28
dns 설정 실습  (0) 2011.11.28
DNS - Primary DNS 설정 및 테스트  (0) 2011.11.28
dns 설정파일 문법  (0) 2011.11.28
DNS - Domain Name Service  (0) 2011.11.28
Posted by logwatch
*** master DNS 설정

[root@star named]# cat /etc/named.conf
//
// named.conf for Red Hat caching-nameserver
//

options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

zone "." IN {
type hint;
file "named.ca";
};

zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

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

zone "lee.pe.kr" IN {
type master;
file "lee.zone";
allow-update { none; };
allow-transfer { 192.168.20.200; };
};


zone "20.168.192.in-addr.arpa" IN {
type master;
file "192.168.20.rzone";
# allow-update { 192.168.20.200; };

allow-transfer { 192.168.20.200; };
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN
{
type master;
file "named.ip6.local";
allow-update { none; };
};

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

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

include "/etc/rndc.key";

[root@star named]# cat lee.zone
$TTL 86400
@ IN SOA lee.pe.kr. root.lee.pe.kr. (
20080728 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.lee.pe.kr.
IN NS ns2.lee.pe.kr.

ns IN A 192.168.20.101
ns2 IN A 192.168.20.200
www IN A 192.168.20.102
@ IN A 192.168.20.102
[root@star named]#

[root@star named]# cat 192.168.20.rzone
$TTL 86400
@ IN SOA lee.pe.kr. root.lee.pe.kr. (
20080728 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.lee.pe.kr.
IN NS ns2.lee.pe.kr.

101 IN PTR ns.lee.pe.kr.
102 IN PTR www.lee.pe.kr.
200 IN PTR ns2.lee.pe.kr.
[root@star named]#

[root@star named]# cat /etc/resolv.conf
;nameserver 168.126.63.1
nameserver 192.168.20.101

[root@star named]# /etc/init.d/named start
named (을)를 시작합니다: [ 확인 ]

[root@star named]# pgrep -fl named
24828 /usr/sbin/named -u named -t /var/named/chroot

*. 보안을 위해서 과거버전과 달리 /var/named 가 아닌 /var/named/chroot 에서 설정파일을 찾는다.
*. chroot 기능을 사용하지 않으려면 /usr/sbin/named -u named 로 실행하면 된다.

[root@star named]# cat /etc/resolv.conf => 직접구성한 dns 서버를 현재 호스트에서 직접 테스트 하려면
;nameserver 168.126.63.1
nameserver 192.168.20.101 => 이것을 직접구성한 dns ip 로 바꾸어야 한다.
[root@star named]#

그리고 아래결과처럼 dns 서버의 ip 는 설정되어 있어야 하고 활성화 되어 있어야 한다.
그래야 클라이언트의 요청에 dns 서버가 응답할 수 있다.

[root@star named]# ifconfig eth0:1
eth0:1 Link encap:Ethernet HWaddr 00:0C:29:9E:9E:DF
inet addr:192.168.20.101 Bcast:192.168.20.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:10 Base address:0x2000

[root@star named]#

그리고 ping 으로 응답하는지 확인해본다.

[root@star named]# ping 192.168.20.101
PING 192.168.20.101 (192.168.20.101) 56(84) bytes of data.
64 bytes from 192.168.20.101: icmp_seq=0 ttl=64 time=1.44 ms
64 bytes from 192.168.20.101: icmp_seq=1 ttl=64 time=0.008 ms

--- 192.168.20.101 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.008/0.727/1.446/0.719 ms, pipe 2
[root@star named]#

=> 정상적으로 응답하고 있음을 알수 있다.

[root@star named]# nslookup <= dns 에 등록된 도메인을 확인하는 명령어이다.
> www.lee.pe.kr
Server: 192.168.20.101
Address: 192.168.20.101#53

Name: www.lee.pe.kr
Address: 192.168.20.102
> 192.168.20.101
Server: 192.168.20.101
Address: 192.168.20.101#53

101.20.168.192.in-addr.arpa name = ns.lee.pe.kr.
> www.yahoo.co.kr
Server: 192.168.20.101
Address: 192.168.20.101#53

Non-authoritative answer:
www.yahoo.co.kr canonical name = yahoo.co.kr.
Name: yahoo.co.kr
Address: 119.161.11.206
Name: yahoo.co.kr
Address: 203.212.171.217
> lee.pe.kr
Server: 192.168.20.101
Address: 192.168.20.101#53

Name: lee.pe.kr
Address: 192.168.20.102
> exit

[root@star named]#

*. dns 서버가 제대로 동작 하지 않는다면 로그 파일을 보고 어디에 문제가 있는지를 찾아내서 고쳐야 한다.
*. dns 의 로그기록은 /var/log/messages 파일에 저장되어 있다.

[root@star named]# tail -10 /var/log/messages
Aug 16 02:23:04 star named[24828]: zone localhost/IN: loaded serial 42
Aug 16 02:23:04 star named[24828]: running
Aug 16 02:23:04 star named[24828]: zone lee.pe.kr/IN: sending notifies (serial 20080728)
Aug 16 02:23:04 star named[24828]: zone 20.168.192.in-addr.arpa/IN: sending notifies (serial 20080728)
Aug 16 02:23:04 star named[24828]: client 192.168.20.101#32769: received notify for zone 'lee.pe.kr'
Aug 16 02:23:05 star named[24828]: client 192.168.20.101#32769: received notify for zone '20.168.192.in-addr.arpa'
Aug 16 02:38:02 star crond(pam_unix)[24990]: session opened for user root by (uid=0)
Aug 16 02:38:02 star crond(pam_unix)[24990]: session closed for user root
Aug 16 02:39:02 star crond(pam_unix)[25002]: session opened for user root by (uid=0)
Aug 16 02:39:02 star crond(pam_unix)[25002]: session closed for user root
[root@star named]#


######################################################
설정 예. (centos 5.x)

named.caching-nameserver.conf 파일을 테스트를 위해 아래처럼 수정합니다.
이 파일이 없으면 yum install caching-nameserver 명령어로 설치부터해야합니다.

1 //
2 // named.caching-nameserver.conf
3 //
4 // Provided by Red Hat caching-nameserver package to configure the
5 // ISC BIND named(8) DNS server as a caching only nameserver
6 // (as a localhost DNS resolver only).
7 //
8 // See /usr/share/doc/bind*/sample/ for example named configuration files.
9 //
10 // DO NOT EDIT THIS FILE - use system-config-bind or an editor
11 // to create named.conf - edits to this file will be lost on
12 // caching-nameserver package upgrade.
13 //
14 options {
15 // listen-on port 53 { 127.0.0.1; };
16 listen-on port 53 { any; };
17 // listen-on-v6 port 53 { ::1; };
18 directory "/var/named";
19 dump-file "/var/named/data/cache_dump.db";
20 statistics-file "/var/named/data/named_stats.txt";
21 memstatistics-file "/var/named/data/named_mem_stats.txt";
22
23 // Those options should be used carefully because they disable port
24 // randomization
25 query-source port 53;
26 // query-source-v6 port 53;
27
28 // allow-query { localhost; };
29 allow-query { any; };
30 allow-notify { any; };
31 };
32 logging {
33 channel default_debug {
34 file "data/named.run";
35 severity dynamic;
36 };
37 };
38 view localhost_resolver {
39 // match-clients { localhost; };
40 match-clients { any; };
41 // match-destinations { localhost; };
42 match-destinations { any; };
43 recursion yes;
44 include "/etc/named.rfc1912.zones";
45 };

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

/etc/named.rfc19212.zones 파일 맨 아래에 아래와
같이 도메인을 하나 추가합니다.

zone "lee.pe.kr" IN {
type master;
file "lee.hosts";
};

zone "100.168.192.in-addr.arpa" IN {
type master;
file "192.168.100.rev";
};

================================
/etc/var/named/chroot/var/named 디렉토리에
lee.hosts 파일을 아래와 같이 작성합니다.
*. 설정할때 주의할점 - 도메인명으로 끝날때는 끝에 root 도메인을 의미하는
마침표를 꼭 붙여줘야 합니다. 그렇지 않으면 제대로 동작하지 않습니다.

1 $TTL 86400
2 @ IN SOA ns.myunix.co.kr. root.myunix.co.kr. (
3 2009072401 ; Serial
4 60 ; Refresh
5 14400 ; Retry
6 600 ; Expire
7 86400 ) ; Minimum
8 IN NS ns.myunix.co.kr.
9 ns IN A 192.168.100.1
10 www IN A 192.168.100.2
11 ftp IN A 192.168.100.3

===================================
/etc/var/named/chroot/var/named 디렉토리에
192.168.100.rev 파일을 아래와 같이 작성합니다.

[root@centos1 named]# cat 192.168.100.rev

1 $TTL 86400
2 @ IN SOA ns.myunix.co.kr. root.myunix.co.kr. (
3 201006133 ; Serial
4 60 ; Refresh
5 14400 ; Retry
6 600 ; Expire
7 86400 ) ; Minimum
8 IN NS ns.myunix.co.kr.
9 1 IN PTR ns.myunix.co.kr.
10 2 IN PTR www.myunix.co.kr.
11 3 IN PTR ftp.myunix.co.kr.

================================================
그리고 작성한 파일퍼미션은 named 가 읽을수 있게 권한 설정을 고쳐주어야합니다.

chgrp named lee.hosts
chgrp named 192.168.100.rev

/etc/resolv.conf 파일은 자신이 테스트할 dns서버를 적어둡니다.
[root@centos1 named]# cat /etc/resolv.conf
nameserver 192.168.100.1

그리고 dns ip 를 하나 할당합니다.
ifconfig eth0:1(또는 eth1:1) 192.168.100.1
그런다음 service named start

여기서 에러가 발생하였다면 /var/log/messages 파일을 보고 에러를 잡아야 합니다.
그리고 dns 설정파일을 수정한 경우에는 설정을 적용하기 위해서 dns 서비슬
재시작 해야 합니다.

nslookup 명령으로 테스트 했을때 문제가 없다면
도메인을 추가로 하나를 더 등록해서 테스트하면 dns 를 이해하는데 더 도움이 될것입니다.

'Log > Linux' 카테고리의 다른 글

dns 설정 실습  (0) 2011.11.28
DNS - Secondary(Slave) 구성  (0) 2011.11.28
dns 설정파일 문법  (0) 2011.11.28
DNS - Domain Name Service  (0) 2011.11.28
압축유틸리티/백업복구/패키지관리  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:29 Log/Linux

dns 설정파일 문법

*. 아래는 dns 설정파일의 기본적인 문법

/etc/named.conf

// comment
/*
comment
*/

기본형식 :
keword {
설정내용 ;

};

ex)
options {
directory path_name;
기타 부가적인 설정...;
}

zone 구문

zone "." IN {
type hint;
file 파일명;
};

zone "domain name" IN {
type master ; => slave dns 일경우 type 은 slave 가 되어야 한다.
file file명;
}

zone "10.168.192.in-addr.arpa" IN {
type master;
file file명;
};

*. 세부설정 파일 문법
1. forward 설정파일

$TTL value
@ IN SOA dns도메인명. 이메일주소. (
serial_number ; serial => 여기서 ';' 은 주석을 의미한다. dns 가 설정이 처음 하는 사람에게
refresh_number; refresh 쉽지않은 부분은 이런 주석까지도 named.conf 에서 사용하는
retry_number; retry 것과 이파일에서 사용하는것이 같지 않은점. 그리고 '.' 을
expire_number; expire 하나 누락해도 동작을 제대로 하지 않는점 이런것들
minmum_number; minimun 때문일것이다.
);

IN NS dns도메인명(호스트명 포함(FQDN)).
hostname IN ip-address
hostname IN ip-address
...
*. hostname 대신에 (FQDN을 사용해도 된다. ex) www.abc.co.kr.
주의할점은 FQDN(host명을포함한 도메인)을 적을때는 맨끝에 '.' 을
반드시 붙여야 한다. 그렇지 않으면 host명으로 간주한다.

$TTL value ; 다른 dns 가 root dns 를 통해서 여기에 있는 정보를 참조했을때
이 정보를 캐시에 담아두는 기간.
ex) $TTL 86400(= $TTL 24h) => 다른 dns 가 여기 있는 정보를 참조하면
여기있는 정보를 24시간동안 캐시에 담아두겠다는 의미.
단위가 없으면 초를 의미하고 h 는 시간 d는 day m은 분, w는 주 이렇게 여거가지
단위를 붙여 표현할수 있다. $TTL 24h = $TTL 1d 와 같은 의미.

serial_number : slave dns 가 primary dns zone 설정을 업데이트 하기 위한
값으로 사용된다. slave dns 는 자신이 가지고 있는 zone 파일과 이파일을 비교하여
primary dns 에 있는 serial number 가 더 높은 경우에만 업데이트한다.
serial_number 는 기간을 의미 하지 않는다. 보통 날짜 형태의 표기를 한다.
ex) 2009100700

refresh number ; slave dns 가 primary dns 의 설정파일을 업데이트 하는 주기
retry number ; slave dns 가 refresh time 에 도달하여 update 를 하려고 했으나
primary dns 로 부터 응답이 없는경우 재시도 하는시간.
expire number ; slave dns 가 primary dns 와 어떤 문제로 통신이 되지 않게되면
slave dns 가 가지고 있는 정보는 신뢰성이 떨어지게 된다.
그걸경우 데이터를 파기하는 시간이다.
minimum number ; $TTL 과 다소 차이가 있지만 같은 의미로 봐도 된다.
그리고 해당되는 각 설정값은 관리자가 임의로 설정할 수 있다.
$TTL value <= 맨 첫번째 줄에 이부분이 와야 한다.
이거 없어도 동작하지만 경고메시지가 출력될것이다.
@ IN SOA dns도메인명. 이메일주소. ( <= 두번째 줄은 이부분이 반드시 와야 한다. 문법이 그렇다.

@ => 그 도메인 자체를 의미 ex) abc.co.kr.

IN ; class 이름인데 특별한 의미는 없으며 모든 레코드 앞에 붙인다.

SOA (Start Of Authority) - 권한의 시작을 의미하는 레코드타입
(그냥 반드시 적어야 할 문법으로 생각하면 됨)

dns도메인명 : name server 도메인명을 호스트 이름을 포함하여 적는다.
이메일주소: 설정하는 도메인에 대해서 책임있는 관리자의 이메일 주소를 적는다.
이때 이메일 주소에는 '@' 문자를 포함하면 안된다.
만약 이메일주소가 root@abc.co.kr 이라면 root.abc.co.kr. 이렇게 표기해야 한다.

IN NS dns도메인명(호스트명 포함(FQDN)). ; NS 는 dns를 의미하는 레코드타입.
- 주의 : IN 앞에 반드시 탭키 또는 스페이스 문자가 있어야 한다. 그렇지 않으면 IN 을 호스트명으로
간주하게 된다.

hostname IN A ip-address

- 주의 : hostname 앞에 스페이스 문자가 있으면 안된다. hostname 은 첫칸부터
시작해야 한다.
A (Address 의 약자)는 도메인 -> ip 로 변환하기 위한 레코드 타입.

2. reverse 설정파일

forward 설정파일과 형식이 거의 같은데 다른 부분은 IN NS 부분 다음줄부터이다.

hostname IN ip-address
hostname IN ip-address

==> forward 설정파일의 이부분만 다르다.
ip-address 의 맨 마지막 자리 IN PTR 도메인명.
ex)
1 IN PTR (Pointer 의 약자) www.abc.co.kr.
2 IN PTR 192.168.10.2 ftp.abc.co.kr.

그리고 named.ca 파일은 root dns 를 찾기 위한 파일이며 이파일은 수정하는것이
아니다. 이 파일이 손상 또는 없는 경우라면 국제인터넷 기구 Internic 에서 다운로드
받아야 한다.

다운로드 주소 : ftp.rs.inetetnic.net 익명계정으로 접속하여 다운 받으면 된다.
이름이 named.root 로 올라와 있을수도 있는데 그런경우에는 다운로드 받은후
이름을 named.ca 로 바꾸면 된다.

여기까지는 아주 기본적인 dns 문법이다.
여기까지의 문법과 기본개념을 잘 이해하면 나머지 좀 더 세부적인 부분을 이해하는데는
별로 어렵지 않다.

*. 참고 : CentOS5 인경우의 BIND 설정파일

'Log > Linux' 카테고리의 다른 글

DNS - Secondary(Slave) 구성  (0) 2011.11.28
DNS - Primary DNS 설정 및 테스트  (0) 2011.11.28
DNS - Domain Name Service  (0) 2011.11.28
압축유틸리티/백업복구/패키지관리  (0) 2011.11.28
ftp 서비스 - server  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:28 Log/Linux

DNS - Domain Name Service

dns 서비스

dns 서버는 크게 세가지가 있다.

1. Primary DNS (또는 Master DNS)

2. Secondary DNS (또는 Slave DNS) - 백업 역할을 하는 DNS.
반드시 필요한 것은 아니며 primary dns 가 다운되었을때 대신 서비스 하기 위한것이다.

3. Cache Only DNS


DNS 역할

다른 호스트에 접속시 ip 주소가 반드시 필요하다.
그러나 ip 주소는 기억하기 어려우므로 보통 도메인 이름을 사용한다.
그래서 필요한 것이 DNS 이다.

도메인에 대한 해당 ip 주소를 알려주는것이 DNS 의 주된 역할이다.


도메인이 ip 주소로 변환되는 과정.

1. 클라이언트: http://www.abc.co.kr
2. ip 주소가 아니므로 클라이언트는 ip주소를 알아내기 위해 /etc/host.conf 파일 참조
여기에 order hosts,bind 로 설정되어 있으면 /etc/hosts 에서 해당도메인 정보를 찾고
없으면 그 다음 /etc/resolv.conf 파일을 참조한다. 적혀있는 순서대로 참조한다.
3. /etc/hosts 파일에 없다고 가정하면 /etc/resolv.conf 를 참조하게 되고
거기에 nameserver 168.126.63.1 이 적혀 있으면 그 주소의 서버에게 도메인 주소를
알려 달라고 요청한다.
4. 168.126.63.1 의 dns 서버가 자신이 가지고 있는 dns zone 설정 파일을 참조해서
해당되는 정보가 있으면 ip 를 알려준다.
5. 클라이언트는 ip 를 알게되었으므로 그 ip 를 가지고 서버에 접속한다.


*. 그런데 4번 단계에서 168.126.63.1(kornet) dns 가 www.abc.co.kr 에 대한 설정을 가지고 있지
않으면 조금 복잡해진다.

이런경우 코넷 dns는 최상위 계층에 존재하는 root dns 에게 www.abc.co.kr 에 대한 도메인 주소를
물어본다. 실제 등록된 domain 주소에 대한 ip 주소는 root dns 는 전부 찾을 수 있다.

5. root dns 는 www.abc.co.kr 에 대한 정보를 찾기 위해서 하위 몇단계를 거쳐 찾는다.
그리고 그 정보를 코넷 dns 한테 알려준다.

6. 코넷 dns는 www.abc.co.kr 주소를 캐시영역에 저장해두고 찾은 ip 주소는 클라이언트에게 알려준다.

*. 그 다음 또 어떤 클라이언트가 코넷 dns에게 www.abc.co.kr 의 ip 를 알려달라고 요청하면
이번에는 캐시에 그 정보가 저장되어 있으므로 root dns 에게 묻지 않고 바로 알려준다.

유닉스에서 주로 사용되는 dns 패키지는 bind 이다.

[root@star etc]# rpm -qa | grep bind
bind-utils-9.3.1-4
bind-9.3.1-4
ypbind-1.17.2-5 => 이건 bind 패키지가 아니다.
bind-chroot-9.3.1-4
bind-libs-9.3.1-4

설치되어 있지 않으면 rpm 또는 yum 으로 설치한다.

*. DNS 설정파일

/etc/named.conf

나머지 세부 설정파일은 /etc/named.conf 의 설정에 따라 경로 및 파일이름이 결정된다.

[root@star etc]# cat /etc/named.conf
// <== // 이 기호는 주석으로 사용된다. 한라인 주석.
// named.conf for Red Hat caching-nameserver
//

options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

zone "." IN {
type hint;
file "named.ca";
};

zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

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

/* 여기서 부터는 ipV6 를 위한 설정으로 ipV6 사용하지 않는다면
수정할 필요없이 그대로 두면 된다. (/* ~ */ 이 사이에 있는것은 다 주석으로 처리된다)

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local";
allow-update { none; };
};

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

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

*/

include "/etc/rndc.key";

*. named.conf 파일안에 들어가는 설정은 크게 4가지이다.

첫번째 - 세부 설정파일을 저장할 디렉토리 : option
두번째 - root domain zone
세번째 - Forward zone : 도메인 -> ip 변환
네번째 - Reverse zone : ip -> 도메인 변환

[root@star etc]#

'Log > Linux' 카테고리의 다른 글

DNS - Primary DNS 설정 및 테스트  (0) 2011.11.28
dns 설정파일 문법  (0) 2011.11.28
압축유틸리티/백업복구/패키지관리  (0) 2011.11.28
ftp 서비스 - server  (0) 2011.11.28
ftp 서비스 - client  (0) 2011.11.28
Posted by logwatch

압축유틸리티/백업복구/패키지관리

압축 utility

gzip 리눅스에서 가장 많이 사용되는 압축 프로그램이다.

man gzip
GZIP(1) GZIP(1)
NAME gzip, gunzip, zcat - compress or expand files
(gzip외에 옆에 두개의 gunzip, zcat 명령은 서로 관련 있는 명령어라는 의미이다)
SYNOPSIS gzip [ -acdfhlLnNrtvV19 ] [-S suffix] [ name ... ] (옵션은 역시 많다)
gunzip [ -acfhlLnNrtvV ] [-S suffix] [ name ... ] zcat [ -fhLV ] [ name ... ]

옵션이 많지만 역시 많이 사용되는 것은 몇 개 안된다.

주요옵션

압축시 숫자 1 ~ 9 (정수) : 압축시 사용하는 옵션으로 숫자가 1에 가까울수록 압축효율은 낮고
압축시간을 단축된다.
숫자가 9에 가까울수록 압축효율은 높고 압축시간은 길어진다.

압축해제시 -d (또는 gunzip)

ex)
mkdir /tmp/testcd /tmp/test

[root@river test]# cp /bin/a* /etc/syslog.conf ./ (실습을 위해 몇 개의 파일을 복사한다)

[root@river test]# lsarch ash ash.static aumix-minimal awk syslog.conf

[root@river test]# gzip * a.gz gzip: a.gz: No such file or directory

모든 파일을 압축한 후 a.gz 파일 하나로 만들려고 했으나 되지 않는다.gzip 뒤에 압축할 대상 만 적을 수 있을 뿐이다.
만들어질 파일은 결정하지 못한다. mswinodws 에서 사용되는 압축프로그램처럼 하나로 묶어주는 기능은 갖고 있지 못하다.
이것은 하나의 명령어는 최소한의 필요한 작업만 할 수 있도록 만들어져 있기 때문이다. unix의 철학이기도 하다.
압축 프로그램은 단지 압축과 관련된 일만 한다.

[root@river test]# lsarch.gz ash.gz ash.static.gz aumix-minimal.gz awk.gz syslog.conf.gz

[root@river test]#

파일들이 각각 압축되었다. 그러나 이렇게 압축한다면 관리하기 어려울 것이다. 예를 들어서 인터넷에 올리거나
메일로 보내거나 해야 한다면 지금처럼 몇 개 안되지만 수십 개 또는 수백 개의 파일로 이루어져 있다면 곤란할 것이다.
그런 경우 하나로 묶어줄 필요가 있다.

파일묶기

tar (Tape Archive) - 파일명이 의미하는 것과 같이 tar는 데이터를 자기테이프에 백업하기 위한 용도로 많이 쓰이는 명령어이다.
그러나 압축하기 전에 파일을 먼저 하나로 묶기 위해서도 많이 사용한다.

인터넷에 올라와 있는 linux 관련 소스패키지들은 파일명이 xxx.tar.gz 또는 xxx.tar.bz2 이런식의 이름을 가지는 파일들이 많다.
이 파일명이 의미하는 것은 어떤 파일들을 tar로 먼저 하나로 묶고 그 파일을 다시 압축프로그램으로 압축했다는 의미이다.

물론, 용량이 그리 크지 않다면 tar로 묶기만 하고 압축은 하지 않아도 될 것이다.

tar 주요옵션 (tar 명령어도 옵션이 매우 많다)

파일묶을때

tar -cvf 타겟파일 소스파일(디렉토리도 가능)
-c : 묶기
-v (verbose) : 진행과정을 보여준다.

이 옵션은 부가적인 것이다. 사용하지 않아도 된다.
-f :

묶인파일 풀때

tar -xvf 파일명
-x : 풀기

풀지않고 안에 파일리스트만 보고자 할때
tar -tvf 파일명-t : 묶인 파일 list 보기

ex)[root@river test]# tar -cvf test.tar *archashash.staticaumix-minimalawksyslog.conf
[root@river test]#

[root@river test]# ls -l
합계 1780-rwxr-xr-x 1 root root 2644 5월 9 11:57 arch
-rwxr-xr-x 1 root root 92444 5월 9 11:57 ash
-rwxr-xr-x 1 root root 492968 5월 9 11:57 ash.static
-rwxr-xr-x 1 root root 10456 5월 9 11:57 aumix
-minimal-rwxr-xr-x 1 root root 294332 5월 9 11:57 awk
-rw-r--r-- 1 root root 693 5월 9 11:57 syslog.conf
-rw-r--r-- 1 root root 901120 5월 9 12:10 test.tar
[root@river test]#

생성된 tar 파일 크기가 원래 파일을 다 합한 크기보다 더 크다. 압축된 것이 아님을 알 수 있다.
이제 tar 파일을 압축해보자

우선 압축하기전에 압축효율을 확인해보기 위해 tar 파일을 다른 이름으로 몇 개 복사한다.

[root@river test]# cp test.tar test1.tar

[root@river test]# cp test.tar test2.tar

[root@river test]# cp test.tar test3.tar

[root@river test]# ls -l test*
-rw-r--r-- 1 root root 901120 5월 9 12:10 test.tar
-rw-r--r-- 1 root root 901120 5월 9 12:16 test1.tar
-rw-r--r-- 1 root root 901120 5월 9 12:16 test2.tar
-rw-r--r-- 1 root root 901120 5월 9 12:16 test3.tar

[root@river test]# time gzip test.tar
real 0m0.194suser 0m0.190ssys 0m0.000s

time 명령은 time 의 인수로 사용되는 명령의 실행시간을 측정하는 프로그램이다.
출력 결과 중 real이 명령 실행 시 완료까지 걸린 시간을 나타낸다.

[root@river test]# time gzip test3.tar
real 0m0.194suser 0m0.180ssys 0m0.010s

[root@river test]# time gzip -1 test1.tar
real 0m0.083suser 0m0.080ssys 0m0.000s

[root@river test]# time gzip -9 test2.tar
real 0m0.409suser 0m0.410ssys 0m0.000s

[root@river test]# ls -l test*
-rw-r--r-- 1 root root 901120 5월 9 12:10 test.tar
-rw-r--r-- 1 root root 448839 5월 9 12:16 test1.tar.gz
-rw-r--r-- 1 root root 417022 5월 9 12:16 test2.tar.gz
-rw-r--r-- 1 root root 418790 5월 9 12:16 test3.tar.gz
[root@river test]#

압축효율이 높을수록 시간이 많이 걸리는 것을 알 수 있으며 옵션을 사용하지 않아도 됨을 알 수 있다.
옵션을 사용하지 않았을 때의 압축효율과 시간은 위의 출력결과를 참조하라. 사실, 파일이 아주 크지 않다면
굳이 옵션을 사용해야 할 필요가 없을 것이다.

이번에는 압축해제를 해보자. 압축해제는 압축의 역순으로 해야 한다.

[root@river test]# gunzip test.tar.gz

[root@river test]# tar -tvf test1.tar.gz

[root@river test]# gunzip test1.tar.gz (이것은 gzip -d test1.tar.gz) 와 같다.

[root@river test]# lstest.tar test1.tar test2.tar.gz test3.tar.gz

압축이 풀리면서 용량이 늘어난다.

[root@river test]# tar -tvf test1.tar (풀기 전에 먼저 어떤 파일들을 포함하는지 확인)
-rwxr-xr-x root/root 2644 2007-05-09 11:57:01 arch
-rwxr-xr-x root/root 92444 2007-05-09 11:57:01 ash
-rwxr-xr-x root/root 492968 2007-05-09 11:57:01 ash.static
-rwxr-xr-x root/root 10456 2007-05-09 11:57:01 aumix-minimal
-rwxr-xr-x root/root 294332 2007-05-09 11:57:01 awk
-rw-r--r-- root/root 693 2007-05-09 11:57:01 syslog.conf

[root@river test]# tar -xvf test1.tar
arch
ash
ash.static
aumix-minimal
awk
syslog.conf
[root@river test]# ls
arch ash ash.static aumix-minimal awk syslog.conf test.tar test1.tar test2.tar.gz test3.tar.gz

[root@river test]#

제대로 풀렸다.

bzip2

압축 tool 이 여러 가지가 있으나 압축에 대한 기본개념은 큰 차이가 없다. 그러므로 한 가지 압축프로그래만 잘 알아도
다른 압축툴을 쓰는데 별 어려움이 없을 것이다.

[root@river test]# ls
test.tar

[root@river test]# cp test.tar test1.tar

[root@river test]# cp test.tar test2.tar

[root@river test]# gzip -9 test1.tar

[root@river test]# bzip2 test2.tar

[root@river test]# ls -l
합계 1680
-rw-r--r-- 1 root root 901120 5월 9 12:10 test.tar
-rw-r--r-- 1 root root 417022 5월 9 12:36 test1.tar.gz
-rw-r--r-- 1 root root 385616 5월 9 12:36 test2.tar.bz2
[root@river test]#

test.tar 파일 하나만 남겨두고 모두 삭제한 후 다시 두개의 다른 파일명으로 복사를 했다. 그
리고 gzip 과 bzip2 로 각각 압축했다. 출력결과를 보면 gzip2 로 최대한 압축효율을 높인것 보다
bzip2 로 압축한것이 용량이 더 작다는 것을 알 수 있다. 이것이 bzip2 압축 프로그램의 가장 큰 장점이다.

용량이 아주 큰 파일들은 최대한 용량을 줄이기 위해 bzip2 를 많이 사용한다.
그 외의 경우에는 주로 gzip 을 많이 사용한다.

backup / restore

백업

- 시스템이나 저장된 데이터에 문제가 생겼을때 복원하기 위하여 백업한다.

- 데이터가 손실될수 있는 경우
시스템 크래쉬, 커널패닉,Disk Fail, 하드웨어 장애
운영자의 실수,
허가받지 않은 사용자에 의한 데이터 파괴.
낙뢰, 화재, 침수등의 재난

백업종류

Full backup (완전백업)
파일시스템 전체를 백업

Incremental backup (증분백업)
이전에 백업한 시점을 기준으로 변경되거나 추가된 데이터만 백업

Differential backup (차등백업)
- 전체 백업한 시점을 기준으로 변경되거나 추가된 데이터만 백업
- full backup 이후로 부터 시간이 멀어질수록 백업하는데 시간과 용량이 더 필요해진다.

백업매체
자기테이프,하드디스크, CD-RW,usb 메모리 등 데이터를 기록할 수 있는 각종 매체.

백업 명령어

tar (tape archive)

incremental backup

tar 의 -g, --listed-incremental 옵션이 필요하다.

/dev/sdb2                95195      6822     83458   8% /mnt/backup
/dev/sdb1                95179      5652     84613   7% /home

ex)
/home 디렉토리의 계정을 /mnt/backup 디렉토리에 백업을 받으려면

백업스케쥴은 아래와 같다고 가정.
월 : 풀백업
화 ~ 금 : 증분백업

월 :  tar -g /mnt/backup/home.backup.list -cvzf /mnt/backup/home0.backup.tar.gz ./
화 :   tar -g /mnt/backup/home.backup.list -cvzf /mnt/backup/home1.backup.tar.gz ./
수 :  tar -g /mnt/backup/home.backup.list -cvzf /mnt/backup/home2.backup.tar.gz ./
... 이하생략

*. home.backup.list 은 백업할때의 정보가 저장되고 이후 증분백업할때 참고되어진다.
Restore는 full backup 부터 복구한다음 화요일 -> 수요일 -> 목요일 ... 백업데이터를 차례대로
풀어줘야 한다.

rm -rf /home/*
[root@centos1 home]# tar -xvzf /mnt/backup/home0.backup.tar.gz
[root@centos1 home]# tar -xvzf /mnt/backup/home1.backup.tar.gz
... 이하생략.



백업스크립트

  1 #! /bin/bash
  2
  3 backup_dir=/mnt/backup
  4 time=$(date +%Y%m%d%H%M)
  5 day=$(date +%a)
  6 backup_source=/home
  7
  8 if [ ! -d $backup_dir ]
  9 then
 10     mkdir $backup_dir
 11 fi
 12
 13 if [ $day = "일" ]
 14 then
 15     rm -f $backup_dir/home.backup.list
 16     tar -g $backup_dir/home.backup.list -czf $backup_dir/home_$time.full-backup.tar.gz $backup_source
 17 else
 18     tar -g $backup_dir/home.backup.list -czf $backup_dir/home_$time.backup.tar.gz  $backup_source
 19 fi


*. /etc/crontab 파일에 등록하여 주기적으로 자동 백업이 되게 한다.

ex)
0 1 * * * root /root/bin/backup.sh 

[root@centos1 home]# touch newtestfile
[root@centos1 home]# vi sysuer1/.bash_profile
[root@centos1 home]#

*. 특정디렉토리 제외하려면
[root@centos1 backup]# tar -cvf homeA.tar /home/sysuer1 /home/sysuer2 --exclude /home/sysuer1/test1 --exclude /home/sysuer2/test1/

--exclude 옵션을 사용한다.  
  
 
dd
디스크를 복제하거나 파티션내의 모든 데이터를 복제할때 유용하게 사용될 수 있다.
디스크 전체를 복제할때는 소스디스크와 타겟디스크 용량이 같아야 한다.

dd if=/ of=/dev/st0    ; 파일시스템 전체를 테이프 드라이버에 백업.
dd if=/dev/sda1 of=/dev/st0
dd if=/dev/sda1 of=/dev/sdb1
dd if=/dev/sda of=/dev/sdc

cpio - copy files to and from archives

도움말문서 http://heirloom.sourceforge.net/man/cpio.1.html#1
[root@centos1 ~]# cpio --help
Usage: cpio [OPTION...] [destination-directory]

주요옵션
-o : 표준입력으로부터 경로명의 파일목록을 읽어스 그 파일명을 경로명 상태정보와 함께 표준출력으로 복사.
-i : cpio -o 의 실행결과를 표준입력으로 하여 패턴이 일치하는 파일만 선택한다.
-p : 표준입력으로부터 경로명의 목록을 읽어서 지정한 디렉토리에 파일을 생성하고 복사한다.
-d : 디렉토리가 필요할경우 자동으로 생성한다.
-f : 패턴과 일치하는것을 제외하고 모든 파일복사.
-v : 진행되는 상황을 표시해준다.
-c : 아스키 형태로 정보를 읽거나 저장.
-u : restore 할때 같은 이름의 파일이 있으면 덮어쓴다. 디폴트는 같은 파일이 있는경우 원본의 시간을 비교하여 오래된 파일인 
경우에만 덮어쓴다.


ex)
[root@centos1 home]# ls file1 file2 | cpio -ocv > /backup/test.cpio
file1
file2
1 block
[root@centos1 backup]# cpio -ivc < test.cpio
file1
file2
1 block
[root@centos1 backup]# cat file1
hello

[root@centos1 home]# find . | cpio -ocv > /backup/test2.cpio  : 백업

[root@centos1 test]# cpio -ivc < ../test2.cpio : 복원

[root@centos1 backup]# cpio -t < test.cpio  : resotore 하지 않고 백업된 파일목록을 보는경우
file1
file2
1 block
[root@centos1 backup]# cpio -vt < test.cpio            : 자세히 보려면 v 옵션을 추가한다.
-rw-r--r--   1 root     root            6 Jul 16 06:08 file1
-rw-r--r--   1 root     root            6 Jul 16 06:08 file2
1 block
[root@centos1 backup]#

rpm -Redhat Package Manager

- 초기 리눅스 시스템은 어떤 프로그램을 설치하고자 하면 소스를 받아다가 일일이 컴파일해야 했다.
컴파일에 대한 지식이 없는 사람에게는 매우 힘든 작업이었다. 그러다가 redhat 사에서 rpm 이라는 패키지 관리 툴을 만들어
배포판에 포함함으로써 리눅스 프로그램의 설치,추가,삭제등을 손쉽게 할 수 있게 되었으며 이것이 많은 리눅스 배포판 중에서도
redhat이 널리 사용되게 된 이유중에 하나가 되었다.

rpm 패키지 관리방식은 설치 후 바로 사용할 수 있는 바이너리 파일, 설치될 파일경로, 환경설정파일등을 하나의
패키지에 저장하여 rpm 이라는 명령어를 통해 패키지를 손쉽게 설치,업그레이드,질의,검증,삭제 등이 가능한 방식이다.
mswindows 에서 패키지를 관리하는 것처럼 쉽다.

rpm 패키지 파일의 형태.

fedora os 설치 시디안에 있는 패키지들 역시 rpm 으로 되어있다. cdrom 을 마운트 시키고 확인해 보자

[root@river root]# umount /mnt/cdrom

[root@river root]# mount /mnt/cdrom

[root@river root]# cd /mnt/cdrom/Fedora/RPMS/

[root@river RPMS]# ls -l | more
합계 517140
-rw-r--r-- 77 root root 1837336 2월 24 2003 Suite-0.11.1-13.i386.rpm
-rw-r--r-- 77 root root 558616 2월 24 2003 GConf-1.0.9-10.i386.rpm
-rw-r--r-- 77 root root 733991 2월 24 2003 GConf2-2.2.0-1.i386.rpm
-rw-r--r-- 77 root root 282745 2월 24 2003 Glide3-20010520-25.i386.rpm

... 이하생략

rrpm 패키지는 모두 이런형태의 포맷을 갖는다.

[root@river RPMS]# ls -l httpd*
-rw-r--r-- 75 root root 1056911 2월 26 2003 httpd-2.0.40-21.i386.rpm
-rw-r--r-- 75 root root 832576 2월 26 2003 ttpd-manual-2.0.40-21.i386.rpm
[root@river RPMS]#

웹서버 패키지가 두개가 있다는것을 볼 수 있다.

웹서버패키지를 설치해보자. 그전에 rpm 패키지 형태 및 설치옵션을 간단하게 알아보자.

rpm 패키지의 형태.

패키지명-패키지버전-아키텍처.rpm : 이런 형태로 되어 있다.

ex)
httpd-2.0.40-21.i386.rpm
=> 패키지명 httpd
버전 : 2.0.40-21
아키텍처: i386
확장자 : rpm

아키텍처는 alpha,arm,mips,sparc,i386 등 여러 가지가 있는데 i386 은 인텔cpu 와 호환이 되는것을 의미하는 것으로
일반PC가 여기에 해당된다. 만약 인터넷에서 rpm 파일을 다운로드 받아서 설치하는 경우에는 바이너리 패키지이므로
아키텍처를 잘 확인해야 한다. 자신이 사용하는 cpu에 맞는 아키텍처 여야 한다.

rpm 주요옵션 (rpm은 매우 많은 옵션을 가지고 있다)

설치시(rpm 패키지를 설치한다는 것은 패키지 안에 포함된 파일들을 적당한 디렉토리에 옮겨주는것이다.)
rpm -i 패키지명
그러나 일반적으로 -ivh 형태로 많이 사용한다.
i (install) : 설치. 이 옵션 하나만 사용해도 된다.
v (verbose) : 이 옵션을 사용하면 설치진행과정을 볼 수 있다.
h (hash mark => '#') : 진행과정을 해시마크를 찍어서 보여준다. (ftp client 명령어에 있는 hash와 같은 의미이다.)
--replacepkgs : 덮어쓰기로 설치하고자 하는 경우에 추가하는 옵션이다.

질의옵션

rpm 패키지의 설치 유무를 확인하거나 어떤 경로에 설치되어 있는지를 알고자 하는 경우에 사용하는 옵션이다.

-q : 질의옵션

ex)
[root@river RPMS]#rpm -q httpd
(파일명 대신 패키지명만 적어야한다)
httpd-2.0.40-21 (패키지가 이미 설치되어 있다)[root@river RPMS]#

설치된 모든 rpm 패키지를 보고자 하는 경우에는

root@river RPMS]# rpm -qa | more (a 옵션을 추가한다)
setup-2.5.25-1
bzip2-libs-1.0.2-8
e2fsprogs-1.32-6
glib-1.2.10-10
iputils-20020927-2

-- 이하 생략

설치된 패키지 중 문자열로 검색 할 경우(찾고자 하는 패키지 이름을 정확히 모를 경우)

[root@river RPMS]# rpm -qa | grep mail (찾은 결과를 grep 으로 걸러내면 될 것이다)
mailx-8.1.1-28sendmail-8.12.8-4
mailcap-2.1.13-1mozilla-mail-1.2.1-26
sendmail-cf-8.12.8-4
procmail-3.22-9
fetchmail-6.2.0-3[root@river RPMS]#

rpm 실행시 응답이 없거나 에러가 발생되면 아래와 같은 파일이 잘못되어 그럴수 있다. 그럴때는
[/var/lib/rmp]# ls *db*
__db.000 __db.001 __db.002 __db.003
위에 보이는 db 파일을 삭제하고 새로 생성하면 된다.
rm *db*
rpm --rebuilddb

이제 웹서버 패키지를 설치해보자

[root@river RPMS]# rpm -ivh httpd-2.0.40-21.i386.rpm
경고: httpd-2.0.40-21.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
준비 중... ########################################### [100%]
httpd-2.0.40-21 패키지는 이미 설치되어 있습니다
[root@river RPMS]#

이미 설치되어 있으므로 삭제하고 새로 설치하거나 덮어쓰기로 설치해야 한다.

[root@river RPMS]# rpm -ivh --replacepkgs httpd-2.0.40-21.i386.rpm
경고: httpd-2.0.40-21.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
준비 중... ########################################### [100%]
1:httpd ########################################### [100%]
[root@river RPMS]#

설치가 완료되었다.

이번에는 웹서버 메뉴얼관련 패키지도 설치해보자

[root@river RPMS]# rpm -i httpd-manual-2.0.40-21.i386.rpm
경고: httpd-manual-2.0.40-21.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
[root@river RPMS]#

설치되었다. 설치시 -i 옵션만 사용했을때와 -ivh 옵션을 사용 했을 때의 차이를 알 수 있다.

패키지 설치경로 확인

[root@river RPMS]# rpm -ql httpd | more (-ql 옵션을 사용하면 된다)/etc/httpd
/etc/httpd
/conf/etc
/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf/httpd.conf/

-- 이하생략

*. 설치하거나 삭제 할 때 주의할 점이 있다. 의존성 관계에 있는 패키지라면 의존성 관계에 걸려있는 패키지를
먼저 설치하거나 제거한 후 설치 및 삭제를 해야 한다. 의존성 관계를 무시할 수 있는 옵션도 있는데 --nodeps 옵션이다.
(rpm -e --nodeps 패키지명. e는 제거옵션이다) 그러나 의존성을 함부로 무시하고 설치 및 삭제를 하는 것은 좋지 않다.
당연히 문제가 있을 수 있다.

rpm 패키지 삭제

rpm 패키지를 직접 찾아서 삭제하기는 어렵다. 파일이 많고 설치경로도 여러 개의 경로에 분산되어 설치되는 경우가
대부분이므로. 그냥 rpm 이 제공하는 삭제 옵션을 사용하면 된다.

-e : 삭제옵션

root@river RPMS]# rpm -e httpd-manual

[root@river RPMS]# rpm -e httpd오류: Failed dependencies: httpd is needed by (installed) redhat-config-httpd-1.0.1-18
[root@river RPMS]#

httpd-manual 패키지는 삭제되었으나 httpd 패키지는 의존성에 걸려 삭제되지 않았다.
redhat-config 패키지가 httpd 패키지의 일부 파일을 사용한다는 것이다. 이럴 경우 httpd 패키지는 삭제되지 않는다.
삭제 하려면 redhat-config 패키지를 먼저 삭제하고 httpd 패키지를 삭제하든지 그렇지 않으면 의존성을 무시하고 (--nodeps)
삭제해야 한다.

[root@river RPMS]# rpm -e --nodeps httpd (여기서는 의존성을 무시하고 삭제하기로 한다)

[root@river RPMS]# rpm -q httpdhttpd 패키지가 설치되어 있지 않습니다[root@river RPMS]#

깨끗하게 삭제되었다.

YUM - Yellowdog Updater Modified

rpm 명령의 불편한 점인 패키지 의존성 문제를 해결해준다. 
특정 패키지를 설치할때 의존성 관계에 있는 패키지를 먼저 자동으로 설치해준다. 

yum 은 인터넷을 통하여 rpm 파일이 저장된 저장소(repository)에서 필요한 파일을 다운로드 후 
설치하게 되므로 반드시 인터넷에 연결이 되어 있어야 사용할 수 있다. 

파일을 다운로드 받게 되는 저장소의 주소는 /etc/yum.repos.d 디렉토리의 파일에 저장되어 있다. 

*. yum 이 설치 되어 있지 않으면 씨디롬을 마운트하여 rpm 설치를 하거나 아니면 인터넷에서
다운로드하여 rpm 설치한다.

yum 설정파일

[root@bega rpm]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum 
keepcache=0
debuglevel=2
logfile=/var/log/yum.log : yum 으로 작업한 기록이 저장되는 파일
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
metadata_expire=1800
installonly_limit=2

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

[root@bega rpm]# ls /etc/yum.repos.d
fedora-rawhide.repo          fedora-updates.repo
fedora-updates-testing.repo  fedora.repo
[root@bega rpm]#
* 위에 파일 내용에 파일을 다운로드 받을 저장소 주소가 포함되어 있다.

사용법 

yum [options] [command] [package ...] 

yum install 패키지 [ 패키지2 패키지3 ...] => 패키지 설치 
yum check-update 업데이트 가능 목록보기 
yum update 패키지이름 => 패키지 업데이트 
yum remove 패키지이름 => 패키지 삭제 
yum info 패키지이름 => 패키지 정보확인 
yum update  => 커널을 포함한 전체 패키지 업데이트 

ex)
[root@bega updates]# yum info telnet-server
Loaded plugins: refresh-packagekit
Installed Packages
Name       : telnet-server
Arch       : i386
Epoch      : 1
Version    : 0.17
Release    : 42.fc9
Size       : 49 k
Repo       : installed
Summary    : 텔넷 원격 로그인 프로토콜에 사용되는 서버 프로그램.
License    : BSD
Description: Telnet is a popular protocol for logging into remote systems over
           : the Internet. The telnet-server package includes a telnet daemon
           : that supports remote logins into the host machine. The telnet
           : daemon is disabled by default. You may enable the telnet daemon by
           : editing /etc/xinetd.d/telnet.

[root@bega updates]#


[root@bega updates]#

[root@bega ftpuser]# yum install telnet-server
Loaded plugins: refresh-packagekit
fedora                                                   | 2.4 kB     00:00
primary.sqlite.bz2                                       | 6.1 MB     00:49
updates                                                  | 2.3 kB     00:00
primary.sqlite.bz2                                       | 2.2 MB     00:15
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package telnet-server.i386 1:0.17-42.fc9 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 telnet-server           i386       1:0.17-42.fc9    fedora             36 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 36 k
Is this ok [y/N]:
Downloading Packages:
(1/1): telnet-server-0.17-42.fc9.i386.rpm                |  36 kB     00:01
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: telnet-server                ######################### [1/1]

Installed: telnet-server.i386 1:0.17-42.fc9
Complete!
[root@bega ftpuser]#



[root@bega ftpuser]# yum install xinetd
Loaded plugins: refresh-packagekit
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package xinetd.i386 2:2.3.14-18.fc9 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Updating:
 xinetd                  i386       2:2.3.14-18.fc9  fedora            124 k

Transaction Summary
=============================================================================
Install      0 Package(s)
Update       1 Package(s)
Remove       0 Package(s)

Total download size: 124 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): xinetd-2.3.14-18.fc9.i386.rpm                     | 124 kB     00:02
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating  : xinetd                       ######################### [1/2]
  Cleanup   : xinetd                       ######################### [2/2]

Updated: xinetd.i386 2:2.3.14-18.fc9
Complete!
[root@bega ftpuser]#[root@bega packages]# rpm -q telnet-server
telnet-server-0.17-42.fc9.i386

[root@bega packages]# yum remove telnet-server  <= 패키지 제거할때
Loaded plugins: refresh-packagekit
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package telnet-server.i386 1:0.17-42.fc9 set to be erased
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Removing:
 telnet-server           i386       1:0.17-42.fc9    installed          49 k

Transaction Summary
=============================================================================
Install      0 Package(s)
Update       0 Package(s)
Remove       1 Package(s)

Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing   : telnet-server                ######################### [1/1]
??: /etc/xinetd.d/telnet(?)?? /etc/xinetd.d/telnet.rpmsave(?)??????????
Removed: telnet-server.i386 1:0.17-42.fc9
Complete!
[root@bega packages]# rpm -q telnet-server
telnet-server 패키지가 설치되어 있지 않습니다

*.기타 옵션
yum list all 
yum list available 사용가능한 패키지 목록 출력

yum list updates
업데이트 가능한 패키지 출력

yum list installed
설치된 패키지 목록 출력
yum check-update
시스템에 필요한 업데이트 목록ㄹ 출력

yum update 패키지명


yum info 패키지명

yum list recent
yum 저장소에 최근에 추가된 패키지 목록 확인

yum search 검색어

패키지 설명과 요약문 패키지 이름에서 지정한 특정 문자열에 매칭하는지 
여부를 확인하여 그 정보를 출려해준다.

ex)
yum search quota

yum localinstall 패키지명
yum localupdate 패키지명


패키지그룹 - 관련 패키지를 하나의 그룹을 묶은것
yum grouplist
yum groupinstall 패키지그룹명
yum groupremove 패키지그룹명
yum groupinfo 패키지그룹명

'Log > Linux' 카테고리의 다른 글

dns 설정파일 문법  (0) 2011.11.28
DNS - Domain Name Service  (0) 2011.11.28
ftp 서비스 - server  (0) 2011.11.28
ftp 서비스 - client  (0) 2011.11.28
서비스 운영방식 - standalone / inetd(xinetd)  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:27 Log/Linux

ftp 서비스 - server

ftp 서버

종류

ftp 서버는 여러가지 종류가 있는데 리눅스에서 많이 사용되어지는 ftp 서버는

vsftpd 와 proftpd 두가지 정도이다.
어떤 ftp 서버라도 한가지만 제대로 이해하고 운영할 수 있으면 다른 ftp 서버를
설정하고 운영하는것도 그리 어렵지 않을것이다.

1. vsftpd
- 페도라 패키지에 포함되어 있는 ftp 서버이다.
[root@star ~]# rpm -q vsftpd
vsftpd-2.0.3-1 <= 설치되어 있다.


공식사이트
http://vsftpd.beasts.org

장점
Security
Performance
Stability

1)설정

rpm 이나 yum 으로 설치하는 경우 설정 파일의 기본 디렉토리는
/etc/vsftpd 이다.

a)익명 사용자 설정

anonymous_enable=YES : 익명접속허용 여부

anon_upload_enable=NO : 익명접속 파일업로드 허용여부

anon_mkdir_write_enable=NO :익명접속시 디렉토리 생성허용 여부

anon_root=/var/ftp/pub : 이 설정을 하지 않으면 ftp 계정 디렉토리가 된다.

logging 설정

xferlog_file=/var/log/xferlog : 로그 저장 파일

xferlog_enable=YES : 파일전송 기록 허용여부

dual_log_enable
If enabled, two log files are generated in parallel, going by default to /var/log/xferlog and
/var/log/vsftpd.log. The former is a wu-ftpd style transfer log, parseable by standard tools. The latter
is vsftpd’s own style log.

Default: NO


b) local account 설정

local_enable=YES : 로컬 계정 접속 허용 여부
local_umask=022 : 파일생성시 디폴트 권한 (umask값이 022 인경우 기본파일퍼미션:644, 기본디렉토리퍼미션:755)
chroot_list_enable=YES : chroot_list_file 설정 허용
chroot_list_file=/etc/vsftp/chroot_list : chroot 적용 받는 사용자
chroot_local_user=YES : 모든 사용자에게 chroot 기능 적용
userlist_deny=YES : userlist_file 옵션 허용여부
userlist_file=/etc/vsftpd/user_list : userlist_deny 가 YES 일때 이파일에 적혀
있는 사용자는 ftp 서버 접속불가

c) timeout 시간 설정
idle_session_timeout=60(초단위) : 접속후 아무것도 하지 않을때의 접속종료시간
data_connection_timeout=120 : 파일전송시 아무런 동작을 하지 않을때 접속 종료시

d) 출력 메세지 설정
ftpd_banner=Welcome to blah FTP service.
banner_file=/etc/vsftpd/welcome.msg
dirmessage_enable=YES
message_file=.messages

e) 동시접속자수 제한
max_clients=30 : 최대 동시접속자수는 30명으로 제한
max_per_ip=2 : 한 ip 당 동시접속을 계정과 상관없이 2개로 제한

===========================================================
2. proftpd

proftpd - 페도라에 포함되어 있지 않으므로 proftpd 를 사용하려면 별도로 다운로드 받아서
설치해야 한다. 쉽고 간결하게 구성할 수 있으며 메뉴얼이 한글로 번역되어 인터넷으로
서비스 되므로 구성할때 쉽게 참조할 수 있는것이 장점.

[root@star proftpd]# rpm -qa | grep proftp
[root@star proftpd]# <= 설치되어 있지 않다.

다운로드 주소 : www.proftpd.org
ftp 주소 : ftp.proftpd.org( Korea User Group - 레퍼런스를 한글로 볼수 있다)

소스파일을 컴파일할때 시스템 날짜가 잘못 설정되어 있으면 아래와 같은
오류메시지가 출력될 수 있다. 이런경우 date 명령어로 시간을 제대로 설정해서
다시 컴파일 해야 한다.
tar: proftpd-cvs-20081007/src/fsio.c: time stamp 2008-09-04 03:19:37 is 1611839 s in the future

*. 아래는 ftp 로 다운로드 받은 proftpd 를 설치하는 과정이다.

[root@star tmp]# ls pro*
proftpd-cvs-20081007.tar.gz <= 이 파일은 최신버전이지만 다른 버전을 받아도 된다.

gzip -d proftpd*
tar -xvf proftpd*

또는 그냥 한번에 tar -xvzf proftpd* 로 압축과 tar 를 동시에 풀수도 있다.

[root@star tmp]# ls -ld pro*
drwxr-xr-x 14 1006 1006 4096 8월 10 07:04 proftpd-cvs-20081007/

cd pro*

다운로드 받은 소스파일을 설치해서 proftpd 바이너리 파일을 생성해야 한다.
소스파일은 대부분 c 언어로 작성되어 있으며 설치하기 위해서는 컴파일러가
설치되어 있어야 한다.

[root@star proftpd-cvs-20081007]# find . -name \*c <= 이 명령어로 소스파일
리스트를 볼수 있다.

컴파일하는 방법

많은 파일로 구성된 소스파일의 설치방법은 대개 아래와 같은 순서로 진행된다.

./configure --prefix=/usr/local/proftpd => 컴파일 환경을 설정한다. -
현재 시스템 check, 컴파일러버전, 라이브러리 등을 체크해서
가장 적합한 컴파일 환경을 makefile 을 만들고 거기에 설정하게 된다.

confiugre 스크립트를 실행할 때 많은 옵션을 줄수 있으며 옵션에 따라서 서버 설정정보가
달라지게 된다. --prefix 옵션은 가장 많이 사용되는 옵션으로 컴파일이 끝났을때 생성된
파일을 어디로 복사할것인가 하는것이다. 쉽게 말하면 서버가 설치될 디렉토리.

make => 실제 소스를 컴파일하는 작업
make install => 위에 prefix 옵션 뒤에 적은 디렉토리로 컴파일이 끝났을때 만들어진
파일을 복사는 하는 작업.


작업이 다 끝나면

[root@star proftpd-cvs-20081007]# ls /usr/local/proftpd
bin/ etc/ include/ lib/ libexec/ sbin/ share/ var/ <= 이렇게 몇개의 디렉토리가 만들어져 있다.

cd /usr/local/proftpd
[root@star proftpd]# ls sbin
ftpshut* in.proftpd@ proftpd* <= proftpd 가 proftpd 서버 파일이다.
[root@star proftpd]#

그리고 proftpd 서버의 설정파일은 /usr/local/proftpd/etc/proftpd.conf 파일이다.

proftpd.conf 파일의 설정형식은

지시자 value

ex)
ServerName "ProFTPD Default Installation"
ServerType standalone

이런 형식으로 되어 있다.

proftpd 의 설정파일에 들어갈수 있는 지시자의 종류는 수백가지가 된다.
그러므로 지시자를 다 알수는 없으며 모르는 경우
proftpd 서버 사이트를 참조해야 한다.(proftpd.oops.org - Korean User Group 사이트)

========================================================
예제를 통해 vsftpd 및 proftpd의 설정을 이해한다.


예제. (괄호안에 첫글자가 대문자인것은 proftpd 설정이며 첫글자가 소문자로 되어있는것은
vsftpd 설정입니다.)

1. ftp 서버로 접속했을때 login 하기전 아래 메시지를 출력한다.

************************ (DisplayConnect / banner_file)
Welcome to my ftp server
************************

2. 익명계정으로 login 했을때
************************ (DisplayLogin / dirmessage_enable / message_file)
Welcome anonymous user!
************************

3. 클라이언트 한개당 ftp 서버의 동시접속을 2개까지로 제한한다. (MaxClinetPerHost / max_per_ip)


4. ftp 서버 최대의 접속자수를 50명까지로 제한한다.(MaxInstances / max_clients)


5. /var/ftp/upload 디렉토리는 업로드 및 다운로드 허용

6. /var/ftp/pub 디렉토리는 다운로드는 허용하고 업로드는 금지한다.

7. user2 계정의 ftp 서비스를 금지한다. (userlist_deny / userlist_file)

8. 모든 계정에게 chroot 기능을 적용시킨다.(chroot_local_user)

9./var/ftp/upload 디렉토리로 들어갈때 아래와 같은 메시지 자동출력.
(vsftpd.conf 의 도움말중 dirmessage_enable 옵션(변수) 참조)
******************************
상용 및 불법자료 업로드 금지!!!
******************************

추가문제.

1. standalone 방식으로 동장하는 vsftpd 서비스 구동방식을 inetd 방식으로
설정을 변경한다.. (*. 설정후 제대로 동작하지 않으면 메뉴얼 페이지를
참조 => man vsftpd)

*. 설정파일을 수정한 경우 ftp 서비스를 반드시 새로 올려줘야만 고친 설정파일이 적용된다.
(단, 이것은 inet 방식의 데몬에는 해당되지 않는다. inet 방식은 요청할때 실행되므로.)

*.solve

'Log > Linux' 카테고리의 다른 글

DNS - Domain Name Service  (0) 2011.11.28
압축유틸리티/백업복구/패키지관리  (0) 2011.11.28
ftp 서비스 - client  (0) 2011.11.28
서비스 운영방식 - standalone / inetd(xinetd)  (0) 2011.11.28
리눅스 네트워크  (0) 2011.11.28
Posted by logwatch

2011. 11. 28. 19:27 Log/Linux

ftp 서비스 - client

ftp 서비스

- file transfer protocol을 의미하며 호스트간에 file 송수신을 하기 위한 프로토콜 및 서비스를 의미한다.
- 송수신 하는 파일은 이진형식과 바이너리 형식 두가지 형식이 있다.

ftp client

[root@star tmp]# ftp
ftp> ? <= ftp prompt 에서 ? 를 입력하면 command 목록을 볼수 있다.

Commands may be abbreviated. Commands are:

! cr mdir proxy send
$ delete mget sendport site
account debug mkdir put size
append dir mls pwd status
ascii disconnect mode quit struct
bell form modtime quote system
binary get mput recv sunique
bye glob newer reget tenex
case hash nmap rstatus trace
ccc help nlist rhelp type
cd idle ntrans rename user
cdup image open reset umask
chmod lcd passive restart verbose
clear ls private rmdir ?
close macdef prompt runique
cprotect mdelete protect safe
ftp> help bin <= 각 명령어에 대한 간단한 설명을 보려면 'help 명령어' 하면 된다.
binary set binary transfer type
ftp>

이중에서 자주 사용되는 명령은

*.명령은 줄여쓸수 있다.

! : ftp 프롬프트에서 셀명령어를 쓸수 있다.
ascii : 전송모드를 ascii 타입으로 지정
bin(binary) : 전송모드를 binary 모드로 지정 => 아스키 파일을 송수신 하는 경우가 아니면 전송모드는
전부 바이너리 모드로 해야 한다.
get : 하나의 파일을 다운로드
mget : 여러개의 파일을 다운로드
cd : 디렉토리 변경
mkdir : 디렉토리 생성
rmdir : 디렉토리 삭제
hash : 파일송수신시 '#' 마크를 찍어서 전송상태 표시해준다.
close : 접속 끊기
quit: ftp 를 끝내고 shell 로 돌아간다.
user : 로그인시 id 나 암호가 틀렸을때 다시 입력하는 명령어
lcd : 서버가 아닌 클라이언트의 현재 디렉토리를 변경하는 명령어
ex) lcd /tmp => 클라이언트의 현재 작업경로를 /tmp 로 변경.



ex) internic 에서 named.root(= named.ca) 파일을 다운로드 받는과정이다.


[root@star tmp]# ftp ftp.rs.internic.net
Connected to ftp.rs.internic.net.
220-**********************************************************
220-***** *****
220-***** InterNIC Public FTP Server *****
220-***** *****
220-***** Login with username "anonymous" *****
220-***** You may change directories to the following: *****
220-***** *****
220-***** domain - Root Domain Zone Files *****
220-***** *****
220-***** Unauthorized access to this system may *****
220-***** result in criminal prosecution. *****
220-***** *****
220-***** All sessions established with this server are *****
220-***** monitored and logged. Disconnect now if you do *****
220-***** not consent to having your actions monitored *****
220-***** and logged. *****
220-***** *****
220-**********************************************************
220
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (ftp.rs.internic.net:root): anonymous <= 익명계정으로 접속한다.
331 Please specify the password. <= 익명계정은 패스워드를 마음대로 쳐도 인증이 된다.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (198,41,0,6,43,115)
150 Here comes the directory listing.
drwxr-xr-x 2 ftp ftp 4096 Oct 06 19:03 domain
226 Directory send OK.
ftp> cd domain
250 Directory successfully changed.
ftp> dir <= 파일리스트를 출력하는 ftp 명령어
227 Entering Passive Mode (198,41,0,6,100,241)
150 Here comes the directory listing.
-rw-r--r-- 1 ftp ftp 457 Oct 06 19:03 INTERNIC_ROOT_ZONE.signatures
-rw-r--r-- 1 ftp ftp 693 Oct 06 19:03 INTERNIC_ROOT_ZONE.signatures.asc
-rw-r--r-- 1 ftp ftp 687 Oct 06 17:51 arpa.zone.gz
-rw-r--r-- 1 ftp ftp 33 Oct 06 17:51 arpa.zone.gz.md5
-rw-r--r-- 1 ftp ftp 65 Oct 06 17:51 arpa.zone.gz.sig
-rw-r--r-- 1 ftp ftp 2876 Feb 04 2008 db.cache
-rw-r--r-- 1 ftp ftp 43 Feb 04 2008 db.cache.md5
-rw-r--r-- 1 ftp ftp 72 Feb 04 2008 db.cache.sig
-rw-r--r-- 1 ftp ftp 2879 Feb 04 2008 named.cache
-rw-r--r-- 1 ftp ftp 46 Feb 04 2008 named.cache.md5
-rw-r--r-- 1 ftp ftp 72 Feb 04 2008 named.cache.sig
-rw-r--r-- 1 ftp ftp 2878 Feb 04 2008 named.root
-rw-r--r-- 1 ftp ftp 45 Feb 04 2008 named.root.md5
-rw-r--r-- 1 ftp ftp 72 Feb 04 2008 named.root.sig
-rw-r--r-- 1 ftp ftp 19903 Oct 06 19:03 root.zone.gz
-rw-r--r-- 1 ftp ftp 33 Oct 06 19:03 root.zone.gz.md5
-rw-r--r-- 1 ftp ftp 65 Oct 06 19:03 root.zone.gz.sig
226 Directory send OK.
ftp> ascii <= 전송모드를 선택하는 명령어(여기서는 ascil 모드로 전송받겠다는 것이다.)
200 Switching to ASCII mode.
ftp> hash <= 1024 바이트당 해시마크('#')을 찍어서 전송상황을 출력하겠다는 의미.
Hash mark printing on (1024 bytes/hash mark).
ftp> get named.root => get 은 한개의 파일을 다운받아오는 명령어 (참고 : get named* <= 이렇게 할수는 없다. 와일드카드 문자를 쓰려면
여러개의 파일을 동시 다운로드 받을수 있는 met 명령을 써야 한다)
local: named.root remote: named.root
227 Entering Passive Mode (198,41,0,6,170,61)
150 Opening BINARY mode data connection for named.root (2878 bytes).
WARNING! 85 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 File send OK.
2878 bytes received in 0.00053 seconds (5.3e+03 Kbytes/s)
ftp> bin => 아스키 모드일때 경고메시지가 출력하였으므로 전송타입을 binary 모드로 바꿨다.
200 Switching to Binary mode.
ftp> get named.root
local: named.root remote: named.root
227 Entering Passive Mode (198,41,0,6,60,184)
150 Opening BINARY mode data connection for named.root (2878 bytes).
##
226 File send OK.
2878 bytes received in 0.00017 seconds (1.6e+04 Kbytes/s)
ftp> close
ftp> quit
[root@star tmp]# ls -l named.root
-rw-r--r-- 1 root root 2878 8월 16 11:16 named.root
[root@star tmp]# file named.root
named.root: ASCII English text

=> 제대로 받아졌습니다.

'Log > Linux' 카테고리의 다른 글

압축유틸리티/백업복구/패키지관리  (0) 2011.11.28
ftp 서비스 - server  (0) 2011.11.28
서비스 운영방식 - standalone / inetd(xinetd)  (0) 2011.11.28
리눅스 네트워크  (0) 2011.11.28
boot procedure(부팅 진행과정)  (0) 2011.11.28
Posted by logwatch
이전버튼 1 2 3 4 이전버튼

블로그 이미지
내가 나에게 확인 하는 블로그
logwatch

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함