vsftpd - SSL 적용

from Linux 2009/11/25 20:50
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/
사용자 삽입 이미지

접속과 동시에 인증서 확인 메세지가 뜨는데 확인 하고 접속하면 됩니다.
사용자 삽입 이미지
2009/11/25 20:50 2009/11/25 20:50

Trackback Address >> http://www.yongbok.net/blog/trackback/85