다음 이전 차례

2. Preparing the Jail (chroot를 위한 준비)

2.1 사용자를 추가합니다.

(원본글에서는 named 사용자를 추가하였습니다. 번역글에서는 nobody를 사용하기에 대부분의 계정에서는 이미 생성되어 있을것 입니다.) /etc/passwd 에 다음을 추가한다. named:x:200:200:Nameserver:/chroot/named:/bin/false /etc/group 에 다음을 추가한다. named:x:200: 셸을 /bin/false를 준것은 로그온 하지 못하게 하기 위함이다.

2.2 디렉토리 구조

다음과 같은 디렉토리 구조를 만들자.

/chroot
  +-- named
       +-- bin +-- dev +-- etc |    +-- namedb +-- lib +-- var
            +-- run

2.3 기존의 BIND정보를 옮겨 오자.

이미 기존의 BIND를 설치하거나 운영해오고 있을 경우 named.conf나 zone화일이 있을경우 chroot 복사(이동)로 복사느 이동을 한다. /etc/named.conf 는 /chroot/named/etc 로 zone화일은 /chroot/named/etc/namedb로 옮긴다. 예를 들면 다음과 같다.

# cp -p /etc/named.conf /chroot/named/etc/ # cp -a /var/named/*
/chroot/named/etc/namedb/
만약 master가 아닌 slave로 bind를 운영하고자 하거나 기타 여러가지 이유로 BIND가 zone화일에 허가권이 있어야 할것이다. 다음예와 같이 소유권을 바꾸자 # chown -R named:named /chroot/named/etc/namedb (참고로 본인은 nobody로 운영하기를 윈했으므로 # chown -R nobody:nobody /chroot/named/etc/namedb 해주었습니다.) BIND는 또한 /var/run에 pid화일과 ndc에서 사용하는 socket를 적을수 있는 허가권이 필요 합니다. 따라서 다음예와 같이 소유권을 줍니다. # chown named:named /chroot/named/var/run (참고로 본인은 nobody로 운영하기를 윈했으므로 # chown -R nobody:nobody /chroot/named/var/run 해주었습니다.)

2.4 시스템에서 필요한 화일 추가

BIND를 chroot에서 운영하게 되면 chroot외에는 허가권이 없기 때문에 몇개의 화일들(특히 시스템 라이브러리) 이 필요 합니다. 아래의 명령어는 필요한 라이브러리를 chroot안에서 읽을수 있도록 해주는 작업입니다. 보통의 LINUX머쉰에서는 작동될것 입니다.

# cd /chroot/named/lib # cp -p /lib/libc-2.*.so .  # ln -s libc-2.*.so
libc.so.6 # cp -p /lib/ld-2.*.so .  # ln -s ld-2.*.so ld-linux.so.2
BIND가 chroot로 운영될때는 chroot안에 /dev/null이 있어야 합니다. /dev/MKDEV 의 메뉴얼이나 mknod의 메뉴얼을 확인해 보십시요. 아래의 명령행은 보통의 LINUX머쉰에서는 작동될것 입니다. # mknod /chroot/named/dev/null c 1 3 마지막으로 /etc 디렉토리를 chroot안에 역시 만들어야 합니다. 그리고 /etc/localtime화일을 chroot안으로 복사 해야만 BIND log가 정확한 시간에 기록될것입니다. 또한 간단한 group화일을 생성해야할것 입니다. 다음의 명령행을 참고 하세요 # cp /etc/localtime /chroot/named/etc/ # echo 'named:x:200:' > /chroot/named/etc/group (처음에 만들때 원본에서 GID 200을 준것을 주의 하십시요 저는 nobody로 생성하기 때문에 echo 'nobody:x:99:' > /chroot/named/etc/group 하였습니다)

2.5 로그생성

sysclogd를 통하여 로그를 생성하는 방법은 두가지가 있다고 합니다. 이것은 시스템 마다 설정이 다를수 있기 때문에 RedHat에서 사용하는 첫번째 방법만 설명하겠습니다. 보통 syslogd는 다음의 화일을 통하여 운영됩니다. /etc/rc.d/init.d/syslog 이 화일을 아래 부분은 고쳐 주십시요 daemon syslogd -m 0 을 이렇게 daemon syslogd -m 0 -a /chroot/named/dev/log 고쳤으니 데몬을 재구동 하십시요.

# /etc/rc.d/init.d/syslog stop 
#/etc/rc.d/init.d/syslog start
아래와 같은 화일이 발견되면 정상적인것입니다.
  /chroot/named/dev
srw-rw-rw-   1 root     root            0 Mar 13 20:58 log
다른 방법은..  If you have an older syslogd, then you'll have to find
another way to do your logging. There are a couple programs out there,
such as holelogd, which are designed to help by acting as a ``proxy''
and accepting log entries from the chrooted BIND and passing them out
to the regular /dev/log socket.  입니다.

다음 이전 차례