# ftp
ftp 即 file transfer protocol,是一个比较古老的文件传输协议,工作在应用层。其数据是明文传输,因此安全方面存在问题。
## 数据
命令连接 文件管理类命令,命令连接始终在线
数据连接 数据传输,按需创建及关闭的连接
## 数据传输时编码格式
### 文本格式
图片视频默认是二进制而是存储的,传输时可以通过**base64**转化为文本格式
### 二进制传输
二进制格式可以直接传输
具体的传输格式选择遵循文件的存储格式
## 主动连接和被动连接
主动和被动是相对于服务端来说的。
### 主动连接方式
客户端创建命令连接(客户端使用随机端口 (大于50000),连接服务器端的20号端口)
服务端使用20号端口连接客户端的50001端口。
>[danger]客户端建立建立命令连接后,服务端向客户端传输数据时,需要建立新的数据连接,这个连接无法穿过客户端防火墙。
### 被动连接方式
客户端创建命令连接(客户端使用随机端口 (大于50000),连接服务器端的20号端口),服务端会告诉客户端将要传输数据的端口;
客户端使用随机端口连接服务端数据端口。
>[danger]服务端防火墙将会阻止客户端发起的数据连接,但可以使用连接追踪,使防火墙放行命令连接开放的数据连接端口
## linux下的客户端
ftp,lftp,lftpget
wget,curl
gftp(GUI)
## 响应码
1xx:信息类
2xx:成功类状态码
3xx:需要进一步提供补充类信息的状态码
4xx:客户端错误
5xx:服务端错误
## 用户认证
### 匿名用户
匿名用户登陆后映射为ftp用户,ftp用户的家目录`/var/ftp`。
~~~
anonymous_enable=YES# 开启匿名用户模式
anon_upload_enable=YES# 匿名用户可以上传,默认是NO
anon_mkdir_write_enable=YES# 匿名用户可以创建目录,默认是NO
anon_other_write_enable=YES# 匿名用户可以删除文件和目录,默认是NO
~~~
### 系统用户
系统用户登录到用户的家目录
~~~
local_enable=YES# 允许系统用户登录
write_enable=YES# 系统用户可以创建删除文嘉目录
local_umask=022
chroot_local_user=YES# 限制所有用户在家目录下,默认是NO
chroot_list_enable=YES# 限制指定用户在家目录下,默认是NO
chroot_list_file=/etc/vsftpd/chroot_list# 限制列表
~~~
### 虚拟用户,用于访问某特定服务中的资源
nsswitch,network server switch,名称解析框架
配置文件 nsswitch.conf
模块 /lib64/libnss*,/usr/lib64/libnss*
pam pluggable authentification module,用户认证框架
配置文件 /etc/pam.conf /etc/pam.d
模块 /lib64/security