vsftp +ssl Ubuntu 安装方案
最近有需求需要部署一个ftp,由于曾经部署过一些ftp本来没想太麻烦,结果还是用了将近一天的时间。不过这一天的时间也没有白费。首先在ftp选型来说sftp肯定优先(sftp不知道得补补知识了)不过曾经用的一个ssh.com这个公司好像商业化了,因此过去的sftp部署方案完全就不能用了。因此发现了proftpd不过这个用起来有点复杂,需要编译不说1.33a版本以后才带sftp功能,并且配置文件看起来挺复杂(语言风格有点像apache都是模块化)而且没有启动脚本,于是还是放弃了sftp的念头转向ftp+ssl(之后告诉你们为什么用ssl)
废话不多说了软件上还是使用vsftp
编译的方法网上比较好的参考文档是CU大牛写的:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=561183
自己去膜拜吧,写的很全
我想简单使用本地账户登录就可以,因为我ftp账户不多,使用数据库验证的可以就此忽略
我只是偷懒选择使用了ubuntu的apt-get install vsftp本来想省事,最后反而变成了费事,我就把我的经历写出来给大家提个醒
ubuntu安装完以后会自己建立好ftp的账户名,并且配置文件都给装的得得的。启动好就发现ftp账户无法登陆,开始修改配置文件
改了半天发现依然不可以使用。查看了CU大牛的文章,写的很好,也帮我明白了这个pam的工作方式。也修改过/etc/vsftpd.conf的pam_service_name=vsftpd,变成pam_service_name=/etc/pam.d/vsftpd事实证明在UBUNTU底下这个无所谓。
CU大牛写的这个very securty ftp不能编译pam模块,不过显然ubuntu版本的已经编译进去了,怎么办呢?
查看了一下?/etc/pam.d/vsftpd
# Standard behaviour for ftpd(8). auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so. # Standard pam includes @include common-account @include common-session @include common-auth auth required pam_shells.so
由于对于pam不是很熟,但是这个小脚本还可以,明显说明他是通过系统验证了的,并且进行了/etc/ftpusers中账户的排除验证
简言之就是ftpusers这个文件中的用户名密码不允许登录。
好了确定这个问题了,为什么还不能登录呢?
答案就在这里vsftp不允许本地账户登录,是因为
ftp:x:106:65534::/opt/sftp:/bin/false
其制定了ftp的shell环境是/bin/false这个害人不浅啊,你改成/bin/sh试试,立马就可以登录了。
别看网上那些枪文说什么不想让人登录shell使用/bin/nologin和/bin/false这个你啥系统都登录不上。这个应该跟pam的验证机制有关
这部分费了我不少时间,因为没想到ubuntu默认会这么设计。
之后还有一些安全细节问题 账户锁定在主目录,系统root等账户不允许登录,限制主机访问
配置安全风险提示:本人这样的配置,只适合于不用开放ssh(22)端口的ftp用户使用。因为该账户实际是可以通过ssh登录服务器的,如果配置使用在防火墙后面才会比较安全一点,或者可以考虑使用纯虚拟账户模式。看大家的具体环境自己斟酌
锁定主目录(如果不锁定主目录,登录的账户可以通过“返回上一级文件夹”从而访问系统的“/”目录,这样会让ftp用户能获取系统关键信息)
在配置vsftp.conf中增加
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
有些文章写如果你要允许哪个人就把账户名称加入vsftpd.chroot_list中(每个用户名一行,与ftpusers相似),这种说法完全是错误的。这个列表的作用是排除文件,就是说此文件中的用户是不收锁定主目录限制的,因此如果你想锁定所有用户不允许访问其主目录以外的文件,这个列表应该是空的
系统root等账户不允许登录
其实有两种方式,本身vsftp就支持允许登录的账户和拒绝的账户,通过配置(文件后面的注释说明不要复制到你的配置里面因为vsftpd.conf的文件不支持任何注释符号,除了行首的#并且配置中间不要插入任何空格)
userlist_enable=yes
userlist_deny=yes //当userlist_deny=no时,只有userlist_file文件中的账号才可以登录,当userlist_deny=yes时,userlist_file文件中的账户会被禁止登录
userlist_file=/etc/ftpusers
当然这里我选择使用的是userlist_deny是yes因为ubuntu安装时候禁止登录的ftpusers已经被设定好了。因此我就小利用了一下。
大家可以根据自己的需求修改。
另外一种方法其实就是什么都不用设置,(靠说了半天废话)因为刚才讲过了pam.d里面的vsftpd文件已经对pam验证的进行了一次过滤,ftpuseres文件中的用户都无法验证通过的。
不过这两种方法的区别就是
使用vsftp的userlist效果是直接拒绝账户效果如下:
ftp 127.0.0.1 Connected to 127.0.0.1. 220 (vsFTPd 2.2.2) Name (127.0.0.1:root): root 530 Permission denied. Login failed. ftp>
如果使用默认pam拒绝用户登录的效果如下:
ftp 127.0.0.1 Connected to 127.0.0.1. 220 (vsFTPd 2.2.2) Name (127.0.0.1:root): root 331 Please specify the password. Password: 530 Login incorrect. Login failed.
这回知道区别了吧? (行了不多废话了)
限制主机访问
这个简单说说其实我也不用,在vsftpd.conf配置文件中加入:
tcp_wrappers=YES
这样你就可以使用host.allow和host.deny来限制主机访问了。
SSL配置这部分是个重点
vsftp配置通了心情舒畅不少吧?但是其实这个只是个开始,登录过程中用tcpdump查看的结果如下:你们应该会惊讶:
12:15:58.201070 IP 127.0.0.1.3497 > 127.0.0.1.21: Flags [P.], seq 0:10, ack 21, 0x0000: 4510 0032 fedd 4000 4006 3dd6 7f00 0001 E..2..@.@.=..... 0x0010: 7f00 0001 0da9 0015 a973 d359 a93a fe0e .........s.Y.:.. 0x0020: 5018 0101 fe26 0000 5553 4552 2066 7470 P....&..USER.ftp 0x0030: 0d0a .. 12:15:58.201219 IP 127.0.0.1.3497 > 127.0.0.1.21: Flags [.], ack 55, win 257, le 0x0000: 4510 0028 fede 4000 4006 3ddf 7f00 0001 E..(..@.@.=..... 0x0010: 7f00 0001 0da9 0015 a973 d363 a93a fe30 .........s.c.:.0 0x0020: 5010 0101 7ed0 0000 P...~... 12:16:09.101087 IP 127.0.0.1.3497 > 127.0.0.1.21: Flags [P.], seq 10:37, ack 55, 0x0000: 4510 0043 fedf 4000 4006 3dc3 7f00 0001 E..C..@.@.=..... 0x0010: 7f00 0001 0da9 0015 a973 d363 a93a fe30 .........s.c.:.0 0x0020: 5018 0101 fe37 0000 5041 5353 2058 6447 P....7..PASS.XDG 0x0030: 6374 3856 6169 544a 416b 3155 6e58 576b ct8aaiTaAk1UnXWk 0x0040: 420d 0a B..
你是不是明白了什么事情? 我靠,别看那个PASS后面那乱七八糟的,那可是明文传输,大家别学CSDN啊。要不可没有后悔药吃。
首先必须要制作证书喽
openssl req -new -x509 -nodes -out /etc/vsftpd.pem -keyout /etc/vsftpd.pem
通过这条命令来生成证书
然后给vsftpd.conf增加配置:
#SSL ENCRYPT ssl_enable=YES//打开ssl功能 force_local_data_ssl=YES//强制进行本地用户数据传输加密 force_local_logins_ssl=YES//强制进行本地用户登录加密 debug_ssl=yes//打开ssldebug功能(可选) force_anon_logins_ssl=YES//强制进行任意用户登录加密 force_anon_data_ssl=YES//强制进行任意用户数据传输加密 ssl_sslv2=no//据说sslv2版本不安全因此禁用 ssl_sslv3=yes//sslv3版本开启 ssl_tlsv1=yes//tlsv1版本开启 require_ssl_reuse=NO//所有ssl连接会显示为会话复用,但是这可能导致部分ftp客户端报错,如果为yes,cuteftp连接的时候会报错,522 SSL connection failed; session reuse required: see require_ssl_reuse option in vsftpd.conf man page # # This option specifies the location of the RSA certificate to use for SSL # encrypted connections. rsa_cert_file=/etc/vsftpd.pem//加密证书位置
这部分有一些解释,为什么一定要写force_anon_logins_ssl经过测试,即使写了force_local_logins_ssl也并不是强制所有用户ssl登录,因为在shell的ftp终端上首先判定第一用户是anonymous,因此如果你使用local用户登录还是可以明文通过验证的
好了现在再看一下tcpdump结果呢?(反正我是看不懂了,亲您放心了么?)
15:24:52.241983 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [S], seq 2963992700, win 8192, options [mss 1356,nop,wscale 2,nop,nop,sackOK], length 0 0x0000: 4500 0034 5883 4000 7e06 4ebf ac10 3a32 E..4X.@.~.N...:2 0x0010: 0a07 6538 d50b 0015 b0aa f07c 0000 0000 ..e8.......|.... 0x0020: 8002 2000 83b4 0000 0204 054c 0103 0302 ...........L.... 0x0030: 0101 0402 .... 15:24:52.243101 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [.], ack 202415174, win 16611, length 0 0x0000: 4500 0028 5884 4000 7e06 4eca ac10 3a32 E..(X.@.~.N...:2 0x0010: 0a07 6538 d50b 0015 b0aa f07d 0c10 9c46 ..e8.......}...F 0x0020: 5010 40e3 facf 0000 0000 0000 0000 P.@........... 15:24:52.247471 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [P.], seq 0:10, ack 21, win 16606, length 10 0x0000: 4500 0032 5885 4000 7e06 4ebf ac10 3a32 E..2X.@.~.N...:2 0x0010: 0a07 6538 d50b 0015 b0aa f07d 0c10 9c5a ..e8.......}...Z 0x0020: 5018 40de e467 0000 4155 5448 2053 534c P.@..g..AUTH.SSL 0x0030: 0d0a .. 15:24:52.263336 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [P.], seq 10:134, ack 52, win 16598, length 124 0x0000: 4500 00a4 5886 4000 7e06 4e4c ac10 3a32 E...X.@.~.NL..:2 0x0010: 0a07 6538 d50b 0015 b0aa f087 0c10 9c79 ..e8...........y 0x0020: 5018 40d6 06a2 0000 807a 0103 0100 5100 P.@......z....Q. 0x0030: 0000 2000 0039 0000 3800 0035 0000 1600 .....9..8..5.... 0x0040: 0013 0000 0a07 00c0 0000 3300 ..........3. 15:24:52.265578 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [.], ack 1443, win 16611, length 0 0x0000: 4500 0028 5887 4000 7e06 4ec7 ac10 3a32 E..(X.@.~.N...:2 0x0010: 0a07 6538 d50b 0015 b0aa f103 0c10 a1e8 ..e8............ 0x0020: 5010 40e3 f4a7 0000 0000 0000 0000 P.@........... 15:24:52.272112 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [P.], seq 134:464, ack 1443, win 16611, length 330 0x0000: 4500 0172 5888 4000 7e06 4d7c ac10 3a32 E..rX.@.~.M|..:2 0x0010: 0a07 6538 d50b 0015 b0aa f103 0c10 a1e8 ..e8............ 0x0020: 5018 40e3 6ff6 0000 1603 0100 070b 0000 P.@.o........... 0x0030: 0300 0000 1603 0101 0610 0001 0201 0095 ................ 0x0040: 07c8 680f 12b2 6289 1ba2 802b ..h...b....+ 15:24:52.365148 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [P.], seq 464:530, ack 1494, win 16598, length 66 0x0000: 4500 006a 588a 4000 7e06 4e82 ac10 3a32 E..jX.@.~.N...:2 0x0010: 0a07 6538 d50b 0015 b0aa f24d 0c10 a21b ..e8.......M.... 0x0020: 5018 40d6 4bcb 0000 1703 0100 184d b556 P.@.K........M.V 0x0030: d453 d707 6818 6d30 cefe 1f11 a675 a9a5 .S..h.m0.....u.. 0x0040: 5254 f536 6617 0301 0020 3f20 RT.6f.....?. 15:24:52.366770 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [P.], seq 530:596, ack 1547, win 16585, length 66 0x0000: 4500 006a 588b 4000 7e06 4e81 ac10 3a32 E..jX.@.~.N...:2 0x0010: 0a07 6538 d50b 0015 b0aa f28f 0c10 a250 ..e8...........P 0x0020: 5018 40c9 ce2a 0000 1703 0100 1856 78b4 P.@..*.......Vx. 0x0030: 2bdf 6b6c 1f71 551a 81a5 b835 916d 683b +.kl.qU....5.mh; 0x0040: 4af8 bc4a e617 0301 0020 83d3 J..J........ 15:24:52.368638 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [P.], seq 596:678, ack 1608, win 16569, length 82 0x0000: 4500 007a 588c 4000 7e06 4e70 ac10 3a32 E..zX.@.~.Np..:2 0x0010: 0a07 6538 d50b 0015 b0aa f2d1 0c10 a28d ..e8............ 0x0020: 5018 40b9 92ac 0000 1703 0100 18cd c499 P.@............. 0x0030: 6b82 d75a 2bad 47ff 1dcc a687 5c46 376a k..Z+.G.....\F7j 0x0040: 8e21 2df2 2517 0301 0030 123e .!-.%....0.> 15:24:52.396507 IP 172.16.58.50.54539 > 10.7.101.56.21: Flags [P.], seq 678:744, ack 1661, win 16556, length 66 0x0000: 4500 006a 588e 4000 7e06 4e7e ac10 3a32 E..jX.@.~.N~..:2 0x0010: 0a07 6538 d50b 0015 b0aa f323 0c10 a2c2 ..e8.......#.... 0x0020: 5018 40ac 5f5c 0000 1703 0100 18ab cf1c P.@._\.......... 0x0030: f126 ead8 0e42 19c7 b178 8421 c801 1494 .&...B...x.!.... 0x0040: adfd ed83 2717 0301 0020 d0aa ....'.......
我喜欢,顶一个!
呵呵感谢支持