ProFTPD - WindyHana's Solanara

목차

개요

설치

  1. OpenSSL

    윈디하나의 솔라나라: OpenSSL를 참고해 OpenSSL을 설치하고, 인증서를 만들어 놓는다. ProFTPD의 ftpes, ftps, sftp 기능을 사용할 것이 아니라면 설치할 필요 없다.
  2. MySQL

    윈디하나의 솔라나라: MySQL 5.6를 참고해 MySQL 을 설치한다. FTP를 사용할 사용자의 계정 정보를 데이터베이스에서 관리할 것이 아니라면 MySQL을 설치할 필요 없다.
  3. ProFTPD

    root@wl ~/src # wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.5b.tar.gz
    root@wl ~/src # tar xvfz proftpd-1.3.5b.tar.gz
    root@wl ~/src # cd proftpd-1.3.5b
    root@wl ~/src/proftpd-1.3.5b # ./configure \
      --with-includes=/usr/local/include:/usr/include:/usr/local/ssl/include \
      --with-libraries=/usr/local/lib:/usr/lib:/usr/local/ssl/lib \
      --prefix=/usr/local/proftpd \
      --enable-sendfile \
      --enable-autoshadow \
      --enable-ctrls \
      --enable-openssl \
      --enable-facl \
      --enable-nls \
      --enable-dso \
      --with-mysql-config=/usr/local/mysql/bin/mysql_config \
      --with-modules=mod_unique_id:mod_site_misc:mod_sftp:mod_tls:mod_tls_shmcache:mod_shaper:mod_sql:mod_sql_passwd:mod_sql_mysql:mod_wrap2:mod_wrap2_file:mod_wrap2_sql
    root@wl ~/src/proftpd-1.3.5b # make
    root@wl ~/src/proftpd-1.3.5b # make install
    
    각 모듈은 아래와 같은 기능을 가진다.
  4. 경로설정

    ProFTPD의 ftpwho(1), ftptop(1), ftpshut(8)등을 쉽게 사용하기 위해 PATH를 걸어준다. 솔라리스10 이하에는 같은 이름을 가진 wu-ftp에서 사용하는 ftpwho(1), ftpshut(1M)/usr/sbin에 설치되어있으니 주의하자.
    root@wl # vi /etc/profile
    ...
    if [ -x /usr/local/proftpd/bin/ftpwho ]; then
      PATH=/usr/local/proftpd/sbin:/usr/local/proftpd/bin:$PATH; export PATH;
    fi
    root@wl #
    

실행 및 설정

ProFTPD 실행

ProFTPD는 inetd(1M)를 이용해 띄울수 있지만 여기서는 단일 프로세스(standalone)로 띄우는 방법에 대해 설명한다.

기본 설정

필요하다고 생각되는 기본 설정에 대해 소개한다. 각 옵션에 대한 자세한 사항은 ProFTPD의 문서를 읽어보자.
root@wl ~ # vi /usr/local/proftpd/etc/proftpd.conf
DefaultAddress    0.0.0.0
Port              21

#AllowstoreRestart on
#RequireValidShell off
#UseReverseDNS     off
#IdentLookups      off
ShowSymlinks      on
DefaultRoot       ~
ServerIdent       on      "FTP server"
#DisplayConnect    /etc/proftp.connect.msg
#DisplayLogin      /etc/proftp.login.msg
MaxClients        100     "Sorry, the maximum number(%m) of allowed users are already connected"
MaxClientsPerHost 5       "Sorry, the maximum number clients (%m) from your host are already connected"
HideUser          root
HideGroup         root
AuthPAM           On
AuthPAMConfig     ftp
UseEncoding       on
#AllowForeignAddress on
TCPAccessFiles /etc/hosts.allow /etc/hosts.deny

FTPES/FTPS 설정

SFTP 설정

Anonymous FTP 설정

익명 FTP(Anonymous FTP)란, 사용자 인증 과정 없이 사용할 수 있는 FTP서비스를 말한다. ProFTPD를 Anonymous FTP로 설정해도, 접속하는 사람은 사용자 이름과 패스워드를 입력해야 하는데, 사용자 이름에 anonymous를, 패스워드에는 공란으로 두거나 임의의 e-Mail 주소를 입력해 접속하면 된다.
# 익명 FTP에 사용할 계정을 만든다. Anonymous FTP를 이 사용자의 권한으로 실행될 것이다.
root@wl ~ # /usr/sbin/groupadd -g 103 ftp
root@wl ~ # useradd -d /export/home/ftp -g ftp -u 104 -s /bin/false ftp
root@wl ~ # mkdir /export/home/ftp # Anonymous FTP의 홈 디렉토리. 소유자와 그룹 모두 root, staff로 놔둔다.
root@wl ~ # vi /usr/local/proftpd/etc/proftpd.conf # Anonymous태그의 코멘트를 풀면 설정은 완료된다.
# A basic anonymous configuration, no upload directories.  If you do not
# want anonymous users, simply delete this entire <Anonymous> section.
<Anonymous ~ftp>
  User                         ftp
  Group                                ftp

  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias                    anonymous ftp

  # 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
#  DisplayFirstChdir           .message

  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>
</Anonymous>
root@wl ~ # pkill proftpd
root@wl ~ # /usr/local/proftpd/sbin/proftpd
익명 사용자도 업로드 할 수 있도록 incomming 디렉토리 만들어 보자. 장담하지만, 특별한 접근 제한이 없다면 일주일 이내에 WAREZ에 의해 장악된다. TCPWrapper등을 이용해 접근제한을 하지 않는다면, 실제 서비스에서 익명사용자 업로드는 하지 않는 것이 좋다.
root@wl ~ # mkdir /export/home/ftp/incomming
root@wl ~ # chmod 777 /export/home/ftp/incomming
root@wl ~ # vi /usr/local/proftpd/etc/proftpd.conf
# 다음을 추가한다.
<Anonymous ~ftp>
  ...
  # <Anonymous ~ftp>와 </Anonymous> 사이에 아래를 추가한다.
  <Directory incoming>
  AllowOverwrite                on
  AllowStoreRestart             on
    <Limit STOR MKD>
      AllowALL
    </Limit>
  </Directory>
</Anonymous>
root@wl ~ # pkill proftpd
root@wl ~ # /usr/local/proftpd/sbin/proftpd # ProFTPD는 재시작하는 것이 없다.
※ Anonymous의 User와 Group을 모두 ftp로 하였고, AnonymousFTP로 접속한 유저는 ftp:ftp권한을 가진다는 것을 생각하면 이해하기 쉬울 것이다.

IP기반의 접근 제어

아래 예제는 192.168.0.3,192.168.0.2 에서만 접근 가능하도록 설정한 것이다. 그 외의 호스트에서는, ProFTPD 와 TCP/IP Connection은 이루어지지만, 아이디와 패스워드에 상관 없이 무조건 인증이 거부된다. 21번 포트에 접속조차 되지 않도록 하려면 방화벽을 사용해야 한다.
root@wl ~ # vi /usr/local/proftpd/etc/proftpd.conf
# TCPAccessFiles부분을 추가한다.
TCPAccessFiles /etc/hosts.allow /etc/hosts.deny
root@wl ~ # vi /etc/hosts.deny
ALL:ALL
root@wl ~ # vi /etc/hosts.allow
proftpd: 192.168.0.3,192.168.0.2
root@wl ~ # pkill proftpd
root@wl ~ # /usr/local/proftpd/sbin/proftpd

SQL 인증

로그

ProFTPD는 전송 로그를 /var/log/xferlog에 저장한다. 형식은 아래와 같다.
로그시간 전송시간 원격호스트이름 파일크기 파일이름 전송종류 특별전송플래그 방향 접근모드 유저이름 서비스이름 인증방법 인증된유저ID 완료여부
로그 파일의 형식에 대한 예이다.
root@wl ~ # tail /var/log/xferlog
Fri Nov 11 11:56:28 2005 0 xxx.xxx.xxx.xxx zzzz /sample.txt a _ i r webmaster ftp  1  *  c
-----------------------1 2 --------------3 ---4 ----------5 6 7 8 9 -------10 -11 12 13 14
  1. 로그시간. 로그가 저장된 로컬 호스트의 현재 시간
  2. 전송시간. 전송에 소요된 시간. 초
  3. 원격호스트이름. 없는 경우 IP로 저장됨
  4. 파일크기. 바이트
  5. 파일이름.
  6. 전송종류. a: 아스키 전송, b: 바이너리 전송
  7. 특별전송플래그. C: 파일 압축됨, U: 파일 압축풀림, _: 해당없음
  8. 방향. o: 외부(Outgoing), i:내부(Incoming), d:삭제(Deleted)
  9. 접근모드. a: 익명유저(Anonymous), g: 손님유저(Guest), r: 로컬 인증된 유저(Real)
  10. 유저이름. 로컬 유저이름. 손님인 경우 주어진 ID.
  11. 서비스이름. 수행될때의 서비스/프로토콜 이름. 일반적으로 ftp나 ftps
  12. 인증방법. 0: 없음, 1: RFC 931 - Authentication server
  13. 인증된유저ID. 인증 메쏘드에 의해 얻은 유저ID. *의 경우 존재하지 않음
  14. 완료여부. c: 전송이 완료됨, i: 전송이 완료되지 않음
RSS ATOM XHTML 1.0 CSS3