[리눅스 서버] FTP 서버 구축 (vsftpd)

FTP(File Transfer Protocol) 프로토콜은 컴퓨터간에 파일을 다운로드 하기위한 TCP 프로토콜이다.
리눅스에서는 proftpd와 vsftpd를 많이 사용한다.

proftpd의 경우 속도나 보안에 대한 이슈들이 좀 있었고, vsftpd도 2.x대 버전에서는 chroot 관련 버그가 있었다. 각각의 장단점이 있겠지만, 여기서는 그래도 좀더 보안을 강화할 수 있는 vsftpd(Very Secured FTP)를 다룬다.

vsftpd_logo
1. vsftpd – FTP 설치

 

2. FTP 기본 설정

 

3. FTP 보안

1) chroot 기능 사용 사용자 홈디렉토리 제한

모든 사용자의 홈디렉토리를 제한하기 위해서는 /etc/vsftpd.conf에서 “chroot_local_user=YES”의 주석을 제거하여 단독으로 사용하면 된다.

* 우분투에서 “chroot_local_user=YES”로 변경하고 “500 OOPS: vsftpd: refusing to run with writable root inside chroot()” 에러가 발생하는 경우가 있다 이럴 경우에는 /etc/vsftpd.conf의 맨 뒤에 “allow_writeable_chroot=YES” 를 추가하여 저장한다.


2) 특정 사용자만 chroot 기능을 사용하도록 하거나, 반대로 특정사용자를 제외한 모든 사용자들이 chroot 기능을 사용하도록 할 수 도 있다.

위 두 설정의 차이점을 살펴보면, 위에 것은 chroot_list_file에 등록된 사용자만 chroot 기능을 사용하도록 제한하는 것이고,
아래에 ‘allow_writeable_chroot=YES’가 추가되면 반대로 chroot_list_file에 등록된 사용자를 제외한 모든 사용자들은 choot 기능을 사용하도록 제한하는 것이다.

3) 특정사용자의 엑세스 제한

/etc/ftpusers 파일은 FTP 액세스가 허용되지 않는 사용자 목록이다. 기본 목록에는 root, daemon, nobody 등의 시스템계정들이 포함되어 있다.
특정 사용자의 엑세스를 제한하기 위해서는 목록에 아이디를 추가하면 된다.

4) /etc/vsftpd.conf 파일의 끝에 추가하여 FTP 포트를 지정(수정)할 수 있다.

5) 접속제한

6) 최대 전송속도 제한

이와 같이 설정하면 최대 전송속도를 2MB/s로 제한할 수 있다.
7) SSL/TLS 암호화 적용

FTP는 원래 평문을 전송하는 프로토콜이기 때문에 보안상의 문제가 있다. 하지만, FTPS를 사용하여 암호화 할 수도 있다. SFTP와 달리 FTPS는 SSL (Secure Socket Layer)을 통한 FTP이다.
SFTP는 암호화 된 SSH 연결을 통한 FTP와 같은 세션이다. 가장 큰 차이점은 SFTP 사용자는 nologin 쉘 대신 시스템에 쉘 계정이 있어야한다는 것이다.

SSL/TLS 인증서와 개인키를 만들어 사용하면 된다. 여기서는 Postfix 가이드에서 사용했던 LetsEncrypt 무료 SSL 인증서를 이용해서 사용해보자.

FTPS를 구성하려면 /etc/vsftpd.conf에서 “ssl_enable=NO”를 “ssl_enable=Yes”로 변경해주면 된다.

ufw 로 방화벽을 구성하였다면, ftp 접속을 위한 포트를 열어주고, 패시브 모드 접속이 가능하도록 지정한 포트들도 열어주자.

끝으로, 설치 후 한글이 깨어진다면 /etc/vsftpd.conf 설정 끝부분에 있는 “utf8_filesystem=YES” 부분의 주석을 없애주면 된다.

vsftpd 설정과 관련하여 더 자세한 옵션을 확인하려면 아래의 vsftpd.conf man page를 참조하면 된다.
여기까지 설정한 후 vsftpd 데몬을 리스타트 한다.

 

 

 

[참고자료]
1. 우분투 서버 가이드>>파일서버>>FTP 서버
2. vsftpd.conf man page
3. http://webdir.tistory.com/199
4. http://askubuntu.com/questions/239239/500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot-keep-user-j


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다