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服务器访问比较困难。
被动模式只需要服务器端开放端口给客户端连接就行了,如果服务端在防火墙内,也需要做端口映射才行。