SFTP with cURL
cURL을 써서 SFTP 프로토콜로 파일 업로드

    ./curl -T file.txt sftp://user:passwd@192.168.1.101:36651/~/
    ./curl -T file.txt scp://user:passwd@192.168.1.101:36651/home/chanik/

URI 이름짓기 규칙은 http://tools.ietf.org/html/draft-ietf-secsh-scp-sftp-ssh-uri-04 참조.

ftp는 vsftpd의 chroot 기능을 써서 접근 범위를 제한할 수 있지만
scp/sftp를 쓸 때는 달리 방법을 찾아야 한다. 아래 페이지에 좋은 정보가 있다.
 
OpenSSH SFTP chroot() with ChrootDirectory (4.8p1부터 지원)
    http://www.debian-administration.org/articles/590

그런데, CentOS4.7 및 CentOS5.3 의 OpenSSH에는 이 패치가 적용되어 있지 않은 것 같다. -_-;
(CentOS5.3에는 4.3p2, CentOS4.7에는 3.9p1 이 들어있다)
scpjailer같은 다른 방법을 찾아야 할 듯.


--------


FTP over SSL 사용에 대해. ( http://curl.haxx.se/docs/faq.html )

4.15 FTPS doesn't work

curl supports FTPS (sometimes known as FTP-SSL) both implicit and explicit
mode.

When a URL is used that starts with FTPS://, curl assumes implicit SSL on
the control connection and will therefore immediately connect and try to
speak SSL. FTPS:// connections default to port 990.

To use explicit FTPS, you use a FTP:// URL and the --ftp-ssl option (or one
of its related flavours). This is the most common method, and the one
mandated by RFC4217. This kind of connection then of course uses the
standard FTP port 21 by default.


Configuring vsftpd for secure connections (TLS/SSL/SFTP)
    http://wiki.vpslink.com/Configuring_vsftpd_for_secure_connections_(TLS/SSL/SFTP)
Vsftpd SSL / TLS FTP Server Configuration
    http://www.cyberciti.biz/tips/configure-vsfptd-secure-connections-via-ssl-tls.html
computer tips - vsftpd tls setup that works
    http://www.davekb.com/browse_computer_tips:vsftpd_tls_setup_that_works:txt

-days 3650 대신 -lifetime 3650 라고 해도 된다고 함.

# openssl req -x509 -nodes -days 3650 -newkey rsa:1024 \
-keyout /etc/vsftpd/vsftpd.pem \
-out /etc/vsftpd/vsftpd.pem
# chmod 600 /etc/vsftpd/vsftpd.pem

# cat <<EOF >> /etc/vsftpd/vsftpd.conf
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
#rsa_private_key_file=/etc/vsftpd/vsftpd.pem
#ftp_data_port=20
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40010
EOF

# iptables -A block -m state --state NEW -p TCP --dport 40000:40010 -j ACCEPT

vsftpd가 ssl을 쓰도록 빌드되어 있는지 확인

# ldd /usr/sbin/vsftpd | grep libssl
        libssl.so.6 => /lib/libssl.so.6 (0x00a8a000)

막상 설정하고 FileZilla를 이용하여 FTP over TLS (명시적 암호화) 방식으로 접근해보면
인증서 확인 및 세션이 맺어지는 척 하면서 데이터를 가져오지는 못하는 일이 벌어진다.

아래와 같이 curl을 이용해도 접속이 안 된다. ( --ftp-ssl 옵션도 마찬가지 )
    ./curl ftp://user:passwd@222.122.66.151:21/.bashrc --ftp-ssl-control --insecure --ftp-pasv

vsftpd로 FTPS (FTP over SSL/TLS) 구현하기 를 보면
vsftpd 구버전에는 SSL 이용에 버그가 있으며 vsftpd-2.0.7 부터 문제가 해결되었다고 한다.
CentOS5.3에 쓰이는 것은 vsftpd-2.0.5였다. 젠장. (CentOS4.7에 쓰는 것은 2.0.1이지만 이미 패치되어서 잘 된다)
위 글에는 vsftpd 소스를 가져다 다시 빌드하는 방법도 나온다. 한글문제 패치 얘기도 나오고..
( 버그 내역은 http://bugs.centos.org/view.php?id=3311 에 있는데 임시 해결책도 나온다 )

http://www.centos.org/modules/newbb/viewtopic.php?topic_id=20730&forum=37 을 보면
Fedora10의 vsftpd SRPM을 가져다 문제를 해결하는 방법도 나온다.

Found a related Fedora bug:
https://bugzilla.redhat.com/show_bug.cgi?id=462317

Someone reported success rebuilding the Fedora 10 vsftpd
http://forum.filezilla-project.org/viewtopic.php?f=2&t=9042&p=33703&hilit=vsftpd#p33703

See http://wiki.centos.org/HowTos/RebuildSRPM if you want to have a go at that.


Ah...
Just for future reference for fellow CentOS 5 (Yep - i upgraded - but this should work on CentOS 4 as well) users:

Download the vsftpd-package that comes with fedora 10, ie:
Code:
# wget ftp://fr.rpmfind.net/linux/fedora/development/source/SRPMS/vsftpd-2.0.7-1.fc10.src.rpm
# rpmbuild --rebuild vsftpd-2.0.7-1.fc10.src.rpm

Install all missing packages, but tcp_wrappes-devel does not exist - its included in the tcp_wrappers package.
When only tcp_wrappers-devel is missing:
Code:
# rpmbuild --nodeps --rebuild vsftpd-2.0.7-1.fc10.src.rpm

If all goes well:
Code:
# rpm -Uvh /usr/src/redhat/RPMS/i386/vsftpd-2.0.7-1.i386.rpm


/Fredrik


아래 파일들을 이용하면 될 것이다.

ftp://ftp.sayclub.com/pub/fedora/releases/10/Fedora/source/SRPMS/vsftpd-2.0.7-1.fc10.src.rpm (잘됨)
ftp://ftp.sayclub.com/pub/fedora/releases/11/Fedora/source/SRPMS/vsftpd-2.1.0-2.fc11.src.rpm (빌드오류발생)


---------


FTP and SSL/TLS (in ProFTPD mini-HOWTO)
    http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-TLS.html

proftpd + mod_tsl + cygwin under win2003proftpd + mod_tsl + cygwin under win2003
    http://cygwin.com/ml/cygwin/2006-02/msg00795.html

Cygwin에 포함된 proftpd는 mod_tls 모듈이 포함되지 않은 상태로 빌드되어 있으므로
setup.exe에서 소스를 받아서 다시 빌드해야 하는 모양이다.

$ proftpd -l
Compiled-in modules:
  mod_core.c
  mod_xfer.c
  mod_auth_unix.c
  mod_auth_file.c
  mod_auth.c
  mod_ls.c
  mod_log.c
  mod_site.c


setup.exe를 실행하여 proftpd 소스를 설치하고, 다시 실행하여 proftpd 패키지를 제거하자.
이제 소스로부터 다시 빌드.

$ cd /usr/src/proftpd-1.2.10-1
$ cp CYGWIN-PATCHES/build.sh CYGWIN-PATCHES/build_new.sh
$ vi CYGWIN-PATCHES/build.sh
--with-modules=mod_tls
$ vi contrib/mod_tls.c
#define PEM_F_DEF_CALLBACK PEM_F_PEM_DEF_CALLBACK
$ make install
$ proftpd -l
Compiled-in modules:
  mod_core.c
  mod_xfer.c
  mod_auth_unix.c
  mod_auth_file.c
  mod_auth.c
  mod_ls.c
  mod_log.c
  mod_site.c
  mod_tls.c


이제부터 설정 및 구동.. ( CYGWIN-PATCHES/README 참조 )

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
DefaultRoot ~

<IfModule mod_tls.c>
    TLSEngine on
    TLSLog /var/proftpd/tls.log
    TLSProtocol TLSv1

     # Are clients required to use FTP over TLS when talking to this server?
    TLSRequired off

    # Server's certificate
    TLSRSACertificateFile /etc/proftpd.pem
    TLSRSACertificateKeyFile /etc/proftpd.pem

    # CA the server trusts
    TLSCACertificateFile /etc/proftpd.pem

    # Authenticate clients that want to use FTP over TLS?
    TLSVerifyClient off

    # Allow SSL/TLS renegotiations when the client requests them, but
    # do not force the renegotations.  Some clients do not support
    # SSL/TLS renegotiations; when mod_tls forces a renegotiation, these
    # clients will close the data connection, or there will be a timeout
    # on an idle data connection.
    TLSRenegotiate required off
</IfModule>


$ cygrunsrv --install proftpd --path /usr/sbin/proftpd --args --nodaemon --termsig TERM --shutdown
$ net start proftpd


이렇게 하면 WIndows 사용자/암호를 이용한 접근(chroot된 상태)은 가능한데
정식 사용자 말고 ftp만을 위한 가상 사용자를 어떻게 만드는지는 아직 알아보지 못함.


---------


Using FTP Over SSL (IIS7 in Windows Server 2008)
    http://learn.iis.net/page.aspx/304/using-ftp-over-ssl/


---------


Curl에 대해서
    http://joinc.co.kr/modules/moniwiki/wiki.php/Site/Web/documents/UsedCurl

샘플 코드들이 몇 개 나온다.


Compare cURL Features with Other Download Tools
    http://curl.haxx.se/docs/comparison-table.html

cURL과 그 경쟁자(?)들을 비교한 표


cURL Dependencies
    http://curl.haxx.se/docs/libs.html

SFTP를 쓰려면 OpenSSL 및 libssh2와 링크해야 하는 모양이다.
libssh2는 OpenSSL 혹은 libgcrypt에 의존한다.

결국 SFTP를 쓰려면 OpenSSL, libssh2와 링크해야 한다.
cURL, OpenSSL, libssh2, zlib을 가져다 빌드해야 하는 셈이고
C++ 바인딩인 cURLpp를 쓰려면 cURLpp까지 가져다 빌드해야 한다.

꽤 번거로운 작업이다.
그래서, 미리 빌드된 바이너리들을 찾아봤다.

[1] 바이너리 1

아래 URL에서 libcurl-7.19.3-win32-ssl-msvc.zip을 받을 수 있다.
http://curl.haxx.se/dlwiz/?type=*&os=Win32&flav=MSVC
( http://curl.haxx.se/metalink.cgi?curl=win32-ssl-devel-msvc )
이 놈은 libcurl, OpenSSL이 모두 MSVC2008로 빌드되어 있어서 MSVCR90.dll에 의존한다.
나는 VC2003을 쓰고 있으므로, 위 파일을 써서 빌드하면 배포할 때 VC2008_redist
설치프로그램까지 배포해야 하는 귀찮음이 있다.

[2] 바이너리 2

cURLpp의 다운로드 페이지에서 cURLpp 및 cURL 바이너리들을 받을 수 있는데,
이 또한 MSVC2008로 빌드된 놈이라서 MSVCR90.dll에 의존한다.
여기에는 OpenSSL dll 및 zlib1.dll은 들어 있지 않다.

OpenSSL dll은 http://www.shininglightpro.com/products/Win32OpenSSL.html 에서 받을 수 있다.
최신버전인 0.9.8k는 MSVC2008로 빌드되어 있어 MSVCR90.dll에 의존하고 있고
구버전인 0.9.7m은 MSVC6로 빌드되어 있어 의존성 문제가 없었다.

OpenSSL 0.9.8g dll은 http://curl.haxx.se/download.html#openssl 에서
mingw용 및 msvc6용을 받을 수도 있다.

[3] 바이너리 3

http://curl.haxx.se/download.html에서 
Günter Knauf가 빌드한 curl-7.19.5-devel-mingw32.zip을 받아보니 필요한 것은 다 들어 있었다.
이 바이너리를 쓰기로 했다.


---------


cURL 최신버전인 7.9.15 소스를 받아서 빌드해 보려고 조금 알아보았다.
Günter Knauf의 빌드에 만족했으므로 끝까지 해보지는 않았다.

압축파일을 풀고 curl-7.19.5 디렉토리를 살펴보면 vc6curl.dsw 파일이 있다.
제대로 된 프로젝트라면 msvc6/7/7.1/8/9 모두 빌드가 가능해지는 셈이다.
반갑게 열어서 빌드해보니 기본빌드는 가능했지만, OpenSSL을 쓰도록 빌드할 수는 없었다.
docs/INSTALL 파일을 보니 이 프로젝트 파일로는 기본빌드만 가능하다고 한다.
더 갖춰진 상태로 빌드하려면 아래와 같이 메이크파일들을 써야 한다.

     set ZLIB_PATH=c:\zlib-1.2.3
     set OPENSSL_PATH=c:\openssl-0.9.8g
     nmake vc-ssl-zlib

nmake를 통해 MSVC를 써서 빌드하는 대신, mingw32를 이용해서 아래와 같이 할 수도 있다.

     set ZLIB_PATH=c:\zlib-1.2.3
     set OPENSSL_PATH=c:\openssl-0.9.8g
     set LIBSSH2_PATH=c:\libssh2-0.17
     mingw32-make mingw32-ssh2-ssl-sspi-zlib

by 시험さま | 2009/06/29 22:25 | 컴퓨터 | 트랙백(2) | 덧글(0)
트랙백 주소 : http://chanik.egloos.com/tb/1923029
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 디지문닷넷 at 2009/08/18 21:06

제목 : vsftpd로 FTPS (FTP over SSL/T..
작성자: 주인장 디지문(http://www.digimoon.net/)파일 송수신 프로토콜로 FTP가 널리 사용되고 있습니다.그러나 이 FTP는 사실 보안에 매우 취약합니다. 별다른 보안 대책을 세우지 않고 vsftpd나 proftpd로 FTP 서버를 구축하면 FTP 계정으로 로그인 시 ID와 패스워드는 평문으로 고스란히 전송되기 때문이죠. 악의적인 목적을 가진 이가 패킷 스니핑을 시도하여 성공하면 당신의 ID와 패스워드는 토씨 하나 틀리지 않고......more

Tracked from 디지문닷넷 at 2009/11/05 22:45

제목 : OpenSSH chroot 설정
작성자: 주인장 디지문(http://www.digimoon.net/) 무료 웹호스팅을 하면서 늘 아쉬웠던 점이 일반사용자들에게 SSH/SFTP를 개방하기 힘들다는 점이었습니다.SSH/SFTP를 통해 일반사용자 권한으로 쉘에 들어오면 '/' 디렉토리 하단으로 디렉토리 이동이 자유롭기에 서버관리자만이 드나들며 관리해야 할 영역이 너무 쉽게 노출이 된다는 점 때문이죠. vsftpd, proftpd 등과 같이 ftp 서버 데몬의 경우는 환경설정파일에 ......more

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >