前言
最近在调研ftp服务的登陆 所以有必要安装研究一下作为Linux端ftp的实现软件—— vsftpd
以vsftpd 3.02版本为例
一、安装配置
1.1 卸载vsftpd
先查找vsftpd是否安装
[root@localhost ~]# rpm -aq vsftpd
vsftpd-3.0.2-29.el7_9.x86_64
有输出就代表已经安装了
卸载之前先停止vsftpd
systemctl stop vsftpd
再卸载
rpm -e vsftpd
1.2 安装vsftpd
yum install -y vsftpd
注意:如果提示"No package vsftpd available."
执行如下
wget http://mirror.centos.org/centos/7/updates/x86_64/Packages/vsftpd-3.0.2-29.el7_9.x86_64.rpm
rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm
1.3 安装ftp客户端
vsftpd是服务端,ftp是客户端。
要想访问我们的vsftpd服务就必须要先安装客户端。
yum install ftp -y
如果提示“No package ftp available.”, 则执行以下操作
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/ftp-0.17-67.el7.x86_64.rpm
rpm -ivh ftp-0.17-67.el7.x86_64.rpm
1.4 启动vsftpd
systemctl start vsftpd
1.5 防火墙配置
防火墙放行21端口
firewall-cmd --zone=public --add-port=21/tcp --permanent
防火墙永久开放ftp服务,即类似windows 防火墙可让该应用 通行
firewall-cmd --add-service=ftp --permanent
防火墙重新加载
firewall-cmd --reload
1.6 Selinux配置
CentOS的所有访问权限都是由SELinux来管理的,为了避免我们安装中由于权限关系而导致的失败,需要先将其关闭,以后根据需要再进行重新管理。
查看selinux状态
[root@localhost script]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
临时关闭selinux
# 临时关闭SE
getenforce
setenforce 0
永久关闭
getsebool -a | grep ftp
setsebool -P ftpd_full_access on
二、相关目录
# vsftp配置文件
/etc/vsftpd/vsftpd.conf
# PAM认证文件
/etc/pam.d/vsftpd
# 匿名用户默认目录
/var/ftp
# 匿名用户的下载目录
/var/ftp/pub
# 不能访问 ftp server 的用户列表
/etc/vsftpd/ftpusers
# 允许访问 ftp server 的用户列表
/etc/vsftpd/user_list
# ftp 的上传下载日志
/var/log/xferlog
# ftp登陆日志目录 需要 vsftpd.conf conf dual_log_enable=YES
/var/log/vsftpd.log
三、配置conf
3.1 配置/etc/vsftpd/vsftpd.conf
先备份一份
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
注意:添加配置项时结尾不要有空格 不然可能会启动不了服务
3.2 vsftpd日志配置
ftp服务器的日志设置,可以通过修改主配置文件/etc/vsftpd.conf实现。
主配置文件中与日志设置有关的选项包括:
- xferlog_enable
- xferlog_file
- dual_log_enable
xferlog_enable
如果启用该选项,系统将会维护记录服务器上传和下载情况的日志文件。默认情况下,该日志文件为 /var/log/vsftpd.log
。但也可以通过配置文件中的 vsftpd_log_file 选项来指定其他文件。默认值为NO。
xferlog_std_format
如果启用该选项,传输日志文件将以标准 xferlog 的格式书写,该格式的日志文件默认为 /var/log/xferlog
,也可以通过 xferlog_file 选项对其进行设定。默认值为NO。
dual_log_enable
如果启用该选项,将生成两个相似的日志文件,默认在 /var/log/xferlog
和 /var/log/vsftpd.log
目录下。前者是 wu-ftpd 类型的传输日志,可以利用标准日志工具对其进行分析;后者是Vsftpd类型的日志。
syslog_enable
如果启用该选项,则原本应该输出到/var/log/vsftpd.log
中的日志,将输出到系统日志中。
四、使用
4.0 ftp命令 基本使用
vsftpd是服务端,ftp是客户端。
要想使用ftp命令就必须要先安装ftp
安装方法 参考本章 安装ftp客户端
4.1 开启vsftpd登陆日志
vsftp配置文件/etc/vsftpd/vsftpd.conf
添加:
dual_log_enable=YES
然后重启ftp服务即可
systemctl restart vsftpd
4.2 使用Winscp Root账号登陆FTP
- 修改 vsftpd.conf 配置
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=077
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
anon_root=/var/ftp/
dual_log_enable=YES
- 修改 /etc/vsftpd/user_list 配置文件
注释掉root - 修改/etc/vsftpd/ftpusers配置文件
注释掉root
然后接下来你就可以使用root账号进行ftp登陆进行上传下载了
4.3 匿名模式 访问ftp服务
匿名模式
是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到FTP服务器。
4.4 本地用户模式 访问ftp服务
本地用户模式
是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。
4.5 虚拟用户模式
虚拟用户模式
是更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。
4.6 连接的主动模式和被动模式
https://www.cnblogs.com/puloieswind/p/15727632.html
-
完成一个FTP的传输过程不仅仅只需要21一个端口,而是2个端口,21端口只是一个命令端口,其实另外还有一个数据端口,我想这就是有些朋友在内网架设FTP并且在网关上做了21端口的映射之后外网还是不能访问的原因吧,另外一个数据端口是多少呢?这又牵涉到另外一个问题。
-
FTP具有两种模式,分别是
port模式(也叫主动模式)
和pasv模式(也叫被动模式)
,怎么来理解这两种模式呢?我来打个比喻吧,在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会通过另外一个数据端口把东西传给客户端,这就是主动模式,可以理解为服务端主动给客户端传输文件;在被动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,服务器端知道后,就打开一个端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧,于是客户端就从那个端口进去拿文件了,这就是被动模式,可以理解为服务端被客户端拿走了东西
五、常见问题
5.1 匿名访问ftp服务
ftp://xx.xxx.xxx.xx 访问时超时或者无法访问
5.2 使用Winscp Root角色登陆 提示 Permission denied.
ftpusers文件
查看root角色是否在 不能访问 ftp server 的用户列表/etc/vsftpd/ftpusers中,如果在删除
user_list文件
查看root角色是否在 允许访问 ftp server 的用户列表/etc/vsftpd/user_list中,如果不在就添加
If userlist_deny=NO, only allow users in this file
If userlist_deny=YES (default), never allow users in this file, and
5.3 /var/log/vsftpd.log 不存在或者为空
1.为空 可能是没有登陆行为
2.vsftpd.conf 没有添加 dual_log_enable=YES
配置项
5.4 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list
参考
/etc/vsftpd/vsftpd.conf #编辑vsftpd配置文件
找到以下三行,注释掉就行可以了
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
改为
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
重启FTP
systemctl restart vsftpd
Winscp登陆访问ftp时 提示“监测到超时! (数据连接) 无法获得目录列表 列出‘/‘的目录项时出错。”
阿里云轻型应用服务器 公网连接vsftpd连接不上
- 检查一下阿里云服务器防火墙20-21端口是否开放
- 配置完如果发现没有生效 重启一下服务器 再试
打开FTP 服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹 FTP
解决方法1 地址栏\改为// 试试
参考
总结
本节主要介绍了vsftp的安装和使用,有问题的可以评论留言
参考:
Linux使用笔记:配置FTP服务器(vsftp)
VSFTP介绍安装使用
centos7搭建vsftpd-配置文件全解
阿里云的esc ftp搭建
vsftpd日志配置
《linux就该这么学》之 vsftpd