BBUWOO'S [ LIKE UNIX ] WORLD Home > Lecture > Ftpd > Ftpd-6  

HOME
WHAT's BBUWOO?
LInux AnNyung
Open Source
    GitHUB
    GitHUB (for PHP)
LECTURE
MINI LECTURE
QnA BOARD
ENGLISH POEM


WARNNING

강좌의 모든 권리는 본인 김정균에게 있으며 이 강좌를 상업적 목적 으로 이용
하거나 다른 곳으로 옮길시에는 본인의 허락이 있어야 한다. 이글의 가장 최신글은
http://oops.org 에서 확인할수 있다.





 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 로 실행을 할 수가 있다.





 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에 접속한 사용자의 수만 보여준다.



    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



  •     



     Home > Lecture > Ftpd > Ftpd-6

    Copyright 1997-2024 JoungKyun Kim 
    LAST MODIFIED: 2017/01/18