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

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

[[email protected] ~]# 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/

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

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

[[email protected] ~]# cd vsftpd-2.2.2
[[email protected] ~]# 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를 컴파일을 합니다.

[[email protected] ~]# cd /usr/local/src/vsftpd-2.2.2
[[email protected] ~]# make && make install

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

[[email protected] ~]# 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 설치

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

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

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

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

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

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

[[email protected] ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

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

[[email protected] ~]# 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 []:[email protected]

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

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

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

[[email protected] ~]# mv vsftpd.pem /etc

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

[[email protected] ~]# 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 를 시작 합니다.

[[email protected] ~]# /usr/local/sbin/vsftpd &

[[email protected] ~]# 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/


 

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