• 1.安装

查看是否安装了FTP:rpm -qa|grep vsftpd
安装:yum -y install vsftpd
chkconfig vsftpd on

启动vsftpd: systemctl start vsftpd.service

vsftpd几种用户:本地用户、虚拟用户、匿名用户。

主动模式、被动模式:

PORT主动 FTP模式:
命令连接:客户端>1024端口 -> 服务器21端口
数据连接:客户端>1024端口 <- 服务器20端口

PASV被动 FTP模式:
命令连接:客户端>1024端口 -> 服务器21端口
数据连接:客户端>1024端口 <- 服务器>1024端口

文件说明:
ll /etc/vsftpd/ftpusers:指定哪些用户账号不能访问FTP服务器,如root等。
ll /etc/vsftpd/user_list:该文件里用户账号默认情况下不能访问FTP服务器,仅当vsftpd.conf配置文件里启用userlist_enabled=NO选项时才允许访问。

  • 2.配置

vsftpd 虚拟用户配置说明。

cat /etc/vsftpd/vsftpd.conf

anonymousenable=NO  #设定不允许匿名访问
localenable=YES   #设定本地用户可以访问。注意:主要是为虚拟宿主用户,如果该项目设定为NO,所有虚拟用户将无法访问。
writeenable=YES   #设定可以进行写操作。
localumask=022    #设定上传后文件的权限掩码。
anonuploadenable=NO  #禁止匿名用户上传。
anonmkdirwriteenable=NO  #禁止匿名用户建立目录。
dirmessageenable=YES    #设定开启目录标语功能。
xferlogenable=YES  #设定开启日志记录功能。
connectfromport20=YES  #设定端口20进行数据连接。
chownuploads=NO   #设定禁止上传文件更改宿主。
xferlogfile=/var/log/vsftpd.log  #设定Vsftpd的服务日志保存路径。
xferlogstdformat=YES  #设定日志使用标准的记录格式。
asyncaborenable=YES  #设定支持异步传输功能。
asciiuploadenable=YES
asciidownloadenable=YES
#设定支持ASCII模式的上传和下载功能。
ftpdbanner=This Vsftp server supports virtual users ^^  #设定Vsftpd的登陆标语。
chrootlistenable=NO  #禁止用户登出自己的FTP主目录。
lsrecurseenable=NO  
#禁止用户登陆FTP后使用"ls -R"的命令。该命令会对服务器性能造成巨大开销。如果该项被允许,那么当多用户同时使用该命令时将会对该服务器造成威胁。
listen=YES   #设定该Vsftpd服务工作在StandAlone模式下。
pamservicename=vsftpd   #设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
userlistenable=YES  #设定userlistfile中的用户将不得使用FTP。
tcpwrappers=YES  #设定支持TCP Wrappers
#pasvpromiscuous=yes  #关闭ftp被动模式PASV的安全检查。
chrootlocaluser=yes  #将所有用户限制在主目录。ftp用户不可以向上切换到其他目录之外
chrootlistenable  #是否启动限制用户的名单/etc/vsftpd/chrootlist 。 YES为启用,则/etc/vsftpd/chrootlist文件用户不受限制。 NO禁用(包括注释掉也为禁用)
chrootlistfile=/etc/vsftpd/chrootlist  #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chrootlocaluser的值。
allowwriteablechroot=YES  #vsftpd在2.3.5之后,vsftpd为真强安全检查,如果用户被限制在其主目录下,则该用户的主目录下不再具有写权限。如发现写权限,就会报错误。修复错误一个方法是增加vsftpd.conf配置文件加allowwriteablechroot=YES。

#以下关于Vsftpd虚拟用户支持的重要配置项目,需要自己手动添加配置
guestenable=YES   #设定启用虚拟用户功能。
guestusername=ftpuser   #指定虚拟用户的宿主用户。
virtualuselocalprivs=YES   #设定虚拟用户权限与本都用户一样权限。
#pamservicename=vsftpd  #虚拟用户启用pam认证
userconfigdir=/etc/vsftpd/vuserconf    #设定虚拟用户配置文件所在目录*
  • 3.添加FTP账号用户,创建宿主用户
    useradd ftpuser -d /home/vsftpd -s /sbin/nologin
    chown ftpuser:ftpuser /data/vsftpd -R

建虚拟用户文件:

cat  /etc/vsftpd/vftpuser
test
test@123

生成虚拟用户数据文件:

db_load -T -t hash -f /etc/vsftpd/vftpuser /etc/vsftpd/vftpuser.db
chmod 600 /etc/vsftpd/vftpuser.db

配置pam认证文件:

cat /etc/pam.d/vsftpd 
#%PAM-1.0
auth      required      pam_userdb.so  db=/etc/vsftpd/vftpuser
account  required       pam_userdb.so  db=/etc/vsftpd/vftpuser

创建用户配置:
ll /data/vsftpd/
drwxrwxrwx 3 ftpuser ftpuser 4096 2月 1 17:26 test

编辑每个虚拟用户配置文件:

cat /etc/vsftpd/vuser_conf/test
local_root=/data/vsftpd/test
anon_world_readable_only=no
write_enable=yes
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes

创建用户目录
mkdir -p /data/vsftpd/test

重启vsftpd: systemctl start vsftpd.service

  • 4.测试

本地ftp测试:

ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>