FTP服务器搭建和初了解
安装ftp服务器
安装vsftpd
# yum install -y vsftpd
===============================================================================
添加用户名,用作ftp匿名访问用户
# useradd ftpuser
给用户名设置密码
# passwd ftpuser
配置文件
# cd /etc/vsftpd/
# vim vsftpd.conf
# 允许匿名访问
anonymous_enable=YES
# 不允许本地用户,如root用户登陆。默认允许
local_enable=NO
#设置本地用户登录所在的目录。默认配置文件中没有该配置项,本地用户登录FTP服务器后所在的目录为所登录用户的主目录,如:对于root用户,则为/root目录
# local_root=/home/ftpuser
# 本地用户上传文件权限
local_umask=022
# 匿名用户上传文件权限
anon_umask=022
# 允许写入操作,否则不能上传文件
write_enable=YES
# 允许匿名用户上传文件,需要配合write_enable=yes
anon_upload_enable=YES
# 控制匿名用户对文件和文件夹的删除和重命名(自己添加,没有该配置)
anon_other_write_enable=YES
# 允许匿名用户创建目录
anon_mkdir_write_enable=YES
# ftp工具连接成功提示
ftpd_banner=Welcome to blah FTP service.
# 所有用户均不能切换到上级目录
chroot_local_user=YES
# 是否启动限制用户的名单。YES为启用,NO禁用。默认禁用
chroot_list_enable=NO
# /etc/vsftpd/user_list文件不生效
userlist_enable=NO
#坑,添加以下配置。不添加此项,文件无法上传。报错:550 Permission denied。新版本vsftpd加入了安全需求,切根不允许写,要添加这个配置并设置为YES才可以
allow_writeable_chroot=YES
#匿名用户的根目录。这个非常重要
anon_root=/usr/local/ftpdir
#匿名用户不要密码就靠这个
no_anon_password=YES
# 匿名登录后的使用者
ftp_username=ftpuser
===============================================================================
启动ftp服务器
注:我这里是把所有防火墙都给关了的
端口是21(有的人线下装Linux服务器系统时候会安装一个ftp服务器:pure-ftpd,而且默认是开机自启,而且端口也是21端口)
启动之前可以查询是否有ftp服务在跑着,或者查看21端口是否有程序占用
Linux查询某个端口是否被占用:netstat -anp | grep 端口号
通过pid查看对应端口使用者:netstat -antup | grep pid
或者查询管道过滤:ps -ef | grep ftp
===============================================================================
最后ftp服务器启动命令
# systemctl start vsftpd
附(坑)
ftp客户端
下载ftp工具测试连接:
# yum install -y ftp
# ftp localhost
或者cmd连接:
ftp 192.168.163.4
或者客户端工具filezilla连接。火狐浏览器访问链接(其它浏览器不支持访问,不建立资源目录,我不知道为啥):
ftp://192.168.163.4
如果需要输入密码,但是不想输入密码,就这样访问(重点)
ftp://ftpuser:ftpuser@192.168.163.4/
不需要输入用户名、密码访问ftp服务器终极解决方案
#匿名用户的根目录。这个非常重要(注:这个目录不可以是Linux已有账号的家目录)
anon_root=/usr/local/ftpdir
不能上传文件问题
首先保证匿名用户登录根目录为755权限,例上述:/usr/local/ftpdir
再一个,在/usr/local/ftpdir创建目录files,权限给777,客户端就可以在/usr/local/ftpdir/files上传文件进来了
上传上来的文件权限太低,浏览器下载不了
这个上传文件的权限不是ftp服务器决定的,决定权限的是上传的客户端。我在给设备配置ftp服务器的时候(此时设备就相当于客户端),上传上去的文件权限大都够用的
但是上图这种情况是确实存在的,我在测试的时候遇到了。这时候如果匿名访问不了,就这样:ftp://ftpuser:ftpuser@192.168.163.4/。注:这样使用ftpuser用户登录的话就必须在配置文件中打开local_enable=YES,并且设置本地用户登录根目录local_root=/usr/local/ftpdir(跟匿名登陆根目录必须一样的啊)
注:我已经在配置文件中设置了匿名用户登录为ftpuser,即ftp_username=ftpuser。为什么匿名用户下载不了那个软件,必须使用用户名和密码登录了之后才行呢?不去纠结了,不钻牛角尖,不过这确是一个可行的解决方案。猜想可能是因为匿名用户不询问密码那个配置,即no_anon_password=YES,但是ftpuser这个系统用户是有密码的,所有就出现了这样的情况,当然我也只是猜想罢了,这个问题就先研究到这…
阿里云服务器搭建ftp服务器的坑
参考博客:https://blog.csdn.net/newborn2012/article/details/15812821/
按找上述步骤在局域网内是没有问题的,但是在云服务器上就有坑要填。因为云服务器有一个安全组的机制,然后从这个突破口去寻找解决方案。首先将局域网的配置步骤照搬到服务器上,启动发现无论是浏览器还是filezilla客户端都访问不了
在解决这个问题之前要了解ftp的两个工作模式:Port和Pasv。FTP连接一般会有两个连接,也就是会需要用到两个端口。一个服务器与客户端跟进行命令交互的,一个是进行数据传送的。那两种工作模式跟两个连接是怎么搭配起来工作的呢?
假设客户端为C,服务器端为S(以下简称C和S):
l Port模式:当客户端C和服务端S连接起来后,C会发送一条命令告诉S:“我在本地打开了一个端口N等你进行数据连接”,当S收到这个Port命令后就会向C打开的那个端口N进行数据连接。S主动向C的某个端口进行数据连接,此乃主动模式
l Pasv模式:当客户端C和服务端S连接起来后,S会发送一条命令告诉C:“我再本地打开了一个端口M你来连接我吧”,当C收到这个消息后就会向S的M端口发起数据连接。S打开端口被C主动连接,此乃被动模式
那我们应该使用哪种工作模式呢?答案是被动(默认工作模式就是被动)。为什么?很简单,你是在局域网内,你可以连接到云服务器的某个端口(前提是这个端口放开了),但是云服务器连接不到你的
FTP模式与数据端口:无论是哪一种工作模式,首先在建立控制连接时候操作是一样的,都是由客户端(首先随机选取一个大于1024以上的端口)和FTP服务器的控制端口21建立连接,并通过该连接传输操作指令。两种工作模式的区别是什么呢?在于使用数据传输端口(ftp-data)方式。port mode由FTP服务器指定数据传输所使用的端口,默认值为20。pasv mode由FTP客户端决定数据传输端口,客户端向服务端发出连接请求包含了数据传输端口
(重要)
主动模式相关配置(了解):
port_enable=YES|NO:数据连接时取消PORT模式,默认为YES
connetc_from_port_20=YES|NO:控制以PORT模式进行数据传输时是否使用20端口,默认是NO(但实际上我用的RHL-CentOS7.6,vsftpd.conf文件中该配置设为YES,该配置生效前提是工作模式为主动的)
ftp_data_port=端口号:设置FTP数据传输端口(ftp-data)值,默认值为20。此参数也用于主动模式
port_promiscuous=YES|NO:取消PORT安全检查,该检查确保外出的数据只能连接到客户端上,默认为NO。小心打开此选项(Don't care)
被动模式相关配置:
pasv_enable=YES|NO:允许数据传输使用PASV模式,默认为YES,且配置文件中没有该配置
pasv_min_port=端口号、pasv_max_port=端口号:设置在PASV模式下建立数据传输所用端口范围上界和下界,0表示任意,默认为0。把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高,我设置的是30000-50000,这个看你自己的啦
pasv_promiscuous=YES|NO:此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中,默认值为NO(Don't care)
pasv_address=ip地址:此选项为一个数字IP地址,作为PASV命令的响应,默认值为none,地址是从呼入的连接套接字(incoming connectd socket)中获取(Don't care)
命令通道端口配置,默认为21
listen_port=21
最后一步,修改配置,使云服务器上搭建的FTP服务器可以正常使用:
也没啥要修改的,主要就是加两个配置(为明确工作模式,我给加上pasv_enable=YES):
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=50000
打开阿里云服务器30000-50000范围端口
(完)
客户端filezilla在连接vsftpd时候要明确加密类型为:只使用明文FTP(不安全)
扩展:pure-ftpd
这个跟vsftpd性质一样的啊,ftp是个什么玩意,你能看到这里心里就应该很清楚了,我也不再去解释他的概念、协议一些乱七八糟的东西了
直接进入安装:
按需安装pure-ftpd其它依赖,如ep el扩展:yum install -y epel-release
# yum install -y pure-ftpd
在启动pure-ftpd之前,需要先修改配置文件/etc/pure-ftpd/pure-ftpd.conf
# cd /etc/pure-ftpd
# vim pure-ftp.conf
打开PureDB配置,删除该行“#”号
PureDB /etc/pure-ftpd/pureftpd.pdb
然后跟vsftpd一样,设置被动模式数据端口范围:
passive(被动模式)连接的端口范围-保持尽可能宽。(我vsftpd也是这么设置的,俩都是30000到50000,方便,而且我没记错的话这儿本来就是这个范围,只不过注释默认没打开)
PassivePortRange 30000 50000
建立账号和文件使用目录。注意:为了安全,pure-ftpd使用的账号并非Linux的系统账号,而是虚拟账号,然后和Linux系统用户进行绑定
# mkdir /data/ftp
如果没有ftpuser账号的话
# useradd ftpuser
# passwd ftpuser
存储目录所有者切换为ftpuser
# chown -R pure-ftp:pure-ftp /data/ftp
创建虚拟账户,-u是将虚拟用户admin与系统用户ftpuser关联在一起,也就是说使用admin账号登录ftp后,会以ftpuser的身份来读取和下载文件,-d是指定admin账户的家目录,这样可以使用户admin登陆进来就可以也只能访问其家目录/data/ftp/
# pure-pw useradd admin -u ftpuser -d /data/ftp
Password:
Enter it again:
创建用户信息数据库文件,这一步很关键
# pure-pw mkdb
列出当前账号
pure-pw list
删除账号
pure-pw userdel admin….
添加一个测试文件
# touch /data/ftp/123.txt
安装lftp客户端软件,跟ftp一样,可以理解为也是一个工具
简介:
# yum install -y lftp
# lftp admin@127.0.0.1
注:这个软件会在ftp的工作目录生成两个隐藏文件:“.”和“..”