8、ftp使用教程

1、FTP概述:

​ FTP是文件传输协议(File Transfer Protocal)的简写,主要完成与远程计算机的文件传输。
FTP采用客户/服务器模式,客户机与服务器之间利用TCP建立连接,客户可以从服务器上下载文件,也可以把本地文件上传至服务器。
FTP服务器有匿名的和授权的两种。匿名的FTP服务器向公众开放,用户可以用“ftp”或“anonymous”为帐号,用电子邮箱地址为密码登录服务器;授权的FTP服务器必须用授权的账户名和密码才能登录服务器。通常匿名的用户权限较低,只能下载文件,不能上传文件。

可参考阿里、腾讯文档
步骤1:安装 vsftpd
1. 执行以下命令,安装 vsftpd。
yum install -y vsftpd
2. 执行以下命令,设置 vsftpd 开机自启动。
systemctl enable vsftpd
3. 执行以下命令,启动 FTP 服务。
systemctl start vsftpd
4. 执行以下命令,确认服务是否启动。
netstat -antup | grep ftp

步骤2:配置 vsftpd
1. 执行以下命令,为 FTP 服务创建一个 Linux 用户,本文以 ftpuser 为例。
useradd ftpuser
2. 执行以下命令,设置 ftpuser 用户的密码。
passwd ftpuser
输入密码后请按 Enter 确认设置,密码默认不显示,本文以 tf7295TFY 为例。
3. 执行以下命令,创建 FTP 服务使用的文件目录,本文以 /var/ftp/test 为例。
mkdir /var/ftp/test
4. 执行以下命令,修改目录权限。
chown -R ftpuser:ftpuser /var/ftp/test
5. 执行以下命令,打开 vsftpd.conf 文件。
vim /etc/vsftpd/vsftpd.conf

2、ftp主动模式和被动模式

参考:https://zhuanlan.zhihu.com/p/93190903
FTP只通过TCP连接,但不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口)。通常21端口是命令端口,20端口是数据端口。然而混入主动/被动模式的概念时,又有所不同。数据连接并不是永久性存在的,一旦传输完毕就会将这个连接关闭掉,但是控制连接不会关闭,除非将客户端关闭了,控制连接才会随之关闭。控制连接是随客户端一起存在的,而数据连接是短暂存在的,只要文件传输或者列表传输完成,数据连接就关闭了。

  • 主动(PORT)模式:
    PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条控制连接。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
Vsftp主动模式修改默认端口
修改命令端口:
listen_port=21 ,如果需要改成其他的端口比如1121,首选需要改这个端口
注意:该信息默认没有,使用的话,需要用户自己添加。默认是21。

修改主动模式数据端口:
connect_from_port_20=YES 主动模式端口为20(该项配置文件默认已经添加)
ftp_data_port=20 指定主动模式的端口
  • 被动(PASV)模式:
    ftp服务器动态申请一个端口(一般大于1024)然后告诉客户端,我在这个端口上等待你的连接,客户端收到以后便向服务器的这个端口发起连接,数据连接建立以后,数据传输就可以开始了。
#开启被动模式。
pasv_enable=YES
#本示例中为轻量应用服务器的公网IP地址。
pasv_address=39.105.xx.xx
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=50000
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=50010

3、配置说明

#1、socket设置
#socket设置,ipv4和ipv6只能设置一个,ipv4开启listen即可
#监听IPv4sockets。
#此时用standalone模式比较合适,大量的客户端连接ftp,服务端也不会卡死
listen=YES
#listen_ipv6=YES

#2、模式设置

#主动模式修改默认端口
#port_enable=YES
#打开主动模式
listen_port=21
#修改命令端口
connect_from_port_20=YES
#主动模式端口为20(该项配置文件默认已经添加)
ftp_data_port=20
#修改主动模式数据端口

#被动模式
pasv_enable=YES
#pasv_enable=YES被动模式,pasv_enable=NO主动模式
pasv_address=101.43.104.154
#请修改为您的Linux云服务器公网IP
pasv_min_port=40000
pasv_max_port=40500
#建议您把端口范围设置在一段比较高的范围内,
#例如50000~50010,有助于提高访问FTP服务器的安全性。

#3、权限设置
write_enable=YES
#是否启用写入权限
download_enable=YES
#是否允许下载文件
pam_service_name=vsftpd
#这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd,认证用
secure_chroot_dir=/var/run/vsftpd/empty
#这个设置指定了一个空目录,这个目录不容许ftp user写入。在vsftpd不希望文件系统被访问时,目录为安全的虚根所使用。

#4、本地用户权限控制
local_enable=YES
#允许本地用户登录FTP服务器。
local_root=/var/ftp/test
#设置本地用户登录后所在目录。
#local_umask=022
#本地用户所上传文件的权限掩码
chroot_local_user=YES
#local和chroot,禁止用户访问上级目录


#例外用户
chroot_list_enable=YES
#启用例外用户名单。
chroot_list_file=/etc/vsftpd/chroot_list
#指定例外用户列表文件,列表中用户不被锁定在主目录。
allow_writeable_chroot=YES
#表示让家home目录下可写

#多用户指定各自单独文件夹
user_config_dir=/etc/vsftpd/userconfig

#少用
#使用允许登录的名单,在/etc/vsftpd/user_list文件中添加新建的用户ftpuser
#userlist_enable=YES
#限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪,禁止访问名单在/etc/vsftpd/ftpusers
#userlist_deny=NO



#5、匿名用户
anonymous_enable=YES
#启用匿名访问
anon_umask=022
#匿名用户所上传文件的权限掩码
anon_root=/var/ftp
#匿名用户的FTP根目录
anon_world_readable_only=YES
#允许匿名下载
anon_upload_enable=YES
#允许上传文件
anon_other_write_enable=YES
#开放其他写入权

#6、日志
#进入某个目录的时候,是否在客户端提示一下
dirmessage_enable=YES
use_localtime=YES
#当设定为YES时,使用者上传与下载日志都会被记录起来
xferlog_enable=YES
#日志成为std格式
xferlog_std_format=YES
#上传与下载日志存放路径
xferlog_file=/var/log/xferlog
ftpd_banner=WelcometoblahFTPservice.
#配置欢迎信息

#7、安全
#编码格式,关于系统安全的设定值:
#ascii_download_enable=YES(NO)
#如果设定为YES,那么client就可以使用ASCII格式下载档案
#一般来说,由于启动了这个设定项目可能会导致DoS的攻击,因此预设是NO
#ascii_upload_enable=YES(NO)
#与上一个设定类似的,只是这个设定针对上传而言,预设是NO
#ascii_upload_enable=NO
#ascii_download_enable=NO

#SSL
#ThisoptionspecifiesthelocationoftheRSAcertificatetouseforSSL
#encryptedconnections.
#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#ssl_enable=NO

#开启ssl证书功能
ssl_enable=NO
#ssl的证书文件存放位置
rsa_cert_file=/etc/vsftpd/.ssl/vsftpd.crt
#ssl的私钥文件存放位置
rsa_private_key_file=/etc/vsftpd/.ssl/vsftpd.key

1.默认配置:
1>允许匿名用户和本地用户登陆。
anonymous_enable=YES
local_enable=YES
2>匿名用户使用的登陆名为ftp或anonymous,口令为空;匿名用户不能离开匿名用户家目录/var/ftp,且只能下载不能上传。
3>本地用户的登录名为本地用户名,口令为此本地用户的口令;本地用户可以在自 己家目录中进行读写操作;本地用户可以离开自家目录切换至有权限访问的其他目录,并在权限允许的情况下进行上传/下载。
write_enable=YES
4>写在文件/etc/vsftpd.ftpusers中的本地用户禁止登陆。

2.配置文件格式:
vsftpd.conf 的内容非常单纯,每一行即为一项设定。若是空白行或是开头为#的一行,将会被忽略。内容的格式只有一种,如下所示
option=value
要注意的是,等号两边不能加空白。
详细配置参考:
https://blog.csdn.net/ws379374000/article/details/78661650
https://cshihong.github.io/2018/10/25/FTP%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E5%92%8C%E9%85%8D%E7%BD%AE/

4、多用户配置

1、单用户或全部用户只访问同一目录
若配置全部用户只访问同一目录,比如用户ming1和用户ming2都默认访问/home/ming的目录,则需要添加配置
local_root=/home/ming/
并建立对应的目录给予权限
mkdir /home/ming
chmod -R 777 /home/ming
以上也适用单个用户的配置

2、每个用户默认只访问自己对应的home目录
若每个用户默认只访问自己对应的目录,home目录下默认每个用户对自己的目录拥有权限,比如用户ming1只访问/home/ming1目录,用户ming2只访问/home/ming2的目录,则需要删除local_root或在前面加#注释掉即可。
在这里插入图片描述

3、多用户,访问各自独立的文件夹
如果有多个用户要指定不同目录,在user_config_dir路径下创建一个和用户同名的文件,使用local_root=/dir 来指定目录。主要添加了一行:user_config_dir=/etc/vsftpd/user_conf_dir
例如:

创建用户
sudo adduser guest1
sudo adduser guest2
1、修改配置文件/etc/vsftpd.conf, 添加以下内容
chroot_local_user=YES
user_config_dir=/etc/vsftpd_user_list/
allow_writeable_chroot=YES

2. 创建用户列表文件夹
sudo mkdir /etc/vsftpd_user_list/

3. 在/etc/vsftpd_user_list/下创建多用户配置文件
新建文件/etc/vsftpd_user_list/guest1,并增加以下内容
local_root=/home/guest1
write_enable=YES
新建文件/etc/vsftpd_user_list/guest2,并增加以下内容
local_root=/home/guest2
write_enable=YES

4. 重启vsftpd.service
sudo systemctl restart vsftpd.service
参考链接:https://blog.csdn.net/hgq522/article/details/121260381

4、禁止用户访问上级目录
将允许访问上级目录的用户名放在/etc/vsftpd.chroot_list中,一行一个用户名,不在该文件中的用户将无法访问上级目录,若没有该文件则需要新建一个,否则登录会报错

#禁止返回上一级
chroot_local_user=YES
chroot_list_enable=YES
#允许返回上级目录的用户放在/etc/vsftpd.chroot_list中,一行一个用户名,若没有/etc/vsftpd.chroot_list,则需要新建一个,否则登录会报错
chroot_list_file=/etc/vsftpd.chroot_list

错误1
客户端登录后可以访问Home 文件夹的上层文件夹
原因是chroot_local_user=NO 没改成 ‘YES’

5、异常

1.vsftpd 启动异常 (code=exited, status=2)
vsftpd.conf 的内容非常单纯,每一行即为一项设定。若是空白行或是开头为#的一行,将会被忽略。内容的格式只有一种,如下所示
option=value
要注意的是,等号两边不能加空白。

2.权限异常
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
chown用法:用来更改某个目录或文件的用户名和用户组。
chmod用法:用来修改某个目录或文件的访问权限。
查看改变:ls -l 或者 ll

3.window连接异常
window连接时还要开放ftp防火墙,主动模式要取消。被动pasv模式要开启。
在这里插入图片描述
4.用户密码异常
530 Login incorrect.
登录失败。
sudo passwd ftptuser #修改密码

5.window 终端客户端不支持PASV
500 Illegal PORT command.
425 Use PORT or PASV first.
425 Failed to establish connection.
在这里插入图片描述
看到网上有一种说法是可以输入quote PASV,测试了一下并没有什么卵用
看到stackoverflow上面有一篇帖子,说是windows命令行里ftp.exe不支持被动模式访问ftp,如果非要用被动模式访问,还是使用其他支持被动模式ftp的客户端吧,比如WinSCP FTP client 。

【参考方案】:资源管理器
虽然这并没有直接回答关于命令行的问题,但在 Windows 操作系统中,使用 Windows 资源管理器ftp://username@server,这将默认使用被动模式。
主动模式要取消。被动pasv模式要开启。
在这里插入图片描述
在这里插入图片描述
6.多用户异常
500 OOPS: error opening per-user config file
ftp: Login failed
设置了下面多用的位置后,对应的目录下至少有一个用户配置,否则会报错。

#多用户指定各自单独文件夹,没有文件时会报错
user_config_dir=/etc/vsftpd/userconfig

7、主动模式异常
ftp> ls
550 Permission denied.
500 Illegal PORT command.
ftp: Can’t bind for data connection: Address already in use
原因未找到

listen=YES
#2、模式设置
#主动模式修改默认端口
port_enable=YES
#打开主动模式
listen_port=8051
#修改命令端口
connect_from_port_20=NO
#主动模式端口为20(该项配置文件默认已经添加)
ftp_data_port=8060
#修改主动模式数据端口

#被动模式
pasv_enable=NO
#pasv_enable=YES被动模式,pasv_enable=NO主动模式
pasv_address=101.43.104.154
#请修改为您的Linux云服务器公网IP
pasv_min_port=40000
pasv_max_port=40500

6、ftp命令

参考:https://docs.openeuler.org/zh/docs/22.03_LTS/docs/Administration/%E6%90%AD%E5%BB%BAFTP%E6%9C%8D%E5%8A%A1%E5%99%A8.html
1.连接服务器
ftp [hostname | ip-address]
其中hostname为服务器名称,ip-address为服务器IP地址。

$ ftp ip-address

2.本地和远程
!退出(返回本地),在命令行前面加!代表本地命令,不加为远程命令

ls #查看远程目录下文件
!ls #查看本地目录

pwd、lcd

3、下载文件
通常使用get或mget命令下载文件。
示例:获取服务器上/home/openEuler/目录下的所有文件,命令如下:
ftp> cd /home/openEuler/
ftp> mget .

4、上传文件
通常使用put或mput命令上传文件。
示例:将本地当前目录下所有htm文件上传到服务器/home/openEuler/下,命令如下:
ftp> cd /home/openEuler/
ftp> mput *.htm

5.删除文件
通常使用delete或mdelete命令删除文件。
示例:删除远程服务器上/home/openEuler/下的openEuler.htm文件,命令如下:
ftp> cd /home/openEuler/
ftp> delete openEuler.htm

6、主动和被动模式切换
window用:quote pasv
Linux用:passive

ftp> quote pasv
227 Entering Passive Mode (192,168,2,2,1111,5555)
ftp> passive
Passive mode on.
ftp> dir

附录

参考:
https://help.aliyun.com/zh/simple-application-server/use-cases/build-an-ftp-server-on-a-windows-instance
https://cloud.tencent.com/document/product/213/10912
https://zhuanlan.zhihu.com/p/93190903
https://blog.csdn.net/lzgonline/article/details/115918699
https://cshihong.github.io/2018/10/25/FTP%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E5%92%8C%E9%85%8D%E7%BD%AE/
https://blog.csdn.net/weixin_45688268/article/details/126337169
https://blog.csdn.net/qq_38265137/article/details/83388101

  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值