FTP 서버의 데몬인 vsftpd 에 SSL(Secure Socket Layer)을 적용 시키는 방법입니다.
본 글은 소스 설치 기준으로 진행 하였습니다.

vsftpd 가 SSL 을 지원 하는지 확인을 해봅니다.

[root@yongbok ~]# ldd /usr/local/sbin/vsftpd
/usr/local/sbin/vsftpd:
libpam.so.4 => /usr/lib/libpam.so.4 (0x28093000)
libutil.so.7 => /lib/libutil.so.7 (0x2809a000)
libc.so.7 => /lib/libc.so.7 (0x280a8000)

헐.. 이런 지원을 안하는군요.. 그럼 소스 파일을 받아다가 SSL을 지원 하도록 컴파일 해줘야 합니다.

vsftpd 를 아래 주소에서 최신 버전으로 받아옵니다.

ftp://vsftpd.beasts.org/users/cevans/

[root@yongbok ~]# cd /usr/local/src
[root@yongbok ~]# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.2.2.tar.gz
[root@yongbok ~]# tar xzvf  vsftpd-2.2.2.tar.gz

vsftpd 소스 디렉토리에 있는 builddefs.h 헤더 파일의 코드 내용중 SSL 부분앞에 #undef 를 #define 으로 수정합니다.

[root@yongbok ~]# cd vsftpd-2.2.2
[root@yongbok ~]# vi builddefs.h

변경 전

#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H

#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */

변경 후

#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H

#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */

vsftpd를 컴파일을 합니다.

[root@yongbok ~]# cd /usr/local/src/vsftpd-2.2.2
[root@yongbok ~]# make && make install

SSL을 지원하는지 다시 확인 해봅니다.

[root@yongbok ~]# ldd /usr/local/sbin/vsftpd
/usr/local/sbin/vsftpd:
libpam.so.4 => /usr/lib/libpam.so.4 (0x28095000)
libutil.so.7 => /lib/libutil.so.7 (0x2809c000)
libssl.so.5 => /usr/lib/libssl.so.5 (0x280aa000)
libcrypto.so.5 => /lib/libcrypto.so.5 (0x280eb000)
libc.so.7 => /lib/libc.so.7 (0x28244000)

이제 인증서를 만들기 위해서 OpenSSL 를 설치 해줘야 합니다.
데이터 압축을 지원하기 위한 zlib 를 설치 해줍니다.

– zlib 설치

[root@yongbok ~]# cd /usr/local/src
[root@yongbok ~]# wget http://www.zlib.net/zlib-1.2.3.tar.gz
[root@yongbok ~]# tar xzvf zlib-1.2.3.tar.gz
[root@yongbok ~]# cd zlib-1.2.3
[root@yongbok ~]# ./configure
[root@yongbok ~]# make && make install

– OpenSSL 설치
OpenSSL 은 아래 사이트에서 빨간색 부분에 LATEST 를 받아줍니다.

http://www.openssl.org/source/

[root@yongbok ~]# cd /usr/local/src
[root@yongbok ~]# wget http://www.openssl.org/source/openssl-0.9.8l.tar.gz
[root@yongbok ~]# tar xzvf openssl-0.9.8l.tar.gz
[root@yongbok ~]# cd openssl-0.9.8l

[root@yongbok ~]# LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include
[root@yongbok ~]# ./config –prefix=/usr/local –openssldir=/usr/local/openssl zlib
[root@yongbok ~]# make && make install

openssl 을 심볼릭 링크를 걸어 줍니다.

[root@yongbok ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

10 년 짜리 사설 인증서를 생성합니다.

[root@yongbok ~]# openssl \
req -x509 -nodes -days 3650 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem

Generating a 1024 bit RSA private key
…………….++++++
……………………++++++
writing new private key to ‘vsftpd.pem’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [AU]:KR
State or Province Name (full name) [Some-State]:Seoul
Locality Name (eg, city) []:Gangseo-gu
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Yongbok
Organizational Unit Name (eg, section) []:CEO
Common Name (eg, YOUR name) []:yongbok.net
Email Address []:ruo91@yongbok.net

생성된 vsftpd.pem 인증서를 root 만 읽기/쓰기 가능 하도록 권한을 변경 해줍니다.

[root@yongbok ~]# chmod 600 vsftpd.pem
[root@yongbok ~]# ls -l vsftpd.pem
-rw——-  1 root  wheel  2176 11 25 10:44 vsftpd.pem

vsftpd.pem 파일을 적당한 곳에 이동 시킵니다.

[root@yongbok ~]# mv vsftpd.pem /etc

vsftpd.conf 환경 설정 파일에 SSL 을 사용하도록 아래 처럼 추가 해줍니다.

[root@yongbok ~]# vi /etc/vsftpd.conf

listen_port=21
ftp_data_port=20
ssl_enable=YES
rsa_cert_file=/etc/vsftpd.pem
force_local_logins_ssl=YES
force_local_data_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
allow_anon_ssl=NO

이후 vsftpd 를 시작 합니다.

[root@yongbok ~]# /usr/local/sbin/vsftpd &

[root@yongbok ~]# ps -aux | grep vsftpd
ftp    88036  0.0  0.3  4880  2508  ??  I    11:10AM   0:00.02 /usr/local/sbin/vsftpd

FTP 클라이언트인 파일질라를 아래 사이트에서 받은 후 설치하고 아래처럼 셋팅 해줍니다.
(알 FTP 클라이언트는 SFTP 는 지원하는데 FTPS 를 지원 하지 못하기에..)

http://filezilla-project.org/


 

접속과 동시에 인증서 확인 메세지가 뜨는데 확인 하고 접속하면 됩니다.