FTP服务器
linxux_ftp
安装&运行
yum
1  | yum -y install vsftpd  | 
开机自启&启动服务
1  | systemctl enable vsftpd.service  | 
查看监听端口
1  | netstat -antup | grep ftp  | 
配置vsftpd
为FTP服务创建一个Linux用户
1  | adduser ftptest  | 
修改用户密码
1  | passwd ftptest  | 
创建一个供FTP服务使用的文件目录
1  | mkdir /var/ftp/test  | 
创建测试文件
1  | touch /var/ftp/test/testfile.txt  | 
更改/var/ftp/test目录的拥有者为ftptest
1  | chown -R ftptest:ftptest /var/ftp/test  | 
修改配置文件
1  | vim /etc/vsftpd/vsftpd.conf  | 
如果使用的是
apt install vsftpd安装命令,则配置文件路径为/etc/vsftpd.conf
1  | #除下面提及的参数,其他参数保持默认值即可。  | 
chroot_list文件,并在文件中写入例外用户名单
1  | vim /etc/vsftpd/chroot_list  | 
重启服务
1  | systemctl restart vsftpd.service  | 
/etc/vsftpd目录下文件说明如下:
- /etc/vsftpd/vsftpd.conf是vsftpd的核心配置文件。
 - /etc/vsftpd/ftpusers是黑名单文件,此文件中的用户不允许访问FTP服务器。
 - /etc/vsftpd/user_list是白名单文件,此文件中的用户允许访问FTP服务器。
 
用户登录控制参数说明
| 参数 | 说明 | 
|---|---|
| anonymous_enable=YES | 接受匿名用户 | 
| no_anon_password=YES | 匿名用户login时不询问口令 | 
| anon_root=(none) | 匿名用户主目录 | 
| local_enable=YES | 接受本地用户 | 
| local_root=(none) | 本地用户主目录 | 
用户权限控制参数说明
| 参数 | 说明 | 
|---|---|
| write_enable=YES | 可以上传文件(全局控制) | 
| local_umask=022 | 本地用户上传的文件权限 | 
| file_open_mode=0666 | 上传文件的权限配合umask使用 | 
| anon_upload_enable=NO | 匿名用户可以上传文件 | 
| anon_mkdir_write_enable=NO | 匿名用户可以建目录 | 
| anon_other_write_enable=NO | 匿名用户修改删除 | 
| chown_username=lightwiter | 匿名上传文件所属用户名 | 
出现问题

解决方法禁用SELinux
暂时禁用
1  | setenforce 0  | 
永久禁用
1  | vi /etc/selinux/config  | 
打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹

解决方法:打开 “网络和共享中心”,找到“Internet选项” –>【高级】这页,取消掉“使用被动FTP(用于防火墙和DSL调制解调器的兼容)”
windows_ftp
使用命令
| 命令 | 描述 | 
|---|---|
| ! | 在本地机中执行交互shell,exit回到ftp环境 | 
| dir | 显示远程计算机上的目录文件和子目录列表 | 
| cd | 指定要更改的远程计算机上的目录 | 
| lcd | 更改本地计算机上的工作目录。默认情况下,工作目录是启动 ftp 的目录 | 
| get | 使用当前文件传输类型将远程文件复制到本地计算机。 | 
| open | 与指定的 FTP 服务器连接 | 
| put/send | 使用当前文件传输类型将本地文件复制到远程计算机上 | 
日志分析
linux
默认情况下,Vsftp不单独记录日志,也就是说不会输出到一个单独的文件中存储,而是统一存放到/var/log/messages文件中。
常见解决方案
- xferlog_enable=YES
 - xferlog_std_format=YES
 - xferlog_file=/var/log/xferlog
 - dual_log_enable=YES
 - vsftpd_log_file=/var/log/vsftpd.log
 
在配置文件中启用xferlog_enable=YES,它表示将客户机登录服务器后上传或下载的文件具体信息记录。

xferlog_std_format=YES 传输日志文件将以标准 xferlog 的格式书写,该格式的日志文件默认为 /var/log/xferlog
dual_log_enable=YES,它表示启用双份日志,将生成两个相似的日志文件,默认在 /var/log/xferlog 和 /var/log/vsftpd.log 目录下。前者是 wu-ftpd 类型的传输日志,可以利用标准日志工具对其进行分析;后者是Vsftpd类型的日志。
syslog_enable原本应该输出到/var/log/vsftpd.log中的日志,将输出到系统日志中。
vsftpd.log

日志仅反映了部分Ftp登录情况:例如登录IP地址、用户名
成功登录标识
1  | Wed Sep 8 21:02:29 2021 [pid 340294] [longer] FTP command: Client "192.168.79.132", "PASS <password>"  | 
Xferlog
1  | Wed Sep 8 19:08:51 2021 1 ::ffff:192.168.79.132 0 /test_ftp.txt a _ o r longer ftp 0 * c  | 
| 记录 | 含义 | 
|---|---|
| Tue Sep 7 15:35:57 2021 | FTP传输时间 | 
| 1 | 传输文件所用时间。单位/秒 | 
| 192.168.79.132 | ftp客户端名称/IP | 
| 0 | 传输文件大小。单位/Byte | 
| /testfile.txt | 传输文件名,包含路径 | 
| a | 传输方式: a以ASCII方式传输; b以二进制(binary)方式传输; | 
| _ | 特殊处理标志位:”_”不做任何处理;”C”文件是压缩格式;”U”文件非压缩格式;”T”文件是tar格式; | 
| o | 传输方向:”i”上传;”o”下载; | 
| r | 用户访问模式:“a”匿名用户;”g”访客模式;”r”系统中用户; | 
| longer | 登录用户名 | 
| ftp | 服务名称,一般都是ftp | 
| 0 | 认证方式:”0”无;”1”RFC931认证; | 
| * | 认证用户id,”*”表示无法获取id | 
| c | 完成状态:”i”传输未完成;”c”传输已完成; | 
为啥会出现
::ffff:,因为之前vsftpd.conf中默认listen=YES,#listen_ipv6=YES这个忘记注释掉。IPv4 映射的 IPv6 地址使用此替代格式。此类型的地址用于将 IPv4 节点表示为 IPv6 地址。它允许 IPv6 应用程序直接与 IPv4 应用程序通信。例如,
0:0:0:0:0:ffff:192.1.56.10和::ffff:192.1.56.10/96(短格式)。
windows
日志位置
win+r ,输入inetmgr


字段
1  | #Software: Microsoft Internet Information Services 10.0  | 

FTP状态码
常用
| 状态码 | 描述 | 
|---|---|
| 230 | 用户登录 | 
| 226 | 请求的文件操作成功 | 
| 213 | 文件状态 | 
| 530 | 账号或密码错误 | 
1  | FTP应答码&响应码  | 
连接模式
主动模式PORT

被动模式PASV

比较
主动模式和被动模式的不同简单概述为: 主动模式传送数据时是“服务器”连接到“客户端”的端口(客户端开启数据端口);被动模式传送数据是“客户端”连接到“服务器”的端口(服务端开启数据端口)。
主动模式需要客户端必须开放端口给FTP服务端,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。
被动模式只需要服务器端开放端口给客户端连接就行了,如果服务端在防火墙内,也需要做端口映射才行。





