关于ubuntu 16.04搭建ftp(sftp,ftp主动,被动)

搞了下FTP服务器,基本上能遇到的问题都遇到了。
此文章参考了部分网上另外的作者的,希望别介意哈。

先说步骤:
1.安装vsftpd软件包

sudo apt-get install vsftpd

如果已安装的可以先卸载

sudo apt-get remove --purge vsftpd

(–purge 选项表示彻底删除改软件和相关文件)

2.打开配置文件

vim /etc/vsftpd.conf

3.修改参数
一些参数可以去掉注释**,为了方便,你也可以注释全部,然后添加下面的设置

#这些设置系统默认是开启的,可以不管
listen=NO
listen_ipv6=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES

#下面的就要自定义设置了,建议系统默认的不管,然后复制下面的

#是否允许匿名访问,NO为不允许
anonymous_enable=NO
#是否允许本地用户访问,就是linux本机中存在的用户,YES允许
local_enable=YES
#是否开启写模式,YES为开启
write_enable=YES
#新建文件权限,一般设置为022,那么新建后的文件的权限就是777-022=755
local_umask=022

#是否启动userlist为通过模式,YES的话只有存在于userlist文件中的用户才能登录ftp(可以理解为userlist是一个白名单),NO的话,白名单失效,和下面一个参数配合使用
userlist_enable=YES
#是否启动userlist为禁止模式,YES表示在userlist中的用户禁止登录ftp(黑名单),NO表示黑名单失效,我们已经让userlist作为一个白名单,所以无需使用黑名单功能
userlist_deny=NO
#指定哪个文件作为userlist文件,我们稍后编辑这个文件
userlist_file=/etc/vsftpd.user_list

#是否限制本地所有用户切换根目录的权限,YES为开启限制,即登录后的用户不能访问ftp根目录以外的目录,当然要限制啦
chroot_local_user=YES
#是否启动限制用户的名单list为允许模式,上面的YES限制了所有用户,可以用这个名单作为白名单,作为例外允许访问ftp根目录以外
chroot_list_enable=YES
#设置哪个文件是list文件,里面的用户将不受限制的去访问ftp根目录以外的目录
chroot_list_file=/etc/vsftpd.chroot_list
#是否开启写模式,开启后可以进行创建文件夹等写入操作
allow_writeable_chroot=YES

#设置ftp根目录的位置,这个文件我们稍后自己创建
local_root=/var/myftp

4.重启vsftpd

sudo /etc/init.d/vsftpd restart

5.添加ftp用户
顺便将将用户目录设置为我们上面的ftp根目录

sudo useradd -d /var/myftp ftpuser

6.设置用户密码

sudo passwd ftpuser

7.创建需要的文件,设置文件夹权限
上面我们指定了两个文件,userlist文件和list文件,有时候系统不会自动创建,你要自己创建

vim /etc/vsftpd.user_list

然后添加ftpuser进去作为白名单的一员
(就写一个ftpuser然后esc 然后 :wq 然后 回车)

vim /etc/vsftpd.chroot_list

设为空即可,直接保存,退出!

8.创建用户文件夹,设置权限

mkdir /var/myftp

权限设置可以根据你的使用场景来设置,我这里在根目录下禁止此用户写,然后下面建两个文件夹,一个download只允许读取,upload允许写和读

chmod 555 /var/myftp
cd /var/myftp
mkdir upload
chmod 755 upload
mkdir download
chmod 555 download

如果感觉不怎么会弄权限,直接把这个权限弄777吧,如下,反正有安全问题就去找运维吧,噗!

chmod -R 777 /var/myftp

最后检查一下文件所有者,都改为ftpuser

9.使用ftp,解决各种问题
这个配置文件,老搞事情,可以直接把他删了。

rm /etc/pam.d/vsftpd

重启

/etc/init.d/vsftpd restart

9.使用filezilla进行连接
1)sftp
文件–站点管理器–新站点–选择sftp,端口22
关于ubuntu 16.04搭建ftp(sftp,ftp主动,被动)
2) ftp主动模式
同样选择新建站点,端口21,只使用普通ftp(不安全)
注:默认应该是用被动模式连接的,然后有时候没选择主动模式的话,可能就连接不上,需要你选上主动模式
关于ubuntu 16.04搭建ftp(sftp,ftp主动,被动)
关于ubuntu 16.04搭建ftp(sftp,ftp主动,被动)

  1. ftp的被动模式
    说到这儿,提一下,为什么我会专门去做被动模式?不是为了什么安全,各方面考虑(我还比较菜,考虑不到)…是因为我做设备串口的时候,设备远程升级的串口,他们的底层跟我说,只支持被动模式,弄的我真心蛋疼,最后没办法只能去专门做好被动模式了。
    首先,修改配置文件:
vim /etc/vsftpd.conf

在最后添加几行代码:

pasv_enable=yes
#pasv_promiscuous=no (Default: NO) 是否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用)
pasv_max_port=4000
pasv_min_port=3000
# 这儿填服务器的ip
pasv_address=47.99.*.*    
pasv_addr_resolve=yes

这儿注意不要把 最大端口和最小端口写反了,楼主之前写反了,导致范围端口不生效,这个范围端口到底是干什么的啊?
首先我们得去了解一下ftp主动模式和被动模式以及sftp的区别,小伙伴们自己去百度吧- -

FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口)。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。

也就是说,ftp主动模式用了21和20端口,21作命令,20作数据端口
ftp被动模式,我的理解是,用21端口去连接,然后服务器返回个上面配置的3000-4000的端口中的一个,比如3500,然后客户端再去和3500端口做数据通信,就用不到20端口了。这个范围应该是1024–*;也是用到了2个端口,一个21,一个范围里的动态端口。

注意点:
1, 上面配置几个别写错了,比如我最大最小写反了,就导致范围没起作用
2,服务器白名单,数据流入的端口,要把3000-4000的端口所有都开放了
3,服务器白名单开放21端口,如果是主动要开放20,如果是sftp要开放22,就都把21,22,20开放了吧
4,服务器的防火墙要关闭了。或者开启防火墙的话,要去把这些放行,可以去百度
5,filezilla连接的时候,连接日志太简单了,有些问题都排查不到,可以试试其他的,比如flashFxp等

楼主的第一篇技术文档啊,求支持,求赞,求给力,哈哈哈哈哈哈