1. Rad Hat 계열 Linux에 설치

 

Rad Hat이 설치된 컴퓨터에 ftp server를 설치하기 위한 절차를 기술함

 

# yum -y install proftpd : ftp daemon을 설치

 

2. Ubuntu Linux에 설치

 

Ubuntu가 설치된 컴퓨터에 ftp server를 설치하기 위한 절차를 기술함

 

 

# sudo apt-get install proftpd : ftp daemon을 설치


[참고]

명령어 앞의 sudo는 root 권한으로 실행하겠다는 의미임

 Ubuntu에서는 root 계정을 별도로 사용하지 않고 # sudo -s 하면 일정시간동안 root 권한으로 실행할 수 있음

 apt-get은 Internet을 통해 package 설치를 할 때 사용하는 명령임


configuration file은 /etc/proftpd/proftpd.conf이며 실행 file은 /etc/init.d/proftpd임


3. 환경설정

 

Fedora에서의 설정

# vi /usr/local/proftpd/etc/proftpd.conf 

웹서비스와 같이 실행 되도록 설정, FTP 서버의 성능과 안정성이 필요하다면 standalone으로 그냥 둠


ServerType inetd

MaxInstances 5

# 최대 연결 수 설정

Group nobody

# FTP 그룹이 없기 때문에 그룹 설정을 변경 (nogroup -> nobody)

DefaultRoot ~ !jhlee

# jhlee 그룹 사용자 이외의 사용자에 대한 home 디렉토리 이동 제한 설정

# ~ -> ~ !jhlee

#UseIPv6 off

# Fatal: UseIPv6: Use of the UseIPv6 directive requires IPv6 support (--enable-ipv6) on line 14 of '/usr/local/proftpd/etc/proftpd.conf' 오류 발생 시 IPV6 관련 옵션제거

# Anonymous 관련 설정 제거


Ubuntu에서의 설정

 

# sudo vim /etc/proftpd/proftpd.conf


[참고]

vim은 UNIX 계열에서 사용하는 editor vi의 improved program이며 vim 대신에 vi 또는 gedit 등을 사용하여도 무방함


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

# Global 섹션   

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

 

ServerName                  "ProFTPD Default Installation-WOW"

# 서버의 이름을 정해서 적어준다.

ServerType                   inetd

# inetd와 standalone 모드 중에서 선택

DefaultServer                 on

# 주 IP address 또는 <VirtualHost> 설정 블록에서 지정되어진 address 중의 하나가 아

# 닌 IP address로 들어오는 connection이 있을 때 기본으로 사용되어질 서버 설정 조절

Port                         21

# Proftpd가 사용할 기본 포트를 지정

# ADSL이나 케이블 같은 유동 IP 환경에서는 ISP 업체에서 21번 23번 25번 80번 포트 등

# 을 필터링 하기 때문에 ftp 기본 포트를 변경해야 외부에서 접속 가능

Umask                       022

# umask를 설정해주는 지시자

# 새로 생성되는 파일이나 디렉토리의 기본 permission을 결정

# umask 022는 644의 permission을 가진 파일과 755의 permission 가진 디렉토리 생성

MaxInstances                 30

# proftpd가 standalone 모드로 작동할 때 최대로 생성할 수 있는 자식 프로세스 정의

# DoS 공격에 대한 보호 목적이므로 적당한 값을 설정해서 사용

User                         nobody

# proftpd가 실행 될 때 User 지시자로 정의된 사용자명으로 실행

# 보안상 절대 root로 실행되게 해서는 안 됨

Group                       nobody

# User 지시자와 마찬가지이고 proftpd가 실행 될 때 Group 지시자로 정의된 Group 명

# 으로 실행

UseReverseDNS              off

# 접속자의 IP 주소를 Reverse Mapping을 하지 않겠다는 설정

# Reserver Mapping이란 IP 주소를 도메인으로 변경하는 것

IdentLookups                off

# 일반적으로, 클라이언트가 proftpd로 연결했을 때, ident protocol(RFC1413)은 remote

# username의 확인을 시도되기 위해 사용

# IdentLookups 지시자를 통해 조절

AuthPAMAuthoritative        on

# PAM이 인증에 있어서 최종 단계의 권한을 가지게 함

# 즉 PAM 인증이 실패할 경우 클라이언트와의 연결을 거부함

RootLogin                   off

# ftp로의 root 로그인을 허락 또는 거부하기 위한 지시자

<Directory /*>

          AllowOverwrite                on

# 모든 디렉토리 내의 파일에 대해 같은 이름의 파일을 전송할 때 overwrite를 허락 또는

# 거부하기 위한 지시자

</Directory>

 

#  아래부터는 anonymous접속에 대한 설정

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

anonymous섹션

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

<Anonymous ~ftp>

# anonymous 설정을 시작

# anonymous 설정은 </Anonymous>까지 임

          User                  ftp

          Group                 ftp

# anonymous접속의 경우 proftpd가 실행 할 때 사용자명 "ftp" 그룹명 "ftp"로 실행

          UserAlias              anonymous      ftp

# anonymous로 ftp에 접속한 사용자들에 대해 접속자명을 ftp로 alias해 줌

# 즉 anonymous로 접속한 사용자들은 사용자명 "ftp"의 권한을 가지게 됨

          MaxClients            10   "Sorry, maxium users %m -- try again later"

# 동시 접속자수를 정의하는 지시자

# 정의한 수를 초과할 때 " " 안의 문자열을 사용자에게 출력

          MaxClientsPerHost      2   "Sorry, Allow only one client for host"

# 하나의 호스트 당 최대 접속수를 정의하는 지시자

# 정의한 수를 초과 했을 때 " " 안의  문자열을 사용자에게 출력

          DisplayLogin           welcome.msg

# ftp로그인 때 보여 지는 메시지 파일 이름을 정의

          DisplayFirstChdir        .message

# 각 서브 디렉토리로 이동할 경우 보여줄 메시지 파일을 정의

          RequireValidShell       off

# /etc/shells에 없는 shell binary로그인 여부를 결정

# 특별한 이유가 없다면 off로 설정

          HideUser              root

# HideUser로 설정된 유저 소유의 파일은 보이지 않음

 

# Anonymous's Uploads Directory

# 업로드 디렉토리 이름을 변경하고 싶으면 아래의 uploads를 적당한 이름으로 변경

<Directory uploads/*>

        AllowOverwrite            on

# overwrite를 허용

        AllowRetrieveRestart        on

        AllowStoreRestart           on

       <Limit DELE RMD>

               DenyAll

# 디렉토리 삭제(RMD) 권한을 주지 않음

       </Limit>

       <Limit READ STOR MKD>

# 파일 읽기(READ), 업로드(STOR), 디렉토리 생성(MKD)에 대한 제어

# 읽기(READ)권한은 다운로드를 의미

# 와우 리눅스 7.0에는 MKD가 MDK로 잘못 설정되어 있음

       AllowAll

# 읽기(READ), 업로드(STOR), 디렉토리 생성(MKD)에 대해 모두 허락

# 하지만 특정 권한에 DENY 설정을 하지 않는 이상 AllowAll 설정을 하지 않아도 Dney # 설정된 권한을 제외한 나머지 권한을 가짐

       </Limit>

</Directory>

# Anonymous's Public Directory

<Directory pub/*>

      <Limit READ>

      AllowAll

# 읽기(READ)권한을 허락

      </Limit>

 

      <Limit  STOR  DELE  RMD   MKD>

      DenyAll

# 업로드(STOR), 파일 삭제(DELE), 디렉토리 삭제(RMD), 디렉토리 생성(MKD)을 허락

     </Limit>

</Directory>

</Anonymous>

 Order를 이용한 권한 제어

 

위에서 다루었던 proftpd.conf는 단순히 AllowAll 과 DenyAll만을 사용해 권한 제어를 했는데 Order 명령을 이용해서 접근제어와 권한 제어를 할 수 있음

 

특정 호스트만 로그인을 허용할 때

<Limit LOGIN>

Order       allow,deny

Allow       from 203.241.205.,.rootman.co.kr

Deny        from all

</Limit>

 

Order 명령에서 Allow 와 Deny는 공백 문자가 아닌 쉼표(,)로 구분함

Allow 와 Deny의 대상을 입력할 때도 대상들의 구분은 공백이 아닌 쉼표(,)로 구분함

위의 설정은 203.241.205의 네트워크 주소를 가지거나 rootman.co.kr을 포함해 하위 호스트들만 접근이 가능하고 그 이외의 호스트에 대해서는 Login을 받아들이지 않음

 

예)

203.241.205.97          ---> 로그인 가능(203.241.205의 네트워크 주소를 가진다)

203.241.202.16          ---> 로그인 불가(203.241.205의 네트워크 주소를 가지지 않는다)

linux.rootman.co.kr       ---> 접속 가능(rootman.co.kr의 하위 호스트이다)

microsoft.com          ---> 접속 불가(rootman.co.kr의 하위 호스트가 아니다)

order명령은 LOGIN외에 READ, MKD, DELE, RMD, STOR등에도 적용할 수 있습니다.

 

 ftp 루트( / ) 디렉토리 지정


DefaultRoot                  ~

사용자가 fpt로 접속해서 자신의 홈 디렉토리 외에 다른 곳에는 접근하지 못하게 함

~(물결표시)는 사용자의 홈 디렉토리를 가리킵니다. 즉 자신의 홈 디렉토리가 루트(/) 디렉토리가 됨

이 지시자를 설정 하지 않으면 기본적으로 DefaultRoot는 /로 설정되어 있기 때문에 사용자는 최상위 경로(/) 까지 접근 할 수 있음

 

예)

DefaultRoot           ~aaa,bbb,ccc

--> aaa, bbb, ccc 그룹에 속하는 ftp 접속 시 자신의 홈 디렉토리가 루트(/) 디렉토리가 됨

 

DefaultRoot           ~ !aaa

--> aaa 그룹에 속하는 사용자들을 제외한 나머지 접속자들은 자신의 홈 디렉토리가 루트 (/) 디렉토리가 됨

 

 심볼릭 링크 파일 보여주기

 

ShowSymlinks            On  또는 Off

디렉토리에서 심볼릭 링크가 된 파일을 보여 주느냐, 보여 주지 않느냐에 대한 설정임

이 설정이 안 되어 있을 때에는 기본적으로 계정 사용자 접속의 경우에는 심볼릭 링크파일이 보이고 anonymous사용자 접속의 경우는 심볼릭 링크 파일을 보여주지 않음

전체 사용자에게 On 또는 Off를 설정하고 싶다면 Global 섹션에 포함 시키면 됨

 

 숨김 파일 보여주기

 

LsDefaultOption   "-a"

이 설정을 함으로써 점( . ) 으로 시작하는 파일 또는 디렉토리명을 보여 줌. 즉 숨김 파일에 대한 설정임. 하지만 요즘 사용하는 ftp클라이언트에서도 이 기능을 제공함

 

● welcome.msg 파일에 사용할 수 있는 유용한 것들

 

호스트명 : %L

남은 용량 : %f

현재 접속자 수 : %N

최대 접속자 수 : %M

리모트 호스트 : %R

사용자명 : %U

관리자 메일 : %E

 

# vi /etc/xinetd.d/proftpd

### pro-ftpd ###


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

}

(참고 : http://www.webtoedu.com/gachon_proftp2.php)

 

 

4. 실행

 

Ubuntu에서의 실행

 

# sudo /etc/init.d/xinetd restart (Ubuntu)

# service xinetd restart 또는 /etc/rc.d/init.d/xinetd restart (Rad Hat)


Fedora에서의 실행

 

# /etc/init.d/proftpd start

# /usr/local/proftpd/sbin/proftpd (compile을 통해 설치한 경우)

 

# ps -ef | grep proftpd (process 동작 확인)

nobody 23152 1 0 16:59 ? 00:00:00 [proftpd]

 

# netstat -an | grep LISTEN | grep 21 (21번 포트 확인)

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN

'IT > CISCO' 카테고리의 다른 글

Lock and Key ACL(Dynamic ACL)  (0) 2017.02.18
CBAC(Context-based Access Control)  (0) 2017.02.18
Linux에서 Telnet server 설치 및 운영 방법  (0) 2017.02.16
Linux에서 router 설치 및 운영 방법  (0) 2017.02.15
리눅스  (0) 2017.02.14

+ Recent posts