FTP是很常用的在计算机直接传输文件的协议,一方作为服务器,一方作为客户端。这里主要说下在Linux上一个常见的FTP服务器——vsftpd
FTP工作方式
FTP是有状态的协议,在FTP会话期间,客户端和服务端保持开放状态。客户端可以通过命令从服务端上传或者下载文件。
有两种类型的连接:
- 控制连接:也叫做命令连接
- 数据连接
当我们登陆FTP服务器的21端口时,发送用户名和密码进行认证,这个连接叫做控制连接。当开始传输文件的时候,数据连接就开始了。
数据连接有两种类型:
- Passive mode. 被动模式:客户端等待服务器的请求,服务器初始化连接
- Active mode. 主动模式:服务器等待客户端的请求,客户端初始化连接
当FTP客户端开始传输文件的时候,在客户端有一个选项可以控制是使用Active或者Passive 模式
vsftpd
特性
有很多FTP服务器可以使用,收费的,免费的,但是vsftpd的一些特性让它一直都很流行
- 支持SSL/TLS的FTP连接
- 可以限制用户只在自己的家目录内使用
- 可以进行权限隔离
安装
# Centos
yum install -y vsftpd ftp
# Ubuntu,Debian
sudo apt-get install vsftpd ftp
启动:
systemctl start vsftpd
使用
有两种方式访问FTP服务器:
- 匿名模式: 所有人都可以使用anonymous 用户登录,不需要输入密码
- 本地用户模式:在/etc/passwd文件中的合法用户都可以访问FTP服务器
配置文件位于/etc/vsftpd/vsftpd.conf
- 开启匿名模式:
anonymous_enable=YES
- 开启本地用户模式:
local_enable=YES
典型配置
开启日志
xferlog_file=/var/log/xferlog #操作日志
dual_log_enable=YES # 登录日志
vsftpd_log_file=/var/log/vsftpd.log #登录日志
日志内容:
说明:
当前服务器本地时间 Mon Aug 12 21:04:17 2019
传输时间 1
远程主机名称 10.65.204.106
文件大小 130235
文件名称 /1803431034_20190812211038_0000054376_100.jpg
传输类型 a 以ASCII传输; b 以二进制传输
特殊处理标志 _ 不做任何处理; C 文件是压缩格式; U 文件是非压缩格式; T 文件是tar格式
传输方向 o 从FTP服务器向客户端传输(下载); i 从客户端向FTP服务器传输(上传)
访问模式 a 匿名用户; g 来宾用户; r 真实用户,即系统中的用户
用户名 这里是ibos
服务名 所使用的服务名称,一般为ftp
认证方式 0 无; 1 RFC931认证
认证用户id 如果用 *,则表示无法获得该id,但是仍然可以上传成功
完成状态 c 表示传输完成; i 表示传输未完成
限制用户在家目录内操作
修改vsftpd.conf
chroot_local_user=yes #本地用户进行chroot操作
chroot_list_enable=YES #chroot_list_file中进行chroot操作
chroot_list_file=/etc/vsftpd/chroot_list #在文件中指定用户名
local_root=/var/ftp # 虚拟用户根目录,根据实际情况修改
# 以下配置在用户上传到根目录失败的时候可以加上。
virtual_use_local_privs=NO # 虚拟用户的权限是否符合他们的宿主用户
guest_enable=YES # 启用虚拟用户功能
guest_username=ibos # 将虚拟用户映射为本地ibos用户
allow_writeable_chroot=YES # 在choot之后允许可写
匿名用户读写
listen=NO
listen_ipv6=NO
anonymous_enable=YES
local_enable=NO
write_enable=YES
最后
今天在调试设备的时候需要操作FTP服务器,期间用到知识记录下来
参考:
Create new vsftpd user and lock to (specify) home / login directory