Server Admin

본문 바로가기
사이트 내 전체검색


RedHat Linux >> Server Administration for Redhat Linux
[목차]
제6장 FTP 서버

    2. ProFTPd 설치하기

1. RPM 으로 설치하기

우선, RPM 패키지는 rpm 명령으로 설치를 한다.

# rpm -Uvh proftpd-1.2.1-1kr.i386.rpm

데비안의 경우 dselect를 이용하거나 apt-get을 이용해 설치한다.

# apt-get install proftpd

위에서 rpm, dselect, apt-get과 make install을 할때는 루트권한으로 작업을 해야 한다.

RPM 이나 데비안 패키지는 /usr이 기본 디렉토리이며, 설정파일은 /etc/에 위치한다. 최근의 1.2.0rc이후 버전에서는 /etc/proftpd/conf에 설정파일이 위치하는 경우도 있다.

 

2. 소스로 설치하기

2.1 환경 설정파일 백업하기

tarball 소스를 컴파일해서 설치하는 경우는 적당한 디렉토리에서 압축을 풀고, 컴파일하고, 설치하면 된다.

소스 설치를 위해 기존의 RPM 패키지를 지워야 한다. 환경설정파일들을 백업하고 지우자. 그래야. 소스설치 후, 환경설정파일 재사용할 수 있다.

환경설정파일을 백업하자.

# cd /etc/pam.d

# cp ftp ftp.bak

 

데몬을 런레벨 스트립트로 실행할 때 존재할 것이다.

# cd /etc/rc.d/init.d/

# cp proftpd proftpd.bak

 

데몬을 Xinetd로 실행할 경우에 아래와 같이 백업한다.

# cd /etc/xinetd.d/

# cp proftpd proftpd.bak

 

2.2 RPM 버전 지우기

기존 RPM을 지워야한다.

# rpm -qa|grep proftpd

proftpd-xinetd-1.2.0rc2-1kr2

proftpd-core-1.2.0rc2-1kr2

#

RPM 버전에 따라 다르게 나올 수 있다.

# rpm -e proftpd-xinetd

# rpm -e proftpd-core

 

2.3 소스로 설치하기

그리고, 소스를 아래와 같이 설치하자.

# gzip -cd proftpd-1.2.1.tar.gz | tar xvf -

# cd proftpd-1.2.1

configure의 옵션들에 대해 알아보자.

  • --prefix : 설치할 기본 디렉토리
  • --bindir : 사용자가 실행할 디렉토리 지정
  • --sbindir : 시스템 관리자가 실행할 디렉토리 지정
  • --sysconfdir : 설정파일을 설치할 디렉토리 지정
  • --libdir : Object 코드 라이브러리를 설치할 디렉토리 지정
  • --mandir : man 페이지 설치 디렉토리
  • --with-modules : 추가하고자 하는 모듈지정
  • --enable-shadow : 쉐도우 패스워드 강제 지원
  • --enable-autoshadow : 쉐도우 패스워드 자동 지원

 

# ./configure

# make

# make install

소스를 직접 컴파일해서 설치한 경우엔 기본 설치 디렉토리가 /usr/local/이 된다. 따라서, ProFTPd의 바이너리 실행 파일은 /usr/local/bin 또는 /usr/local/sbin에 위치하며, 설정 파일인 proftpd.conf는 /usr/local/etc에 위치하게 된다.

 

2.4 환경설정파일 다시 복사하기

환경 설정 파일들을 복사해 놓자..

# cd /etc/pam.d

# mv ftp.bak ftp

 

(1) 런레벨 스크립트로 실행시

# cd /etc/rc.d/init.d/

# mv proftpd.bak proftpd

 

(2) Xinetd로 실행시

# cd /etc/xinetd.d/

# mv proftpd.bak proftpd

 

 

2.5 환경설정파일 수정하기(실행 스크립트)

(1) 런레벨 스크립트로 실행시

런레벨 스크립트는 실행파일의 위치가 바뀌었기 때문에 수정해 줘야 한다.

# vi /etc/rc.d/init.d/proftpd

 

#!/bin/sh

#

# Startup script for ProFTPd

#

# chkconfig: 345 85 15

# description: ProFTPD is an enhanced FTP server with \

#               a focus toward simplicity, security, and ease of configuration.

\

#              It features a very Apache-like configuration syntax, \

#               and a highly customizable server infrastructure, \

#               including support for multiple 'virtual' FTP servers, \

#               anonymous FTP, and permission-based directory visibility.

# processname: proftpd

# config: /etc/proftpd.conf

#

# By: Osman Elliyasa <osman@Cable.EU.org>

# $Id: proftpd.init.d,v 1.2 2001/01/26 23:10:55 flood Exp $

 

# Source function library.

. /etc/rc.d/init.d/functions

 

FTPSHUT=/opt/sbin/ftpshut

 

# See how we were called.

case "$1" in

  start)

        echo -n "Starting proftpd: "

        if [ -x ~ftp-master/bin/advert.sh ]; then

                echo -n "Adverts "

                su - ftp-master -c "bin/advert.sh fifo"

        fi

        $0 resume

        daemon /usr/local/sbin/proftpd

        echo

        touch /var/lock/subsys/proftpd

        ;;

  stop)

        echo -n "Shutting down proftpd: "

        if [ -x ~ftp-master/bin/advert.sh ]; then

                echo -n "Adverts "

                su - ftp-master -c "bin/advert.sh kfifo"

        fi

        $0 suspend

        killproc /usr/local/sbin/proftpd

        echo

        rm -f /var/lock/subsys/proftpd

        ;;

  status)

        status proftpd

        ;;

  restart)

        $0 stop

        $0 start

        ;;

  reread)

        echo -n "Re-reading proftpd config: "

        killproc proftpd -HUP

        echo

        ;;

  suspend)

        if [ -f $FTPSHUT ]; then

                if [ $# -gt 1 ]; then

                        shift

                        echo -n "Suspending with '$*' "

                        $FTPSHUT $*

                else

                        echo -n "Suspending NOW "

                        $FTPSHUT now "Maintanance in progress"

                fi

        else

                echo -n "No way to suspend "

        fi

        echo

        ;;

  resume)

        if [ -f /etc/shutmsg ]; then

                echo -n "Allowing sessions again "

                rm -f /etc/shutmsg

        else

                echo -n "Was not suspended "

        fi

        echo

        ;;

  *)

        echo -n "Usage: $0 {start|stop|restart|status|reread|resume"

        if [ "$FTPSHUT" = "" ]; then

                echo "}"

        else

                echo "|suspend}"

                echo "suspend accepts additional arguments which are passed to f

tpshut(8)"

        fi

        exit 1

esac

 

if [ $# -gt 1 ]; then

        shift

        $0 $*

fi

 

exit 0

 

(2) Xinetd로 실행시

Xinetd로 실행시 아래와 같이 바꾸어 주면 된다.

# vi /etc/xinetd.d/proftpd

 

# default: on

# description: The proftpd FTP server serves FTP connections. It uses \

#       normal, unencrypted usernames and passwords for authentication.

service ftp

{

        disable = no

        flags                   = REUSE

        protocol                = tcp

        socket_type             = stream

        instances               = 50

        wait                    = no

        user                    = root

        server                  = /usr/local/sbin/in.proftpd

        log_on_success          = HOST PID

        log_on_failure          = HOST RECORD

}

 

2.6 PAM 설정파일 수정하기

# cd /etc/pam.d

# vi ftp

#%PAM-1.0

auth       required     /lib/security/pam_listfile.so item=user sense=deny \

                        file=/usr/local/etc/ftpusers onerr=succeed

auth       required     /lib/security/pam_pwdb.so shadow nullok

# This is disabled because anonymous logins will fail otherwise,

# unless you give the 'ftp' user a valid shell, or /bin/false and add

# /bin/false to /etc/shells.

#auth       required    /lib/security/pam_shells.so

account    required     /lib/security/pam_pwdb.so

session    required     /lib/security/pam_pwdb.so

 

# cd /usr/local/etc

# vi ftpusers

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

news

uucp

operator

games

nobody

 FTP 로그인을 허용하지 않을 유저 id가 있으면 위에 추가하면 된다. ftpusers파일에 있는 사용자들은 sense=deny에 의해 거부당하게 됩니다. ftpusers에 있는 목록은 일반적으로 UID 500이하의 시스템 계정이 포함되게 됩니다.

 

[참고] PAM(장착식 인증 모듈)

PAM 설정을 간단히 설명하자면 네가지 아이템에 대한 이해만 가진다면 다른 서비스에 대해서도 이를 적용할 수 있다.

item=user

item은 어떤 것을 기준으로 리스트를 작성할 지 결정한다. 유저로 지정했다면 로그인 할 유저 이름을 기준으로 해당 리스트를 작성하면 된다.

sense=deny

sense의 값에는 deny와 allow가 있다. 즉, 허락할 것인지, 아니면 거부할 것인지를 결정한다.

file=/etc/ftpusers

file은 item에서 결정한 리스트를 기록할 파일을 지정한다. 즉 기본으로 wu-ftpd가 /etc/ftpusers이지만 이 파일에서 원하는 곳으로 수정을 할 수 있다는 얘기다.

onerr=succeed

onerr는 file=에서 지정한 파일이 존재하지 않을 경우에 어떻게 처리할 지 결정한다. success로 지정하면 파일이 존재하지 않을 경우 무조건 로그인을 가능하게하며, fail로 설정돼 있을 경우에는 무조건 로그인에 실패하게 한다.

위의 사항을 잘 이용하면 텔넷이나 다른 로그인 서비스에 대해서 제한을 가하거나  정책을 다르게 설정할 수 있다.

-------------------------------------------

 

2.7 ProFTPd 환경설정 파일(proftpd.conf) 수정하기

# cd /usr/local/etc

# vi proftpd.conf

 

#########################################################################

#                                                                       #

#                      ProFTPD Korea User Groups                        #

#                       http://proftpd.oops.org                         #

#                                                                       #

#########################################################################

# 번역 : 김정균 < admin@oops.org >

# 잘못된 설정이 있으면 연락 주시기 바랍니다.

#########################################################################

 

ServerName                      "Proftpd FTP Server For Korean"

 

# ServerType은 Server를 standalone mode로 할것인지 inet mode로 할것

# 인지를 정한다. default로 inetd mode로 한다. standalone mode로 할경우

# 아래 MaxInstances 지시자의 주석을 해제 한다.

# inetd mode로 작동을 할 경우에는 /etc/inetd.conf중에서

# ftp    stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a

# 행을 아래와 같이

# ftp    stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd

# 수정을 해 주고 Inet demon을 재 실행 해 줘야 한다.

# standalone => 런레벨 스크립트로 실행할 경우

# ServerType                    standalone

# inetd => Xinetd 스크립트로 실행할 경우

ServerType                      inetd

DefaultServer                   on

ServerAdmin                     root@localhost

 

UseReverseDNS                   off

IdentLookups                    off

 

# Server에 접속했을 경우 보내주는 Defualt 메세지를 설정한다. Off로 지정

# 하였을 경우 Porftpd Server Ready ServerName 이 출력된다.

 

ServerIdent                     On      "LeeLAB & OOPS Account Server ready .. "

 

# User login을 했을시에 user들이 자신의 홈 상위 디렉토리들을 마음대로

# 돌아다니지 못하게 chroot()를 설정한다. group별로 설정을 하게 되며

# "!"는 제외하라는 의미를 가지게 된다.

DefaultRoot                     ~       !groupname

 

# ServerType이 standalone이면 이 항목의 주석을 풀어 줘야 한다.

# inetd로 작동을 시킬시에는 /etc/services에서 port를 지정한다.

#Port                           21

 

# root login을 허락할지의 여부를 지정한다. PAM modules를 사용한다면

# 먼저 /etc/proftpd/conf/ftpusers에서 root를 삭제해야 한다.

RootLogin                       off

 

# Global section은 proftpd의 전체적인 설정에 모두 적용시킨다.

<Global>

  # group과 world writable로 부터 새로운 dir과 file들을 생성하는 것을

  # 막기위하여 기본적으로 umask는 022로 설정을 한다.

  Umask                         022

 

  # ftpusers file을 이용하여 PAM인증을 하기를 원하면 이 지시자의

  # 값을 on으로 한다. default 값은 off 이다.

  AuthPAMAuthoritative          on

 

  # service를 시작하고 마칠 시간을 24시간 표기법으로 지정을 한다

  # UpTime      10

  # DownTime    23

 

  # 1.2.1 이하 버젼에서의 버그를 위한 설정

  DenyFilter                    \*.*/

</Global>

 

# 회선의 Bandwidth를 특정 속도로 제한을 한다. 단위는 bps이다.

#RateReadBPS                    256

#RateReadFreeBytes              5120

#RateReadHardBPS                on

 

 

# 접속 대기 시간을 설정한다. user 가 접속후 아무 작동도 안할때 일정 시간후에

# 접속이 종료되게 한다

TimeoutIdle                     600

TimeoutNoTransfer               600

TimeoutLogin                    0

 

# DeferWelcome 는 client가 인증을 하기 전에 servername을 display하는

# 것을 방지한다.

DeferWelcome                    off

 

# 'welcome.msg는 login시에 보여지고, 'message'는 각 하위 디렉토리에 접속

# 했을때 보여지게 된다.

DisplayLogin                    /usr/local/etc/welcome.msg

DisplayFirstChdir               .message

 

# DoS 공격을 막기 위해, 자식 process의 maximun number를 30으로 설정한다.

# 만약 30이상의 접속을 허락할 필요가 있다면 간단하게 이 치수를 증가시키도록

# 한다. 이것은 오직 standalone mode에서만 가능하다. inetd mode에서는

# service 당 maximun number를 제한 하는 것을 허락하는 inetd server에서

# 설정을 해야 한다.(xintd 역시 마찬가지 이다)

# MaxInstances                  30

 

User                            nobody

Group                           nobody

 

# 일반적으로 file들을 overwrite를 가능하게 한다.

<Directory /*>

  AllowOverwrite                on

</Directory>

 

# ls 명령어의 -a option으로 hidden file을 볼수 있게 한다.

# LsDefaultOptions              "-a"

 

<Anonymous ~ftp>

  User                          ftp

  Group                         ftp

 

  # Anonymous user가 ftp로 접근하여 shell의 권한을 얻는 것을

  # 방지한다.

  RequireValidShell             off

 

  # Anonymous 접근을 할때 특정 password를 지정할수 있다.

  # 단 위의 User 지시자의 name이 passwd file에 등록이 되어져

  # 있어야 한다. 이 지시자가 on일 경우 이메일 주소로 login을

  # 할수 없다.

  # AnonRequirePassword         on

  # ShowSymlinks                off

 

  # User name "ftp"로 anonymous login을 할수 있도록 한다

  UserAlias                     anonymous       ftp

 

  <Limit LOGIN>

    AllowAll

  </Limit>

 

  DisplayLogin                  welcome.msg

  DisplayFirstChdir             .message

 

  # 최대 접속 인원수를 지정한다.

  MaxClients                    100

 

  # 하나의 호스트로 부터 동시에 접근할수 있는 수를 지정한다.

  # 아래의 기본 설정으로는 하나의 호스트에서 한번의 접근만 허용한다.

  MaxClientsPerHost             5 "Sorry, 3 connection allow per one host"

 

  # 하나의 계정ID로 동시에 접근할수 있는 호스트 수를 지정한다.

  # 아래의 기본 설정으로는 하나의 계정 하나 호스트에서만 접근만 허용한다.

  # 하나의 계정에 하나의 접근만을 허락하려면 위의 MaxClientsPerHost의

  # 값과 MaxHostsPerUser의 값이 둘다 1이면 된다.

  MaxHostsPerUser               5 "Sorry, one hosts allow per one user"

 

  # 소유권이 root인 file이나 directory들을 보여주지 않는다

  #HideUser                     root

 

  # 그룹권한이 root인 file이나 directory들을 보여주지 않는다

  #HideGroup                    root

 

  # upload/download 비율을 지원한다.

  # /usr/doc/proftpd-1.2$VERSION/mod_ratio.c를 참조하라

  #

  # Ratios      on

  # HostRatio   foobar.net 100 10 5 100000

 

  # 서버를 시간대로 운영하는 것을 지정한다.

  # 아래의 예는 오후 3시 부터 오후 6시까지만

  # 서버의 접속을 가능하게 한다.

  #

  # UpTime      15

  # DownTime    18

 

  <Limit WRITE>

    DenyAll

  </Limit>

 

  # Upload directory, allow upload and mkdir, deny download.

  # Upload directory 설정이다. upload와 mkdir은 허락하며,

  # download는 거절한다

  #

  # <Directory incoming>

  #   <Limit READ>

  #     DenyALL

  #   </Limit>

  #   <Limit STOR MKD>

  #     AllowALL

  #   </Limit>

  # </Directory>

 

  # 사용자가 접근하기를 원하지 않는 private directory

  #  <Directory logs>

  #    <Limit READ WRITE DIRS>

  #      DenyAll

  #    </Limit>

  #  </Directory>

 

</Anonymous>

 

로그인시 보여줄 welcome.msg파일을 만들어준다.

# vi welcome.msg

 

#################################################################

#                                                               #

#                  Open Lecture Project                         #

#                 http://www.leelab.co.kr                       #

#                                                               #

#                 LeeLAB's ProFTPd Server                       #

#                                                               #

#################################################################

 

2.8 Anonymous ftp 설정하기

# cd /usr/local/etc

# vi proftpd.conf

 

생략

 

<Anonymous ~ftp>

  User                          ftp

  Group                         ftp

 

생략

 

# cd /etc

# vi passwd

생략

ftp:x:14:50:FTP User:/home/ftp:

생략

 

# cd /home

# ls -al

total 5

drwxr-xr-x   14 root     root         4096 Dec 25 01:16 .

drwxr-xr-x   24 root     root         4096 Jan  9 20:23 ..

 

생략

 

drwxr-xr-x    6 ftp      ftp          4096 Oct 25 02:50 ftp

 

생략

만약에 다를 경우

# chown -R ftp.ftp ftp

 

 

2.9 데몬 실행하기

(1) 런레벨을 이용한 실행

# /etc/rc.d/init.d/proftpd stop

# /etc/rc.d/init.d/proftpd start

 

(2) Xinetd를 이용한 실행

# /etc/rc.d/init.d/xinetd stop

# /etc/rc.d/init.d/xinetd start

 

런레벨을 이용한 실행시, 리눅스 부팅시 데몬을 실행하기 위해서는

# ntsysv

에서 proftpd를 선택하면 된다.

 

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.