1、用 vsftpd+ssl+rsync+ssh 实现一个安全的上传分发型的 FTP 2009-10-29 13:25:32标签:vsftpd ssl rsync ssh 用 ftp上传文件,一直被认为是一种不安全的做法。因为 ftp的密码及内容都是明文传输的。现在则不同了,新出的 vsftpd-2.0.1 released 已经支持 SSL,你可以用 openssl加密你的 vsftp登录及传输过程。这样我们就可以用 vsftpd + SSL实现一个安全的上传型分发用的 FTP了。与 sftp相比,它至少可以让这些上传用户看不到你整个文件系统。(当然,sftp加工一下,也是可以做到的)下面是我的
2、实践过程:系统平台:RH7.3 (虽然老了点,但还是挻稳定的。)1、升级 openssl库QUOTE:ssl_enable If enabled, and vsftpd was compiled against OpenSSL, vsftpd will support secure connections via SSL. This applies to the control connection (including login) and also data connections. Youll need a client with SSL support too. NOTE! Bewar
3、e enabling this option. Only enable it if you need it. vsftpd can make no guarantees about the security of the OpenSSL libraries. By enabling this option, you are declaring that you trust the security of your installed OpenSSL library这是 vsftpd.conf中的一段原话,其中 NOTE!后的一段话建义你升级到最新的 openssl库。所以升级 openssl库
4、还是很有必要的,如果你想把 vsftpd+ssl服务器放在公网上的话。下面是我的升级过程:1)卸载掉老的 opensll库QUOTE:rpm e -nodeps openssl2)下载、解压、编译、安装最新的 openssl到 http:/www.openssl.org/source/ 下载最新的 openssl(我昨天下还是 openssl-0.9.7d.tar.gz 今天已经是 openssl-0.9.7e.tar.gz了,升得好快 :)QUOTE:tar -zxvf openssl-0.9.7d.tar.gzcd openssl-0.9.7d./config -prefix=/usr/l
5、ocal -openssldir=/usr/local/openssl sharedmake make testmake install4)生成 vsftpd用的证书QUOTE:cd /usr/share/ssl/certs/openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem3)编译安装新的 vsftpd,使他使用最新的 openssll库 (这个在下面介绍,不过得先做这步)QUOTE:4)rpm -ivh openssl-0.9.6b-18.i686.rpm 再把老的 openssl库给安装上,不然你会发现连 ss
6、hd也启不来。这样 vsfptd用新的openssl库,sshd 等的软件就用老的 openssl库,互不干扰。我不知是不是兼容性的问题。但我试了 n多次,就是不能使用新的 openssl库,除非你把所有的依赖 openssl的库的软件重新用最新的源码再编一下。那太多了 :( 2、安装支持 opensll的 vsftpd-2.0.11)到 http:/vsftpd.beasts.org/ 下载最新的原码包2)安装支持 openssl的 vsftpdQUOTE:tar zxvf vsftpd-2.0.1.tar.gzcd vsftpd-2.0.1vi builddefs.h把 #undef VS
7、F_BUILD_SSL 改成 #define VSF_BUILD_SSL (#号要保留)。这样编译出来的 vsftpd就支持 openssl了。makemake installcp RedHat/vsftpd.pam /etc/pam.d/ftp (以使本地用户可以通过 vsftpd的 PAM认证功能来登录 vsftpd)3) 编辑/etc/vsftpd.conf 文件:QUOTE:listen=YES# Access rightsanonymous_enable=NOlocal_enable=YESwrite_enable=YESanon_upload_enable=NOanon_mkdir
8、_write_enable=NOanon_other_write_enable=NO# Securityport_enable=NOanon_world_readable_only=YESconnect_from_port_20=YEShide_ids=YEShide_file=.ssh,.kde,.bash*,.vi*,.gt*,.em*pasv_min_port=60000pasv_max_port=60000chroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_listlocal_umask=0000file_open_mod
9、e=0260chmod_enable=NOssl_enable=YESallow_anon_ssl=NOrsa_cert_file= /usr/share/ssl/certs/vsftpd.pem# Featuresxferlog_enable=YESxferlog_std_format=YESxferlog_file=/home/log/vsftpd.log#vsftpd_log_file=/home/log/vsftpd.logls_recurse_enable=NOascii_download_enable=NOasync_abor_enable=YES# Performance#one
10、_process_model=YESidle_session_timeout=120data_connection_timeout=300accept_timeout=60connect_timeout=60#anon_max_rate=30000max_clients=3#max_per_ip=2这是我的 vsftpd.conf文件,是只可本地用户用 ssl上传(注意把可以上传的本地用户加到/etc/vsftpd.chroot_list文件中,这样这些用户登上来都是 chroot的。),而且是只能用PASS模式。相关的俱体配置可以参考官方的 http:/vsftpd.beasts.org/v
11、sftpd_conf.html 。 E 文不好的朋友,可以看一下 CU上的http:/ 这篇文章,也不错 。下面是相关一些 ssl选项的解释:ssl_enable 是否启用 vsftpd的 ssl支持allow_anon_ssl 是否让匿名用户使用 sslrsa_cert_file= /usr/share/ssl/certs/vsftpd.pem vsftpd用的 rsa证书的位置force_local_data_ssl 是否强制使用 openssl加密数据force_local_logins_ssl 是否强制使用 openssl登录ssl_sslv2 是否允许客户端用 SSL v2 prot
12、ocol 连接 (vsftpd 不建议)ssl_sslv3 是否允许客户端用 SSL v3protocol 连接 (vsftpd 不建议)ssl_tlsv1 是否允许客户端用 TLS v1 connections 连接 (首选)ssl_ciphers 用哪种加密方法加密 SSL连接 默认是 DES-CBC3-SHA4)启动 vsftpd Vsftpd &用 cutfpt、flashfxp 等支持 ssl的 ftp客户端软件连一下,选 TLS v1连接方式,一切OK。3、OK,一个支持 SSL的 vsftp服务器就这样搞定了。如果你要把上传的内容分发到其它下载 ftp服务器上,可以用 rsync
13、 +ssh 来实现,前题是各服务器上都安装了 ssh和 rsync。下面是用 rsync+ssh来同步上传内容的方法:1)做 ssh的 rsa无密码认证在主 ftp服务器上以 aaa用户用 ssh-keygen t rsa命令生成 rsa钥对(不加密码),把id_rsa.pub 文件考到其它的 ftp服务器的/home/aaa/.ssh/authorized_keys,这样就可以实现不用密码的 ssh-rsa认证登录,以便把 rsync 加在主 ftp的 crontab中,让它定时自动调用 ssh同步 vsftp的内容。2)用 ssh+rsync实现各 vsftp内容之间的定时自动同步在主 f
14、tp的 aaa目录下写一个 rsync.sh脚本:QUOTE:#!/bin/bash#a ftp rsync scriptrsync -vrgp -size-only -delete -timeout=30 -bwlimit=1500 -e ssh /home/aaa/ftp aaaxxx.xxx.xxx.xxx:/home/aaa/ | perl mail.pl aaa其中:-v 参数为显示较多的同步信息-r 参数为同步子目录下的文件(递归)-gp 考贝时保护文件的组及权限属性-size-only 指只考贝那些同名文件中大小不一样的文件(默认为大小及文件生成时间),也就是同名的大小一样的文件
15、和目录就不考贝了。这对减少不必要考贝很有用。-delete 在同步时删除主 ftp上没有的但在从 ftp上却有的文件或目录(这对删除一些没用的文件十分有用,只要删掉主 ftp上的内容,同步一下,从 ftp上的内容也会被删除掉。-timeout=30 在 30秒内如果建立不起连接就停止。-bwlimit=1500 指最大同步带宽为 1500KB(byte),这样可以不停主 ftp,少影响主 ftp用户的下载。-e ssh 指用 ssh 进得加密同步。最后调用一个 mail.pl脚本,在同步不成功时向 srvadmin发邮件。把它加到 aaa的 crontab 中:1 3 * * * /bin/b
16、ash /home/aaa/rsync.sh每天晚上 3点进行一次同步。5、最后一个就是我还没有能在 vsftpd 上实现的,就是在上传用户较多的情况下,怎样实现对这些用户的建立、控制、管理、权限设制等。不知高手们有何经验,是否可以共享一下:)flashfxp客户使用 TLSv1加密连接 vsftpd时询问是否接受证书find.jpg (127.63 KB) 2004-10-27 19:32在我用 commview抓取的 ftp连接包中查找我输入的 ftp密码,结果没有找到,密码是加密传输的0人了这篇文章类别:FTP技术圈( 0)阅读( 77)评论( 0) 推送到技术圈返回首页上一篇 用 AWStats对 VSFTP日志进行统计 下一篇 关于 vsftpd同时使用系统用户和虚拟用户验证 相关文章 rsync + ssh 完成服务器之间的批量数据同步 Linux下使用 SSH、Crontab、Rsync 三工具实现. SSL工作原理 RHEL5系统配置 vsftpd以及启用加密传输 SSH SSL 网络安全协议之比较(SSH、PKI、SET、SSL)