[개인 서버 구축 가이드] ② FTP 서버 (vsftpd)

by legoboss posted Apr 01, 2016
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

FTP(File Transfer Protocol)


인터넷 상에서 파일을 주고 받을 때 많이 사용하는 전송방식입니다.

파일 전송에 촛점을 맞추고 있기에, 다른 프로토콜(http, scp 등)에 비해 속도면에서 우위를 가지고 있으며, 이어받기 등의 부가옵션도 지원합니다.


FTP 역시 SSH와 마찬가지로 서버와 클라이언트로 구성되어 있습니다.

리눅스에서 사용되는 FTP 서버의 종류로는 vsftpd, proftpd, atftpd, tftpd 등이 있으며, 과거에는 proftpd를 많이 사용하였으나, 최근에는 보안이 강화된 vsftpd (very secure FTP daemon)를 기본으로 사용하는 추세입니다.


하모니카 리눅스에서 apt-get 명령을 통해 쉽게 FTP 서버를 설치할 수 있습니다.


vsftpd.png


■ VSFTP 설치


① 먼저, 지원되는 FTP server 패키지를 확인해 봅니다.

$ apt search ftp | grep server

================================================================================

p   atftpd                          - advanced TFTP server                      

p   atftpd:i386                     - advanced TFTP server                      

v   ftp-server                      -                                           

v   ftp-server:i386                 -                                           

p   ftpd                            - File Transfer Protocol (FTP) server       

p   ftpd:i386                       - File Transfer Protocol (FTP) server       

p   ftpd-ssl                        - FTP server with SSL encryption support    

p   ftpd-ssl:i386                   - FTP server with SSL encryption support    

p   gesftpserver                    - sftp server submodule for OpenSSH         

p   gesftpserver:i386               - sftp server submodule for OpenSSH         

v   globus-gridftp-server-control-d -                                           

v   globus-gridftp-server-control-d -                                           

p   globus-gridftp-server-dbg       - Globus Toolkit - Globus GridFTP Server Deb

p   globus-gridftp-server-dbg:i386  - Globus Toolkit - Globus GridFTP Server Deb

p   globus-gridftp-server-progs     - Globus Toolkit - Globus GridFTP Server Pro

p   globus-gridftp-server-progs:i38 - Globus Toolkit - Globus GridFTP Server Pro

p   inetutils-ftpd                  - File Transfer Protocol server             

p   inetutils-ftpd:i386             - File Transfer Protocol server             

p   libglobus-gridftp-server-contro - Globus Toolkit - Globus GridFTP Server Lib

p   libglobus-gridftp-server-contro - Globus Toolkit - Globus GridFTP Server Lib

p   libglobus-gridftp-server-contro - Globus Toolkit - Globus GridFTP Server Lib

p   libglobus-gridftp-server-contro - Globus Toolkit - Globus GridFTP Server Lib

p   libglobus-gridftp-server-contro - Globus Toolkit - Globus GridFTP Server Lib

p   libglobus-gridftp-server-contro - Globus Toolkit - Globus GridFTP Server Lib

p   libglobus-gridftp-server-dbg    - Globus Toolkit - Globus GridFTP Server Deb

p   libglobus-gridftp-server-dbg:i3 - Globus Toolkit - Globus GridFTP Server Deb

p   libglobus-gridftp-server-dev    - Globus Toolkit - Globus GridFTP Server Dev

p   libglobus-gridftp-server-dev:i3 - Globus Toolkit - Globus GridFTP Server Dev

p   libglobus-gridftp-server6       - Globus Toolkit - Globus GridFTP Server    

p   libglobus-gridftp-server6:i386  - Globus Toolkit - Globus GridFTP Server    

p   libnet-tftp-perl                - Perl module for accessing TFTP servers    

p   nordugrid-arc-gridftpd          - ARC GridFTP server                        

p   nordugrid-arc-gridftpd:i386     - ARC GridFTP server                        

i A openssh-sftp-server             - secure shell (SSH) sftp server module, for

p   openssh-sftp-server:i386        - secure shell (SSH) sftp server module, for

p   pure-ftpd                       - Secure and efficient FTP server           

p   pure-ftpd:i386                  - Secure and efficient FTP server           

p   pure-ftpd-common                - Pure-FTPd FTP server (Common Files)       

p   pure-ftpd-ldap                  - Secure and efficient FTP server with LDAP 

p   pure-ftpd-ldap:i386             - Secure and efficient FTP server with LDAP 

p   pure-ftpd-mysql                 - Secure and efficient FTP server with MySQL

p   pure-ftpd-mysql:i386            - Secure and efficient FTP server with MySQL

p   pure-ftpd-postgresql            - Secure and efficient FTP server with Postg

p   pure-ftpd-postgresql:i386       - Secure and efficient FTP server with Postg

p   python-pyftpdlib                - Python FTP server library                 

p   tftpd                           - Trivial file transfer protocol server     

p   tftpd:i386                      - Trivial file transfer protocol server     

p   tftpd-hpa                       - HPA's tftp server                         

p   tftpd-hpa:i386                  - HPA's tftp server                         

p   twoftpd                         - a simple secure efficient FTP server (prog

p   twoftpd:i386                    - a simple secure efficient FTP server (prog

p   twoftpd-run                     - a simple secure efficient FTP server      

p   uec-provisioning-tftpd          - the UEC Provisioning TFTP server          

p   vsftpd                          - lightweight, efficient FTP server written 

p   vsftpd:i386                     - lightweight, efficient FTP server written 

================================================================================


② 설치하고자하는 패키지(vsftpd)를 확인한 뒤, 아래 apt-get 명령으로 설치합니다.

$ sudo apt-get install vsftpd

================================================================================

[sudo] password for user: 

패키지 목록을 읽는 중입니다... 완료

의존성 트리를 만드는 중입니다       

상태 정보를 읽는 중입니다... 완료

다음 새 패키지를 설치할 것입니다:

  vsftpd

0개 업그레이드, 1개 새로 설치, 0개 제거 및 276개 업그레이드 안 함.

111 k바이트 아카이브를 받아야 합니다.

이 작업 후 361 k바이트의 디스크 공간을 더 사용하게 됩니다.

받기:1 http://ftp.daum.net/ubuntu/ trusty-updates/main vsftpd amd64 3.0.2-1ubuntu2.14.04.1 [111 kB]

내려받기 111 k바이트, 소요시간 0초 (487 k바이트/초)

패키지를 미리 설정하는 중입니다...

Selecting previously unselected package vsftpd.

(데이터베이스 읽는중 ...현재 275580개의 파일과 디렉터리가 설치되어 있습니다.)

Preparing to unpack .../vsftpd_3.0.2-1ubuntu2.14.04.1_amd64.deb ...

Unpacking vsftpd (3.0.2-1ubuntu2.14.04.1) ...

Processing triggers for man-db (2.6.7.1-1ubuntu1) ...

Processing triggers for ureadahead (0.100.0-16) ...

ureadahead will be reprofiled on next reboot

vsftpd (3.0.2-1ubuntu2.14.04.1) 설정하는 중입니다 ...

vsftpd start/running, process 4081

Processing triggers for ureadahead (0.100.0-16) ...

================================================================================


③ vsftpd 서비스 데몬을 시작합니다.

$ sudo service vsftpd restart

   vsftpd stop/waiting

   vsftpd start/running, process 4127


④ 클라이언트에서 접속해봅니다. (알ftp, 파일질라 등)



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

#   [참고]    FTP 서버 추가 설정   #

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


FTP server 설치 및 구동은 쉽게할 수 있지만, 좀 더 고급지게(?) 사용하기 위해서는 몇 가지 추가 설정이 필요합니다.

vsftpd 서버에 대한 대부분의 설정은 /etc 밑에 있는 vsftpd.conf 파일에서 정의합니다.

$ sudo vi /etc/vsftpd.conf


■ 익명 사용자 접속 (anonymous_enable)

익명 사용자 접속이란, FTP 접속 시 특정 ID 계정으로 인증받고 접속하는 것이 아니라, 익명(anonymous)의 권한으로 접속하게 되는 경우를 말합니다. 일반적으로 공개(public)된 서버에서 사용하는 방식이며, vsftpd의 기본값은 "NO"이므로, 익명 사용자의 접속은 차단되어 있습니다. 만약 익명접속을 허용한다면 "YES"로 변경합니다.

anonymous_enable=NO


■ 기본 접속 경로 지정

vsftpd를 설치하면 "ftp"라는 이름의 사용자가 기본 등록되고, 이 사용자의 기본 접속 경로는 /srv/ftp 입니다.

(이 경로를 기본 경로로 사용해도 좋지만, 대부분 기본으로 설정하고자하는 경로가 다를 것이므로...)

예를들어 /var/ftp 라는 경로를 기본 경로로 사용하고자 한다면, 아래와 같이 해당 경로에 맞는 디렉터리를 만들고 ftp 사용자의 기본 경로를 바꾸면 됩니다.

$ sudo mkdir /var/ftp

$ sudo usermod -d /var/ftp ftp


※ 위 경로는 "익명(anonymous)" 사용자 접속 시의 기본 경로이며,

   FTP 접속 시 서버에 등록된 다른 계정으로 접속한다면,

   해당 계정의 홈 경로로 접속되므로 위 경로는 크게 고려치 않아도 됩니다.

   (예: "hamonikr"라는 계정으로 접속 시, /home/hamonikr 경로로 접속됨)


■ 계정 사용자 접속

서버에 등록된 계정 사용자들의 접속 가능 유무를 설정하는 것으로, 기본값은 "YES" 입니다.

공개(public) 서버에서 익명(anonymous) 접속만 허용하고, 일반 계정 사용자의 접속은 제한한다면, 해당 값을 "NO"로 수정하면 됩니다.

local_enable=YES


■ 업로드 허용

ftp로 접속한 후, 파일 업로드(write)를 허용할지를 설정하는 것으로, 기본값은 "YES" 입니다.

만약 파일 업로드를 하지 못하도록 제한하고자 한다면, "NO"로 수정하고, 앞에 있는 주석(#)을 지워줍니다.

#write_enable=YES


■ 사용자 계정 상위 디렉터리 이동 제한

FTP로 접속 한 사용자가 자신의 경로 위로 이동하지 못하도록 제한하는 것으로, 기본값은 "YES" 입니다.

#chroot_local_user=YES


■ FTP 접속을 거부할 계정 등록

서버에 등록된 여러 사용자 계정 중에서 FTP 접속을 차단할 계정이 있다면, 아래 파일에 ID를 별도로 등록해 줍니다.

$ sudo vi /etc/ftpusers

   baduser1

   baduser2

   ...


■ FTP 서비스 재시작

모든 설정을 마쳤다면, 서비스 데몬을 재시작해야 설정된 내용이 적용됩니다.

$ sudo service vsftpd restart



[요약]  FTP 서버 구축

① ssh 서버 설치

  $ sudo apt-get install vsftpd

② ssh 서비스 구동

  $ sudo service vsftpd restart

③ vsftpd 추가 설정

  $ sudo vi /etc/vsftpd.conf



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

# 개인 서버 구축 가이드 - 전체 목록

[개인 서버 구축 가이드] ① SSH 서버 (openssh-server)

[개인 서버 구축 가이드] ② FTP 서버 (vsftpd)

[개인 서버 구축 가이드] ③ 파일 공유 서버 (samba-초급)

[개인 서버 구축 가이드] ④ 파일 공유 서버 (samba-중급)

[개인 서버 구축 가이드] ⑤ 파일 공유 서버 (samba-고급)

[개인 서버 구축 가이드] ⑥ 파일 공유 서버 (nfs)

[개인 서버 구축 가이드] ⑦ 파일 공유 서버 (autofs)

[개인 서버 구축 가이드] ⑧ DB 서버 (mariadb)

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