8. Wu-ftpd message file
의 변수
Hanterm - cat /home/ftp/welcome.msg |
[root@bbuwoo etc]$ cat /etc/inetd.conf
#
# inetd.conf 이 file은 INETD TCP/IP super server를 통해서 사용가능한
# service들을 기술한다. INETD process가 실행중일때 재 설정을
# 하기 위해서는, INETD process에 SIGHUP signal을 주어야 한다.
#
# Version: @(#)/etc/inetd.conf 3.10 05/27/93
#
# Authors: Original taken from BSD UNIX 4.3/TAHOE.
# Fred N. van Kempen,
#
# Modified for Debian Linux by Ian A. Murdock
#
# Modified for RHS Linux by Marc Ewing
#
# <service_name><sock_type><proto><flags><user><server_path><args>
#
# Echo, discard, daytime, and chargen 는 주로 test를 위해 사용된다.
#
# 수정후 이 file을 re-read 하기위해 'killall -HUP inetd'를 수행해야 한다.
#
#echo stream tcp nowait root internal
#echo dgram udp wait root internal
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
#daytime stream tcp nowait root internal
#daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
#
# These are standard services.
#
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#gopher stream tcp nowait root /usr/sbin/tcpd gn
# do not uncomment smtp unless you *really* know what you are doing.
.
.
중략
.
.
.
# End of inetd.conf
[root@bbuwoo etc]$
|
강좌의 처음에서 밝혔듯이 REDHAT 에서의 ftpd 의 운영은 inetd 라는 super server
에 의해서 작동이 된다. 간단하게 inetd 이라는 것은 여러 daemon 들을 동시에
관리를 해주는 super demon 이라고 생각하면 된다.
위의 예제는 inetd 를 설정하는 congif file 의 일부분이다. 즉 Wu-ftpd 역시
inetd 에서 실행이 되기 때문에 간단하게 언급을 하고 넘어 가고자 한다. 위의
hanterm 창의 하단 부분에 보면 ftp과 telnet 부분이 보일 것이다. 즉 그
부분에서는 ftp daemon 과 telnet daemon 의 시작에 대해서 설정을 해 놓고 있는
것이다. 그 외에도 다른 많은 daemon 들을 관리하지만 일단은 생략해 놓았다.
이 file 에서 ftp는 tcp wrapper 에 의해서 동반 수행되어 지는 것을 짐작할 수
있다. 앞의 ftphost file 에서 접근을 제한하고 허락하듯이 이 tcp wrapper 에
의해서도 접근을 제한할 수, 허락할 수가 있는 것이다. tcp wrapper 에 대해서도
따로 언급을 하게 될 것이라고 생각한다.
여기서는 inetd 의 설정에 대해서 논하려는 것이 아니니 일단 이쯤에서 넘어 가도록
하고 Wu-ftpd 의 실행에 대해서 알아 보겠다. 위의 ftp 설정 부분에 나와 있듯이
Wu-ftpd 의 실행은 "/usr/sbin/tcpd in.ftpd -l -a" 로서 한다는 것을 쉽게 알 수
있을 것이다. 다만 일단 ftp 의 경우에는 inetd 에서 관리하는 것이 편하므로 REDHAT
에서는 간단하게 "/etc/rc.d/init.d/inet start" 으로 실행을 하면 된다. REDHAT의
강점으로는 이렇듯 script 화가 되어 있다는 것이다. (REDHAT 의 강점이라기 보다는
RPM package 에서 제공하는 init script 라고 해야 정확한 것이다. 다만 REDAHT 은
패키지 관리자로 RPM 을 사용하고 있으며, Turbo Linux 등의 몇몇 유명한 배포본
에서도 RPM 을 패키지 관리자로 사용을 한다.)
참고: standalone 방식과 inetd 방식
보통 우리가 어떠한 daemon 을 실행 할 때 2 가지의 형태로 실행을 할 수가 있다.
하나는 standalone 방식이 있으며, 또 다른 하나는 inetd 방식이 있다. Wu-ftpd
의 경우에는 inetd 방식으로 실행이 되어 진다. 그럼 standalone 와 inetd 방식의
차이는 무었일까? Daemon 은 요청이 오면 그 요청을 처리를 하게 된다. 이 요청을
받는 과정에서 standalone 방식은 미리 process 를 메모리 상에 상주를 시키면서
요청에 대해서 귀를 귀울이고 있다가 요청이 오면 바로 처리를 하게 된다. 반면
inetd 방식의 경우에는 평소에는 실행을 하고 있지 않고 있으며 요청에 대해서는
해당 daemon 이 귀를 귀울이는 것이 아니라 inetd daemon 이 대신 귀를 기울이고
있다가 요청이 오면 해당 데몬을 실행을 시켜서 요청을 처리를 하는 것을 의미한다.
이 두 방식은 서비스의 시작 방식에도 차이가 나는데 보통 apache 의 경우 apachtctl
이라는 apache 명령어를 실행해서 실행을 한다. 이렇게 해당 데몬의 명령어를 직접
이용해서 실행 하는 방식을 standalone 방식이라고 한다. 반면에 inetd 방식의
시작은 간단하게 inetd.conf 에 설정을 하고선 inetd 가 변경된 설정파일을 읽어
들일수 있도록 inetd 만 재시작 해 주면 되는 것이다.
그럼 간단하게 in.ftpd 의 실행 옵션들에 대해서 알아 보겠다.
-d -v |
syslog에 debugging information을 기록한다. |
-l |
syslog에 각 ftp session의 log를 기록한다. |
-t |
접속후 설정한 초만큼 inactive session이 발생하면 session을 close한다.
설정은 초단위 이며 옵션과 초를 붙여서 쓴다. 기본값은 900초 이다.
예) -t20, -t180
|
-T |
최대로 열어 놓을수 있는 session을 말한다. -T200 이면 접속한지 200초 후에는
무조건 session을 닫게 한다. |
-a |
ftpaccess의 설정을 이용하도록 한다. |
-A |
ftpaccess의 설정을 이용하지 않는다. default 설정을 이용하게 된다. |
-L |
syslog에 ftpserver에 보내지는 command들을 기록하도록 한다. |
이 외에도 -u, -o, -i option이 있지만 여기서 생략하도록 하겠다.
그렇다면 이제까지 해온 설정을 끝내고 재 적용을 시켜 주기 위해서는 ftp daemon을 재시작을
시키거나 아예 이 INTEd를 재 실행 시키면 되는 것이다. 여기서는 두가지 방법이 있다.
첫번째 방법은 INETd의 process를 확인한다면 HUP signal을 주는 방법과 다른 한방법은
inet script를 이용해서 재 시작 하는 것이다.
Hanterm - ps ax | grep inetd |
[root@bbuwoo etc]$ ps ax | grep inetd
253 ? S 0:00 inetd
32728 p0 S 0:00 grep inetd
[root@bbuwoo etc]$ kill -HUP 253
[root@bbuwoo etc]$
[root@bbuwoo etc]$
[root@bbuwoo etc]$ /etc/rc.d/init.d/inet restart
[root@bbuwoo etc]$
|
위의 예제는 두가지 방법의 예이다. 처음의 ps ax | grep inetd 명령으로 INETd의
process 번호를 확인을 한다. 다음 kill 명령으로 HUP signal을 주어 INETd를
refresh 하는 방법이다. 두번째는 inet script를 이용해서 restart option을 준 경우이다.
어떤 방법으로 해도 상관없으니 마음에 드는 방법으로 하기를 바란다.
참고할 것은 inetd 를 재시작 해 주는 것은 처음 ftpd 설정을 등록할 때 한번만 하면
된다. Ientd 의 특징에 따라 설정파일을 수정했을 때마다 inetd 를 재시작 할 필요는
없다. Standalone 방식의 경우에는 설정 파일을 미리 읽어 들여서 공유메모리 같은
곳에 올려 놓고선 프로세스가 해당 정보를 참고하지만, inetd 의 경우에는 요청
하나당 하나의 프로세스가 새로 시작을 하는 것이기 때문에 굳이 daemon 을 재시작
하는 번거로움이 필요가 없는 것이다.
또한 Redhat 7.0 부터는 inetd 대신에 xinetd 를 사용한다. 그러므로 /etc/inetd.conf
가 존재를 하지 않는다. 그러므로 wu-ftpd 를 xinetd 에서 사용하기 위해서는 일단
/etc/xinetd.d 에 아래와 같이 파일을 하나 만든다.
Hanterm - cat /etc/xinetd.d/ftp |
[root@bbuwoo xinetd.d]$ cat /etc/xinetd.d/ftp
# default: off
# description: Wu-FTPd is an FTP server
#
service ftp
{
disable = no
flags = REUSE
protocol = tcp
socket_type = stream
instances = 50
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l -a
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
[root@bbuwoo xinetd.d]$
|
위와 같이 파일을 하나 만들어 주고 /etc/rc.d/init.d/xinetd reload 명령을 실행해 주면
wu-ftpd 를 xinetd 로 실행을 할 수가 있다.
9. 간단한
FTP관리 명령
Hanterm - ftpwho, ftpcount |
[root@bbuwoo etc]$ cat /etc/inetd.conf
Service class all:
476 ? S 0:00 ftpd: localhost: anonymous/oops@oops.kr.net : IDLE
- 1 users ( 10 maximum)
( 10 maximum)
[root@bbuwoo /root]# ftpcount
Service class all - 1 users ( 10 maximum)
[root@bbuwoo etc]$
|
ftpwho
현재 ftp에 접속한 user들의 정보를 간단하게 보여준다.
ftpwho
간단하게 ftp에 접속한 사용자의 수만 보여준다.
10. Wu-FTPd 의
Chroot 기능
ProFTPd 에서의 DefaultRoot 기능이 Wu-FTPd 에서는 왜 안될까 하는 의문을 가진
사람들이 꽤 될 듯 싶다. Wu-FTPd 에서는 ProFTPd 처럼 명확하게 지시자로 지원
하지는 않는다. 다만 약간의 꽁수를 이용하여 구현을 할 수는 있다. Wu-FTPd 에서
chroot 를 적용할 수 있는 서비스는 anonymous 서비스와 guest 서비스이다. Wu-FTPd
에서 DefaultRoot 기능을 구현하기 위해서는 이 guest service 를 이용하는 것이다.
일단 ftpaccess 에서 다음과 같이
guestgroup chrootgroup
라인을 추가 하도록 한다. 다음 chrootgroup 이라는 group 을
groupadd chrootgroup
명령을 이용하여 추가한 다음, 상위 디렉토리로 올라가지 못하게 할 유저들을 이
그룹에 등록을 해 주면 된다. 단 ProFTPd 의 DefaultRoot 처럼 not 기능을 사용
할 수 없으므로 일일이 모든 유저들을 등록해 줘야 하는 불편함이 있다.
>> 이전 : message file magif cookies
>> 다음 : ftp security
|