vsftpd

# 目录
- ftp 简介
- vsftpd 简介
- vsftpd 安装&卸载
- vsftpd 配置文件
- vsftpd 认证模板
- vsftpd 配置模板

# 目录详解
- ftp 简介: 简单介绍 ftp 协议;
- vsftpd 简介: 介绍 vsftpd & 为什么使用vsftpd;
- vsftpd 安装&卸载: vsftpd安装&卸载;
- vsftpd 配置文件: 主要介绍与 vsftpd 相关的配置文件信息;
- vsftpd 认证模板: 在服务器上如何配置&使用 vsftpd 服务 (若想直接使用,则直接看该部分);
- vsftpd 配置模板: 常使用的 vsftpd.conf 配置模板, 可快速配置 vsftpd.conf ;

ftp 简介

一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式。

FTP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20用于进行数据传输,端口21用于接受客户端发出的相关FTP命令与参数。

FTP服务器普遍部署于内网中,具有容易搭建、方便管理的特点,有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术。

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。FTP协议有下面两种工作模式:

由于FTP、HTTP、Telnet等协议的数据都是使用明文进行传输的,因此从设计上就是不可靠的。

为了满足以密文方式传输文件的需求,发明了vsftpd服务程序。

vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费。此外,它还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。在不影响使用的前提下,管理者可以自行决定客户端是采用匿名开放、本地用户还是虚拟用户的验证方式来登录vsftpd服务器。这样即便黑客拿到了虚拟用户的账号密码,也不见得能成功登录vsftpd服务器。

vsftpd 简介

vsftpd 的全称是 Very Secure FTP Daemon 的意思;换句话说,vsftpd 最初发展的理念就是在建构一个以安全为重的 FTP 服务器。

vsftpd 是为了建构一个安全为主的 FTP 服务器, vsftpd 针对操作系统的 程序的权限 (privilege) 概念来设计;

vsftpd 也支持 chroot 功能,chroot 顾名思义就是 change root directory 的意思,root 指的是根目录而非系统管理员;chroot可以将用户的某个特定的目录变成根目录(家目录),所以与该目录没有关系的其他目录就不会被访问了;

vsftpd 这个服务的启动者身份为一般用户,所以对于 Linux 系统的权限较低,对于 Linux 系统的危害就相对的减低了;

绝大部分 ftp 会使用到的额外指令功能 (dir, ls, cd ...) 都已经被整合到 vsftpd 主程序当中了,因此理论上 vsftpd 不需要使用到额外的系统提供的指令,所以在 chroot 的情况下,vsftpd 不但可以顺利运作,且不需要额外功能对于系统来说也比较安全;

vsftpd作为更加安全的文件传输协议服务程序,允许用户以3种认证模式登录FTP服务器

  • 匿名开放模式:是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到FTP服务器。

  • 本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

  • 虚拟用户模式:更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

vsftpd 安装&卸载

  • 查看vsftpd
# 查看 vsftpd 是否已经安装
$ rpm -qa|grep vsftpd
  • vsftpd 安装
# 通过 yum 安装 vsftpd
$ yum install vsftpd -y
  • vsftpd 卸载
# 查看 vsftpd 信息
$ rpm -qa|grep vsftpd
vsftpd-3.0.2-29.el7_9.x86_64

# 通过 rpm -e 卸载 vsftpd
$ rpm -e vsftpd-3.0.2-29.el7_9.x86_64
# 出现以下消息 则手动删除 vsftpd 配置信息
warning: /etc/vsftpd/vsftpd.conf saved as /etc/vsftpd/vsftpd.conf.rpmsave
warning: /etc/vsftpd/user_list saved as /etc/vsftpd/user_list.rpmsave
warning: /etc/vsftpd/ftpusers saved as /etc/vsftpd/ftpusers.rpmsave

# 删除 vsftpd 配置文件
$ rm -rf /etc/vsftpd

vsftpd 配置文件

vsftpd 文件说明

# vsftpd 配置文件
- /etc/vsftpd/vsftpd.conf
- /etc/pam.d/vsftpd
- /etc/vsftpd/ftpusers
- /etc/vsftpd/user_list
- /etc/vsftpd/chroot_list
- /usr/sbin/vsftpd
- /var/ftp/

# vsftpd 文件作用说明
- vsftpd.conf: 核心配置文件, 由此文件衍生出其它配置文件;
- pam.d/vsftpd: 是 vsftpd 使用 PAM 模块时的相关配置文件;
- ftpusers: 是 PAM 模块 (/etc/pam.d/vsftpd) 所指定的那个无法登入的用户配置文件;
- user_list: 是 vsftpd 自定义的抵挡项目;
- chroot_list: 主要功能是可以将某些账号的使用者 chroot 在制定目录下;
- /sbin/vsftpd: vsftpd 的主要执行档;
- /var/ftp/: vsftpd 的预设匿名者登入的根目录;
  • ftpusers&user_list区别
# ftpusers 简介
- ftpusers 不受任何配制项的影响,它总是有效,它是一个黑名单;
- ftpusers 列表中的用户不能访问FTP;
- ftpusers 是vsftpd服务在启动后已经决定的; ftpusers 文件只要存在, 则这个列表里面用户都不能访问FTP; 在 vsftpd.conf 配置中没有参数配置可以控制该文件存放;
- ftpusers: 是一个禁止访问FTP的用户列表;
- ftpusers: 通过限制账号(root、高权限账户)登录FTP, 防止登录账号权限过大, 不受限制下载重要文件;

# user_list 简介
- user_list是 `vsftpd.conf` 配置文件中的 userlist_enable 和 userlist_deny 两个配置相关;
- user_list文件可作为白名单文件使用, 也可作为黑名单文件使用; 具体使 `user_list` 作为白名单还是黑名单 可通过`vsftpd.conf` 配置文件中的 userlist_enable 和 userlist_deny 设置;
- 将 `vsftpd.conf` 配置文件中参数 userlist_deny 设置为 userlist_deny=NO , 那么user_list列表就变成了强制白名单;则只允许user_list文件列表内的用户访问, 拒绝其他人的访问;
- 当且仅当 `userlist_enable=YES` 时, userlist_deny配置项才有效, user_list文件才会被使用;


# 两者联系&区别
- user_list文件用户列表与ftpusers文件中用户列表中内容相同;
- ftpusers和user_list没有任何关系; ftpusers文件总是生效,user_list文件是否生效取决于 vsftpd.conf 文件中userlist_enable 和 userlist_deny 选项;
  • userlist_enable&userlist_deny配置

vsftpd.conf 参数

/etc/vsftpd/vsftpd.conf 本身就是一个挺详细的配置文件,且使用『 man 5 vsftpd.conf 』则可以得到完整的参数说明;这里依旧先对 vsftpd.conf 内的常用参数作说明。

  • 与服务器环境较相关的设定值
  • 与实体用户较相关的设定值
  • 与匿名用户登录相关的设定值
  • 与 vsftpd 系统安全相关的设定值

上面这些是常见的 vsftpd 的设定参数,还有很多参数没有列出来,可以使用 man 5 vsftpd.conf 查阅。

vsftpd 认证模式

vsftpd作为更加安全的文件传输协议服务程序,允许用户以3种认证模式登录FTP服务器。

匿名开放模式:是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到FTP服务器。

本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

虚拟用户模式:更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

匿名开放、本地用户、虚拟用户模式,具体使用哪一种模式直接到以下对应的过程部分配置即可;

匿名开放模式

vsftpd服务程序默认关闭了匿名开放模式,匿名开放模式常用的权限参数以及作用如下所示:

  • 备份 vsftp.conf 文件
$ mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
$ grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
$ cat /etc/vsftpd/vsftpd.conf
  • 配置 vsftpd.conf 文件
$ vi vsftpd.conf
# 与匿名者有关的信息
## 支持匿名者的登入使用 FTP 功能
anonymous_enable=YES

# 与实体用户有关的设定
## 支持本地端的实体用户登入
local_enable=YES
## 允许用户上传数据 (包括文件与目录)
write_enable=YES
## 建立新目录 (755) 与文件 (644) 的权限
local_umask=022

# 与服务器环境有关的设定
## 若目录下有 .message 则会显示该文件的内容
dirmessage_enable=YES
## 启动登录文件记录,记录于 /var/log/xferlog
xferlog_enable=YES
## 支持主动式联机功能
connect_from_port_20=YES
## 支持 WuFTP 的登录档格式
xferlog_std_format=YES
## 使用 stand alone 方式启动 vsftpd
listen=YES
## 支持 PAM 模块的管理
pam_service_name=vsftpd
## 支持 /etc/vsftpd/user_list 档案内的账号登入管控
userlist_enable=YES
## 支持 TCP Wrappers 的防火墙机制
tcp_wrappers=YES

本地用户模式

Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单;本地用户模式常用的权限参数以及作用如下所示:

  • 备份vsftp配置文件
$ mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
$ grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
$ cat /etc/vsftpd/vsftpd.conf
  • 设置SELinux域允许策略
$ getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
# 使vsftpd 具有访问ftp根目录,以及文件传输等权限
$ setsebool -P ftpd_full_access=on
  • 创建 banner.txt 文件&配置 vsftpd.conf 文件
$ touch banner.txt

$ vi vsftpd.conf
# 与匿名者有关的信息
## 取消匿名者的登入功能
anonymous_enable=NO

# 与实体用户有关的设定
## 支持本地端的实体用户登入
local_enable=YES
## 允许用户上传数据 (包括文件与目录)
write_enable=YES
## 建立新目录 (755) 与文件 (644) 的权限
local_umask=022
userlist_enable=YES
userlist_deny=YES
## 该文件必须存在 vsftpd 默认就存在该文件
userlist_file=/etc/vsftpd/user_list

# 与服务器环境有关的设定
## 使用服务器本地时间
use_localtime=YES
## 若目录下有 .message 则会显示该文件的内容
dirmessage_enable=YES
## 启动登录文件记录,记录于 /var/log/xferlog
xferlog_enable=YES
## 支持主动式联机功能
connect_from_port_20=YES
## 支持 WuFTP 的登录档格式
xferlog_std_format=YES
## 使用 stand alone 方式启动 vsftpd
listen=YES
## 支持 PAM 模块的管理
pam_service_name=vsftpd
## 支持 TCP Wrappers 的防火墙机制
tcp_wrappers=YES
## ftp登录界面的 banner 标识 该文件需存在,否则会出错
banner_file=/etc/vsftpd/banner.txt
  • 在以上基础再建立限制系统账号登入
$ vi /etc/vsftpd/user_list
root
......

$ ftp 192.168.188.68
Trying 192.168.188.68...
Connected to localhost (192.168.188.68).
hosystem FTP-banner test;
220
Name (localhost:root): student
331 Please specify the password.
Password:  <==输入密码啰在这里!
500 OOPS: cannot change directory:/home/student  # 出现该错误到问题汇总中寻找答案
Login failed.
ftp> bye
221 Goodbye.

虚拟用户模式

虚拟用户模式是这3种模式中最安全的一种认证模式,是专门创建出一个账号来登录FTP传输服务的,而且这个账号不能用于以SSH方式登录服务器;

  • 备份vsftp配置文件
$ mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
$ grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
$ cat /etc/vsftpd/vsftpd.conf
  • 创建用于进行FTP认证的用户数据库文件
# 创建用于进行FTP认证的用户数据库文件
# 奇数行为账户名, 偶数行为密码
# 该用户不需要
$ vi /etc/vsftpd/vuser.list
ftpuser
ftpuser123.
test
test
  • 原始的明文信息文件转换成数据库文件

由于明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需要使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。

# 明文转密文
$ db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db

# 赋予密文文件权限
$ chmod 600 vuser.db

# 删除明文文件 不强制要求,但推荐删除
$ rm -rf vuser.list
  • 创建vsftpd服务程序用于存储文件的根目录以及用于虚拟用户映射的系统本地用户
# -s /sbin/nologin: 表示virtual禁止通过ssh登录
$ useradd -d /var/ftproot -s /sbin/nologin virtual
$ ls -ld /var/ftproot/
$ chmod -Rf 755 /var/ftproot/
  • 建立用于支持虚拟用户的PAM文件

新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀。

$ vi /etc/pam.d/vsftpd.vu
auth       required     pam_userdb.so db=/etc/vsftpd/vuser
account    required     pam_userdb.so db=/etc/vsftpd/vuser
  • 在vsftpd服务程序的主配置文件中通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu
$ vi /etc/vsftpd/vsftpd.conf
# 重要!!!!!!
## 禁止匿名开放模式
anonymous_enable=NO
## 允许本地用户模式
local_enable=YES
## 设置可写权限
write_enable=YES
## 开启虚拟用户模式
guest_enable=YES
## 指定虚拟用户账户
guest_username=virtual
## 允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
allow_writeable_chroot=YES
## 指定PAM文件
pam_service_name=vsftpd.vu

# 本地用户模式创建文件的umask值
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
userlist_enable=YES

# user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径
user_config_dir=/etc/vsftpd/vusers_dir
  • 为虚拟用户设置不同的权限
# 创建 vusers_dir 目录
$ mkdir /etc/vsftpd/vusers_dir/

# 创建 ftpuser 用户
$ vi /etc/vsftpd/vusers_dir/ftpuser
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

# 创建 test 用户
$ touch /etc/vsftpd/vusers_dir/test
  • 设置SELinux域允许策略,然后使用虚拟用户模式登录FTP服务器
$ getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off

# 使vsftpd 具有访问ftp根目录,以及文件传输等权限
$ setsebool -P ftpd_full_access=on
  • 登录
$ ftp ip
连接到 192.168.188.68。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.188.118:(none)): test
331 Please specify the password.
密码: test
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

vsftpd 配置模板

vsftpd 基础模板

该配置模板,可实现 vsftpd 以下功能:

- 可以使用 anonymous 这个匿名账号或其他实体账号 (/etc/passwd) 登入;
- anonymous 的家目录在 /var/ftp ,且无上传权限,亦已经被 chroot 了;
- 实体用户的家目录参考 /etc/passwd,并没有被 chroot,可前往任何有权限可进入的目录中;
- 任何于 /etc/vsftpd/ftpusers 内存在的账号均无法使用 vsftpd (PAM);
- 可利用 /etc/hosts.{allow|deny} 来作为基础防火墙;
- 当客户端有任何上传/下载信息时,该信息会被纪录到 /var/log/xferlog 中;
- 主动式联机的埠口为 port 20;
- 使用格林威治时间 (GMT)。

配置 vsftpd.conf 文件

# 与匿名者有关的信息
anonymous_enable=YES

# 与实体用户有关的设定
local_enable=YES
write_enable=YES
local_umask=022

# 与服务器环境有关的设定
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

vsftpd 实体限制模板

该配置模板,可实现 vsftpd 以下功能:

- 希望使用本地时间取代 GMT 时间;
- 用户登入时显示一些欢迎讯息的信息;
- 系统账号不可登入主机 (亦即 UID 小于 500 以下的账号);
- 一般实体用户可以进行上传、下载、建立目录及修改档案等动作;
- 用户新增的档案、目录之 umask 希望设定为 002;
- 存在 user_list 和 ftpusers 文件中的用户 `不可登录` FTP;
- 其他主机设定值保留默认值即可。

配置 vsftpd.conf 文件

# 与匿名者有关的信息
## 取消匿名者的登入功能
anonymous_enable=NO

# 与实体用户有关的设定
## 支持本地端的实体用户登入
local_enable=YES
## 允许用户上传数据 (包括文件与目录)
write_enable=YES
## 建立新目录 (755) 与文件 (644) 的权限
local_umask=022
userlist_enable=YES
userlist_deny=YES
## 该文件必须存在 vsftpd 默认就存在该文件
userlist_file=/etc/vsftpd/user_list

# 与服务器环境有关的设定
## 使用服务器本地时间
use_localtime=YES
## 若目录下有 .message 则会显示该文件的内容
dirmessage_enable=YES
## 启动登录文件记录,记录于 /var/log/xferlog
xferlog_enable=YES
## 支持主动式联机功能
connect_from_port_20=YES
## 支持 WuFTP 的登录档格式
xferlog_std_format=YES
## 使用 stand alone 方式启动 vsftpd
listen=YES
## 支持 PAM 模块的管理
pam_service_name=vsftpd
## 支持 TCP Wrappers 的防火墙机制
tcp_wrappers=YES

vsftpd 仅匿名登录相关设定

该配置模板,可实现 vsftpd 以下功能:

- 使用本地的时间, 而非 GMT 时间;
- 提供欢迎讯息, 说明可提供下载的信息;
- 仅开放 anonymous 的登入, 且不需要输入密码;
- 文件传输的速限为 1 Mbytes/second;
- 数据连接的过程 (不是命令通道!) 只要超过 60 秒没有响应, 就强制 Client 断线!
- 只要 anonymous 超过十分钟没有动作, 就予以断线;
- 最大同时上线人数限制为 50 人, 且同一 IP 来源最大联机数量为 5 人;
- 预设的 FTP 匿名者的根目录所在: ftp 账号的家目录。

配置 vsftpd.conf 文件

# 与匿名者有关的信息
## 支持匿名者的登入使用 FTP 功能
anonymous_enable=YES

# 与实体用户有关的设定
## 支持本地端的实体用户登入
local_enable=YES
## 允许用户上传数据 (包括文件与目录)
write_enable=YES
## 建立新目录 (755) 与文件 (644) 的权限
local_umask=022

# 与服务器环境有关的设定
## 若目录下有 .message 则会显示该文件的内容
dirmessage_enable=YES
## 启动登录文件记录,记录于 /var/log/xferlog
xferlog_enable=YES
## 支持主动式联机功能
connect_from_port_20=YES
## 支持 WuFTP 的登录档格式
xferlog_std_format=YES
## 使用 stand alone 方式启动 vsftpd
listen=YES
## 支持 PAM 模块的管理
pam_service_name=vsftpd
## 支持 /etc/vsftpd/user_list 档案内的账号登入管控
userlist_enable=YES
## 支持 TCP Wrappers 的防火墙机制
tcp_wrappers=YES

问题汇总

问题一:

问题描述:

vsftpd搭建完成后,通过cmd可以连接;通过xftp软件连接就出现无法显示远程文件夹

问题原因:

FTP协议有两种工作模式,一种是主动模式、另外一种是被动模式。搭建过程中,工作模式和xftp连接模式不一致导致。

问题解决:

  • 方式一:
将配置改成相反模式;如,主动模式就改为被动模式;被动模式就改为主动模式
  • 方式二:
再xftp属性中选项,将连接的方式勾选项去掉

问题二:

问题描述:

vsftpd.conf 配置完成后,通过 systemctl start vsftpd 启动 vsftpd 服务,出现以下错误信息:

Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details.

通过 systemctl status vsftpd 查看错误信息:

$ systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2022-08-24 23:35:16 CST; 20s ago
  Process: 21696 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=1/FAILURE)

Aug 24 23:35:13 node1.hos.cn systemd[1]: Starting Vsftpd ftp daemon...
Aug 24 23:35:16 node1.hos.cn systemd[1]: vsftpd.service: control process exited, code=exited status=1
Aug 24 23:35:16 node1.hos.cn systemd[1]: Failed to start Vsftpd ftp daemon.
Aug 24 23:35:16 node1.hos.cn systemd[1]: Unit vsftpd.service entered failed state.
Aug 24 23:35:16 node1.hos.cn systemd[1]: vsftpd.service failed.

问题原因:

通过 netstat -natp|grep 21 检查端口情况,发现端口可能被占用了;

问题解决:

通过 netstat -natp|grep 21 查询进程pid,通过 kill -9 pid 进行关闭;

$ netstat -natp|grep 21
tcp6       0      0 :::21                   :::*                    LISTEN      21158/vsftpd

$ kill -9 21158

问题三:

问题描述:

vsftpd搭建完成后,通过ftp连接;发现上传文件的时间都会比本地时间慢八个小时。

问题原因:

vsftpd.conf 文件中,没有配置使用本地时间;vsftpd.conf 默认使用格林威治时间(GMT)。

问题解决:

vsftpd.conf文件中,加入参数 use_localtime=YES 使用本地时间即可;

$ vi /etc/vsftpd/vsftpd.conf
......
use_localtime=YES

$ systemctl restart vsftpd

问题四:

问题描述:

在 vsftpd 搭建完成后,通过ftp命令方式连接;发现ftp连接失败,且出现以下错误信息:

$ ftp 192.168.188.68
连接到 192.168.188.68。
500 OOPS: cannot read banner file:/etc/vsftpd/welcome.txt
远程主机关闭连接。

问题原因:

在配置 vsftpd.conf 时,使用了 banner_file=/etc/vsftpd/banner.txt 参数,但是 banner.txt 文件并不存在;导致通过命令方式连接ftp时出现错误;

问题解决:

banner_file=/etc/vsftpd/banner.txt 指定路径下创建 banner.txt 并重启 vsftpd 服务;

$ vi /etc/vsftpd/banner.txt
hosystem FTP-banner test;

$ systemctl restart vsftpd

$ ftp 192.168.188.68
连接到 192.168.188.68;
220-hosystem FTP-banner test;
220
200 Always in UTF8 mode.

问题五:

问题描述:

vsftpd.conf 配置中,使用本地用户模式;发现登录FTP时,出现以下错误信息:

Connected to 192.168.188.68 (192.168.188.68).
220 (vsFTPd 3.0.2)
Name (192.168.188.68:root): root
530 Permission denied.
Login failed.
ftp>

问题原因:

  • 原因一:user_list 和 ftpuser 共同作用限制了登录账户;

  • 原因二:登录FTP账户的 shell 被定向为/sbin/nologin

$ cat /etc/passwd
test:x:1003:1003::/var/ftproot/:/sbin/nologin

问题解决:

  • 方法一:添加 /sbin/nologin/etc/shells 文件中
$ echo "/sbin/nologin" >> /etc/shells
  • 方法二:修改 /etc/pam.d/vsftpd 文件
$ vi /etc/pam.d/vsftpd
...
# 方式一: 将 auth required pam_shells.so 注释掉
#auth required pam_shells.so

# 方式二: 将 auth required pam_shells.so 修改为 auth required pam_nologin.so
auth required pam_nologin.so
...

参考文档

vsftpd官方文档 - 点我传送

vsftpd.conf官方文档 - 点我传送

08-27 11:52