출처: https://levin01.tistory.com/1624


1. Proftp 소개  


1. Proftp 소개
Proftpd는 파일전송 프로토콜인 FTP의 일종으로서 보안적이고 신뢰적인 FTP서버가 되기를
희망하며 발전을 하며 Apache 설정파일과 같은 설정 방식을 따른다.
Proftpd는 다음 기능을 제공한다.
☞ Apache 웹 서버를 사용해 본 관리자라면 누구나 직관적으로 이해할 수 있는 지시자와
  지시그룹으로 된 단 하나의 설정 화일.
☞ Apache의 ".htaccess"와 비슷한 각 디렉토리의 ".ftpaccess" 설정.
☞ 쉽게 설정할 수 있는 다중 가상 FTP 서버와 anonymous FTP 서비스.
☞ 시스템 부하에 따라 stand-alone 또는 inetd 중에서 골라서 운영되도록 만들어짐.
☞ anonymous FTP의 root 디렉토리에는 특별한 디렉토리 구조나 시스템 화일이 없어도 됨.
☞ SITE EXEC 명령이 없다. 현대의 인터넷 환경에서 그런 명령은 보안면에서 악몽이다.
  ProFTPD는 어떠한 경우에도 어떤 외부 명령도 실행하지 않는다. 검사를 위해 관리자에게
  소스가 제공된다 (항상 제공될 것이다).
☞ 유닉스 스타일 퍼미션에 기초한 숨겨지는 디렉토리나 화일들 또는 유저/그룹 소유권.
☞ "root" 권한을 따낼 수 있는 공격의 기회를 줄이기 위해 stand-alone 모드에서는 특권이
없는 유저도 운영을 할 수 있도록 설정가능. 주의: 이 기능은 Unix 시스템의 능력에 기초한다.
☞ 기록하기, utmp/wtmp 지원. 기록하기는 wu-ftpd 표준과 호환이며 확장된 기록하기도 가능하다.
☞ shadow 암호 지원, 만료된 계정들 지원 포함.
                                                             <자료출처 : proftpd.oops.org>


2. Proftp 설치파일 확인  


1. 패키지 확인 및 파일설명
]# rpm -qa | grep proftp [Enter]
proftpd-1.2.1-2wl

]# rpm -ql proftpd-1.2.1-2wl  [Enter]
/etc/pam.d/ftp  #ftp사용자 인증할때 사용한다.
/etc/proftpd/conf/ftpusers # ftp접속을 제한하는 사용자를 등록한다.
/etc/proftpd/conf/proftpd.conf #ftp설정파일이다.
/etc/proftpd/conf/proftpd.xinetd #ftp를 xinetd에 넣을때 사용되는 파일이다.
/etc/proftpd/document
/etc/rc.d/init.d/proftpd   #proftpd 대몬파일이다.
/usr/sbin/ftpshut    # proftp대몬을 죽일때 사용한다.
/usr/sbin/in.ftpd
/usr/sbin/in.proftpd  # xinetd에 넣을때 사용되는 대몬
/usr/sbin/proftpd
/usr/sbin/xferstats  #ftp상태를 보여준다.
.............
/var/ftp/incoming   # 디렉토리생성
/var/ftp/pub        # 디렉토리생성
/var/run/proftpd    # 디렉토리생성




3 Proftpd.conf  


1. 설정 파일 분석
]# cat /etc/proftpd/conf/proftpd.conf [Enter]
# ProFTPD configuration file. Need more information of configuration,
# See the References in '/usr/share/doc/proftpd-core-{version}/' directory
# If u have any question, visit our Web Site.http://www.wowlinux.com
# orhttp://proftpd.oops.org
# Thank you - WOWLINUX.COM


#########################
#    Global start       #    ## Global Section
#########################

ServerName "canux.pe.kr FTP Server"
# ftp서버네임을 지정해준다.

ServerType standalone
# 서버타입을 적어주는 곳으로 standalone,xinetd두가지 방법이 있습니다.

DefaultServer on
# ftp서버가 여러개일경우 기본ftp로 설정하는 부분이다.

Port 21
# ftp가 사용할 포트

Umask 022
# 파일생성시 퍼미션 지정

MaxInstances 30
# 최대 자식프로세스 수 지정

User nobody
# ftp가 실행되는 사용자명을 지정한다.

Group nobody
# ftp가 실행되는 그룹명을 지정한다.

DefaultRoot                  ~
# 계정사용자가 ftp로긴시 홈디렉토리외의 상위디렉토리 접근금지

UseReverseDNS off
# 호스트 이름으로 기록할 건지를 설정

ServerAdmincanux@canux.pe.kr
# 서버관리자메일주소지정한다. 문제발생시 관리자한테 메일을 발송한다.

IdentLookups off

AuthPAMAuthoritative on
# ftpusers를 사용하여 인증여부 설정

RootLogin off
# root관리자 로긴허용 여부 설정 만약 허용하고 싶을때는 ftpusers파일에서 root 각주처리

DenyFilter \*.*/
# 특수문자에 대해서 거부설정

DeferWelcome off
# 인증전 서버 이름이 화면에 뿌려지는 것인지 허용여부

TimesGMT off
# 타임아웃을 설정안함

#RateReadBPS 256
# 초당 전송 대역폭(BPS)

#RateReadFreeBytes 5120
#RateReadHardBPS on

TimeoutIdle 0
# client에서 아무런 작업을 하지 않을때 연결을 끊는 것을설정 0이면 연결제한을 안한다

TimeoutNoTransfer 0
# TimeoutIdle,TimeoutNoTransfer는 User가 접속 후 아무 작업도 하지 않을 경우 접속 종료 시간 설정

TimeoutLogin 300
# client가 인증을 유지할수 있는 시간을 초단위로 지정

DisplayLogin /etc/proftpd/conf/welcome.msg
# 로그인시 뿌려지는 메세지의 경로

DisplayFirstChdir .message
# 각 디렉토리별로 접근시 뿌려지는 메세지 파일 이름

<Directory /*>
 AllowOverwrite on
 # ftp / 디렉토리내에서 같은 이름의 파일이 전송받을때 덮어쓰기를 허용할지 거부할지 설정
</Directory*>

#########################
#    Global   END       #
#########################

#########################
#   Anonymous   start   #    ## Anonymous Section
#########################

<Anonymous ~ftp>

 User ftp
 #Anonymous로 접속할경우 사용자를 ftp로 인식한다.
 
 Group ftp
 #Anonymous로 접속할경우 그룹명을 ftp로 인식한다.

 UserAlias anonymous ftp
 #Anonymous접속한 사죵자의 접속자명을 ftp로 별칭
 
 MaxClients 10 "Sorry, maxium users %m -- try again later"
 #동시접속자수를 제한하는것으로 10이 초과시 " "안의 메시지를 출력한다.
 
 MaxClientsPerHost 2 "Sorry, Over 2 connection not allow"
 #한 호스트당 접속할수있는 최대 사용자수로 초과시 " "안의 메시지를 출력한다.
 
 DisplayLogin welcome.msg
 # ftp로 로긴할때 출력해지는 파일지정
 
 DisplayFirstChdir .message
 # 각 디렉토리별로 접근시 뿌려지는 메세지 파일 이름
 
 RequireValidShell off
 # Anonymous로 접속가능하게 할려면 off로 설정

#  HideUser root
# 지정한 사용자권한의 화일을 안보이도록 설정

#  HideGroup root
# 지정한 그룹권한의 화일을 안보이도록 설정

# Anonymous/'s Uploads Directory
 <Directory incoming/*>
   AllowOverwrite on
   # 같은이름의 파일을 덮어쓰기를 설정
   
   AllowRetrieveRestart on
   # FTP REST 명령을 통하여 file을 재전송 하는 것을 허용
   
   AllowStoreRestart on
   # client로 부터 server로 보내지는 store file 전송을 client가 "restarting" 하는 것을 허락하거나 거부
   
   <Limit DELE RMD>
   # 디렉토리삭제,삭제에 대한설정
   
     DenyAll
     # 디렉토리삭제,삭제에 전부 거부한다.
     
   </Limit>
   <Limit READ STOR MDK>
   # 읽기,저장디렉토리생성에 대한 설정
   
     AllowAll
     # 읽기,저장,디렉토리생성을 허락한다.
     
   </Limit>
   
   <Limit LOGIN>
   # 사용자로긴에 관한 설정
   
   Order deny, allow

   Deny from 203.249.73.2, 211.203.178.5, 211.112.37., .deny.com
   # 위의 아이피나 도메인명에서는 접속을 거부한다.

   Allow from all
   # 위의 거부목록을 제외한 나머지 머신에서는 접속이 가능하다.

   </Limit>
   
 </Directory>

# Anonymous\'s Public Directory
 <Directory pub/*>
 # pub/*아래파일에 대한 설정
 
   <Limit READ>
   # 읽기권한에 대한 설정
   
     AllowAll
     # 읽기권한 허락한다.
     
   </Limit>
   <Limit STOR DELE RMD MKD>
   # 저장,삭제,디렉토리생성,삭제에 대한 설정
   
     DenyAll
     # 저장,삭제,디렉토리생성,삭제를 거부한다.
   </Limit>
 </Directory>

</Anonymous>
#########################
#   Anonymous    end    #    ## Anonymous Section
#########################


4. /etc/proftpd/conf/welcome.msg  


1. welcome.msg설정
ftp사용자가 접속했을때 보여주는 메세지내용이다.
]# cat /etc/proftpd/conf/welcome.msg
ftp://%L/
Available Disk Space : %F
Now Login Users : %N/%M
Remote Host : %R Remote User : %u
Uptime : %T
Admin-Mail : %E

ftp접속후 나온결과
ftp://canux.pe.kr/
Available Disk Space : 408516
Now Login Users : 1/unlimited
Remote Host : 127.0.0.1 Remote User : UNKNOWN
Uptime : Wed Mar 27 05:55:03 2002
Admin-Mail :canux@canux.pe.kr


여기서 쓰이는 변수는 다음과 같은 뜻을 나타냅니다.
변수 설명
%L 서버명
%u 접속 계정명
%F 남은 용량
%T 접속 시간
%N 현 사용자
%E 관리자 e-mail
%M 최대 사용자
&C 현재 디렉토리
%R 리모트 호스트명


5. Xinetd Deamon 합류  


1. xinetd에 끼워넣기
rpm버젼을 설치했을경우 /etc/xinetd.d/에 proftpd설정파일은 /etc/proftpd/conf/proftpd.xinetd파일이다.
이파일을 이름을 proftpd로 바꾸어서 복사하면 된다.
만약 화일이 없다면 패키지 검사를 해보면된다.
]# rpm -ql proftpd | grep proftpd.xinetd [Enter]
/etc/proftpd/conf/proftpd.xinetd

]# service proftpd stop [Enter]
Shutting down proftpd: No way to suspend [  OK  ]

]# cat /etc/proftpd/conf/proftpd.conf | grep ServerType [Enter]
ServerType                      inetd    # 7.x대라고 xinetd를 적어주면 안된다.

]# vi /etc/xinetd.d/proftpd [Enter]
service ftp
{
       disable                 = no    #사용가능하도록 no로 설정
flags                   = REUSE
       protocol                = tcp
       socket_type             = stream
       instances               = 50
wait                    = no
       user                    = root
       server                  = /usr/sbin/in.proftpd
       log_on_success          = HOST PID
       log_on_failure          = HOST RECORD
nice = 10
}
위에서 바꿀내용은 사용여부만을 바꾸어주면 된다. 만약 소스로 설치했다면 server의 대몬경로를 수정해야 한다.

]# service xinetd restart [Enter]
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]

]# ftp 0 [Enter]
Connected to 0.
220 BCB1COOL Server (Proftpd FTP Server) [test.ilinuxbay.com]
500 AUTH not understood.
500 AUTH not understood.
KERBEROS_V4 rejected as an authentication type
Name (0:root): canux
331 Password required for canux.
Password:
230-ftp://test.ilinuxbay.com/
Available Disk Space : 408508
Now Login Users : 1/unlimited
Remote Host : 127.0.0.1 Remote User : UNKNOWN
Uptime : Wed Mar 27 14:05:51 2002
Admin-Mail :canux@canux.pe.kr
230 User canux logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
21 Goodbye
]#


6. ftp 관련 명령어  


1. proftp관련 명령어
- ftpusers
ftp접근사용자를 제한하는것으로 이파일안에 있는사용자는 ftp를 사용할수 없다.
]  # cat /etc/pam.d/ftp [Enter]
 auth       required     /lib/security/pam_listfile.so item=user sense=deny \
                         file=/etc/proftpd/conf/ftpusers onerr=succeed

 ]# cat /etc/proftpd/conf/ftpusers [Enter]
 # ftp로긴을 거부하는 사용자 목록
 root
 bin
 daemon
 adm
 lp
 sync
 shutdown
 halt
 mail
 news
 uucp
 operator
 games
 nobody
 gdm
 mysql
 canux
 ]#

- ftpshut
 지정한 시간에 모든 proftd server들을 shutdown 한다. 이 명령은 자동으로 shtudown 진행을
 준비하고, 자동으로 현재 proftpd connection을 끊을 수 있으며, 새로운 연결을 거부하도록
 할 수 있다. 명령은 suhtdown이 임박함을 proftpd process에 알리기 위하여 /etc/shutmsg와
 같은 control file을 이용하여 사용할 수 있다.

ftpshut [ -l min ] [ -d min ] time [ warning-message ]

 옵션 설명
 time time은 ftp server를 down시킬 시간을 말한다. now'라는 단어는 즉시 shutdown을
 지시하며 +number 또는 HHMM. 이라는 두 개의 형식 중 하나는 미래의 시간에 shut down을 지시한다.
 첫번째 형식은 number 분 후에 server를 down 하며 두번째 지시자는 하루 중 정확한 시간을
 지시하며 24시간 clock 형식을 사용한다. (예 오후3시 30분 : 1530 )

 -l min shutdown 전에 새로운 ftp access를 거부하는 것을 분단위의 숫자로 지정한다.
 만약 -l 옵션을 지정하지 않으면, 기본으로 10분이 적용된다.
 (만약 shutdown 까지 10분이 채 남지 않는다면 즉시 적용된다.)

 -d min shutdown 전에 현재 ftp connection들을 종료하는 것을 분 단위의 숫자로 지정한다.
 -d 옵션을 지정하지 않으면 기본으로 5분이 적용된다. shutdown이 5분 이내로 남았다면 즉시
 접속이 종료된다.


 warning-message(경고 메세지)

 새로운 접속을 거부하거나 현재 연결되어 있는 session을 종료시킬 때 부가적으로 메세지를
 준비할 수 있다. 메시지는 아래와 같은 변수를 이용해서 작성할 수 있다.

 %s proftpd가 종료하는 시간

 %r 새로운 접속이 거부되기 시작하는 시간

 %d 현재 접속이 종료되는 시간

 %C 현재 작업중인 directory (where applicable)

 %L local host name (of virtualhost name)

 %R remote host name

 %T local time (형식 : Thu Nov 15 17:12:42 1990)

 %U login time 시에 주어진 username

 ]# ftpshut -l 5 -d 5 /etc/proftpd/conf/warn.conf  [Enter]

+ Recent posts