'proftpd'에 해당되는 글 1건

  1. 2008.12.18 ProFTPD 설치와 설정, 운영
2008. 12. 18. 02:36

ProFTPD 설치와 설정, 운영

ProFTPD 설치와 설정, 운영


■ 설치전 준비

다른 ftp 패키지가 있다면 삭제
# rpm -qa | grep ftpd
lftp-3.5.1-2.fc6
vsftpd-2.0.5-12.el5   
ftp-0.17-33.fc6
# rpm -e vsftpd
# rpm -qa | grep ftp
lftp-3.5.1-2.fc6
ftp-0.17-33.fc6
#

■ 소스 or 패키지 준비

  • gcc
  • make compiler tools
  • proftpd 소스파일
확인
# gcc --version
# make --version

■ 소스 다운로드 및 압축 해제


==================================================
다운로드
# wget
ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.1.tar.gz
압축 해제
# tar xvfz proftpd-1.3.1.tar.gz
# cd proftpd-1.3.1


■ 컴파일 및 설치

순서
# ./configure && make && make install
configure --> makefile  --> make
- 환경 탐색? 을 통해 컴파일 될 목록을 makefile로 만드는 과정이다
- prefix는 설치 위치를 나타내는데 default 위치가 있다.
make
- configure에서 나온 makefile의 룰에 따라 컴파일 하는 과정
make install 
- make에서 만들어진 실행파일을 해당 경로에 이동~!

TIP.
만약 prefix값이 없을 경우
보통
/usr/local/bin or sbin   에 설치가 되며
( 이 위치는 PATH변수에 미리 등록이 되어있어 절대경로 없이 바로 쓸 수 있다.)
/usr/local/etc 에 conf 가 있다.
which 를 통해 path변수에 저장된 실행 파일 위치 찾을 수 있다.

■ 설치와 실행

# ./configure && make && make install
# echo $?                   <이전 실행 결과를 물어봄>
0          <위 명령어의 실행결과를 보자 0이라면 위 명령이 정상 실행 되었다는 뜻이다.>
 # which proftpd
/usr/local/sbin/proftpd
< ftp데몬을 실행>
# proftpd
 - no such group 'nogroup'
 - Fatal: Group: Unknown group 'nogroup' on line 27 of '/usr/local/etc/proftpd.conf'
# /usr/local/sbin/proftpd
 - no such group 'nogroup'
 - Fatal: Group: Unknown group 'nogroup' on line 27 of '/usr/local/etc/proftpd.conf'
<기본 값으로 설정시 에러 메시지 나올수 있음>
< nogroup 이란 그룹이 없다는 메시지 >
nogroup추가
# groupadd nogroup  < 추가 혹은 proftpd.conf 에서 nogroup을 -> nobody 로 수정 >
# /usr/local/sbin/proftpd       <정상구동 되었다>
# echo $?
0
# netstat -atpn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
  
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      13499/proftpd: (acc
< proftpd 데몬이 구동중인것을 볼 수 있다>
<만약 구동에 실패 한다면 >
# vi /usr/local/etc/proftd.conf
에러를 보면서 conf file을 적당히 수정

 ■ 간단한 테스트

일반 계정을 추가한다. 초기 디폴트 설정 값에서는 root로 접속 불가
# useradd user01
# passwd user01
...

< windows -> cmd에서 간단히 테스트 정상작동하였다!>

TIP. 테스트 실패시
c:\> telnet < IP >
만약 호스트에 연결 할 수 없다는 메시지가 나온다면
c:\> ping   < IP > 확인후
방화벽 설정을 확인해봐야 한다.
보통 기본적인 방화벽으로 < lokkit > , < iptables > 두가지가 있는데
테스트를 위해서 iptables를 수정 하거나 정지
lokkit 설정에서 ftp를 열어주어야 한다.
참고로 직접 iptables를 설정 해주지 않았다면 서비스가 시작 되어 있지 않을것이다!!
# lokkit



 ■ proftpd.conf 설정

ServerName                      "ProFTPD Default Installation"
# 현재 운영중인 FTP서비 이름을 설정하는곳

ServerType                      standalone
# 데몬 타입

DefaultServer                   on
# FTP서버의 primary IP or 가상 FTP 호스트 서비스 설정 블록에서 설정된 IP Address로 부터 연결 요청이 있을 때 기본으로 응답할 서버 설정하는것이며 오직 하나만 기본으로 설정될 수 있다.

# Port 21 is the standard FTP port.
Port                            21
# 기본 포트

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask                           022
# 클라이언트 사용자가 ftp로 접속하여 파일 업로드시 생성되는 파일과 디렉토리의 퍼미션 조정값

MaxInstances                    30
# proftpd 데몬 실행 할때 최대 자식 프로세서 생성 개수 지정(standalone모드일경우)

User                            nobody
Group                           nogroup
# proftpd 데몬 실행시 어떤 유저와 그룹의 권한으로 실행하겠다라는 설정

DefaultRoot ~
# 각 계정의 홈디렉토리를 최상위 ( / ) 로 표시
# 특정 그룹만 최상위 접속 권한 줄려면 DefaultRoot ~ ! anygroup 으로 설정

# Normally, we want files to be overwriteable.
AllowOverwrite          on
# 이미 업로드된 파일의 덮어 쓰기를 허용 유무
# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
  DenyAll
</Limit>
# ftp 사용자가 업로드한 파일에 대해 퍼미션을 조정하지 못하도록 하는 옵션
# 허용은 AllowAll

# A basic anonymous configuration, no upload directories.  If you do not
# want anonymous users, simply delete this entire <Anonymous> section.
<Anonymous ~ftp>
# anonymous server 설정을 위한 탭 <Anonymous ~ftp> ~~</Anonymous>
User                          ftp
Group                         ftp
# 익명 사용자들이 할당받을 이름 지정
  # We want clients to be able to login with "anonymous" as well as "ftp"
 
UserAlias                     anonymous ftp
# 익명 ftp 서버의 접속자 유저명을 항상 anonymous로

  # Limit the maximum number of anonymous logins
 
MaxClients                    10
# 익명서버 동시 접속자수
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin                  welcome.msg
# 익명서버 접속시 보여줄 메시지
DisplayChdir                  .message
# /var/ftp 하위 디렉토리 접속시 메시지 지정

  # Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
  DenyAll
</Limit>
# 익명접속자에 대해 쓰기 제한
</Anonymous>




■ inetd mode 변경

# vi /usr/local/etc/proftpd.conf
#ServerType                      standalone
# 서버 타임을 inetd로 변경
ServerType                      inetd

# vi /etc/xinetd.d/proftpd

service ftp
{
 disable = yes
 flags    = REUSE
 protocol = tcp
 socket_type =stream
 port = 21
 instances = 30
 wait = no
 user = root
 server = /usr/local/sbin/in.proftpd
 log_on_success=HOST PID
 log_on_failure+=USERID
 log_on_failure = HOST RECORD
 server_arg= -l -a
}
# /etc/rc.d/init.d/proftpd stop        < 기존의 standalone type이 동작 중이면 정지>
# pkill -9 proftpd

# /etc/rc.d/init.d/xinetd restart      < xinetd 가 없다면 yum으로 설치 >


 ■ proftpd 로그 파일 관리

소스파일로 설치 하기전

# cd /usr/src/proftpd-1.3.1/contrib/dist/rpm
# ls
ftp.pamd  proftpd.init.d  proftpd.init.d.suse  proftpd.logrotate  xinetd
# cp proftpd.logrotate /etc/logrotate.d/proftpd
/etc/logrotate.d 디렉토리에 넣어놓면 알아서 작동한다 ㅡㅡ;

■ 부팅시 자동 실행

# vi /etc/rc.d/rc.local

########### proftpd auto running test###########
/usr/local/sbin/proftpd &




시작스크립트 생성
소스 파일있는곳에서
# pwd
/usr/src/proftpd-1.3.1/contrib/dist/rpm
# vi proftpd.init.d
PATH="$PATH:/usr/local/sbin"   < proftpd 위치로 변경 >
# ls
ftp.pamd  proftpd.init.d  proftpd.init.d.suse  proftpd.logrotate  xinetd
# cp proftpd.init.d /etc/init.d/proftpd
# /etc/init.d/proftpd stop
# /etc/init.d/proftpd start
# chkconfig --add proftpd
# chkconfig --list proftpd           < 원하는 레벨로 변경 >

 
DefaultRoot ~aaa,bbb,ccc
-> aaa, bbb ,ccc 그룹 사용자 접속시
 자신의 홈디렉토리가 / 로 표시된다.
DefaultRoot  ~!aaa
-> aaa 그룹제외한 사용자들은
 자신의 홈디렉토리가 루트 디렉토리가 된다.

 

CWD : 디렉토리 이동
MKD : 디렉토리 생성
RNFR, RNTO : 디렉토리 이름 바꾸기
DELE : 파일 삭제 권한
RMD : 디렉토리 삭제
RETR : 파일 전송 ( 서버 - 클라이언트)
STOR : 파일 전송( 클라이언트 -> 서버)
READ : 파일 리스트 확인  ( RETR, STAT)
 파일 읽기와 관련된 모든 FTP명령
DIRS :  디렉토리 목록에 관련된   ""
 -> LIST, NLST
LOGIN : 서버에 연결하거나 로그인을 제한하고자 할떄
WRITE : 생성에 관련된 모든 FTP명령


예)
<Limit LOGIN> # anonymous 허용
 AllowAll
</Limit>
<Limit LOGIN>
 Order Allow, Deny
 Allow from 192.168.0.100 192.168.0.11
 Allow from 203.241.205.,.rootman.co.kr
 Deny from all
</Limit>
<Limit Write>
 AllowAll
<Limit>