Centos7 vsftpd实战

参考:Centos 7使用vsftpd搭建FTP服务器

 

概述


 

FTP,即:文件传输协议(File Transfer Protocol),基于客户端/服务器模式,默认使用20、21端口号,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数。

FTP服务器普遍部署于局域网中,具有容易搭建、方便管理的特点。而且有些FTP客户端工具还可以支持文件的多点下载以及断点续传技术,因此FTP服务得到了广大用户的青睐。

 

FTP协议有以下两种工作模式:

  • 主动模式(PORT):FTP服务器主动向客户端发起连接请求。
  • 被动模式(PASV):FTP服务器等待客户端发起连接请求(FTP的默认工作模式)。

 

Linux下FTP Server评估(vsftpd、pure-ftpd、proftpd)

vsftpd是一款运行在Linux操作系统上的FTP服务程序,具有很高的安全性和传输速度。

 

 

vsftpd


  

vsftpd有以下三种认证模式:

  • 匿名开放模式:
    •   是一种最不安全的认证模式,任何人都可以无需密码验证而直接登陆。
  • 本地用户模式:
    •   是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来简单。
  • 虚拟用户模式:
    •   是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。

 

常用参数

 

安装

yum -y install vsftpd

 

去掉配置里的注释行

mv /etc/vsftpd/vsftpd.conf vsftpd.conf.bak
grep -v "#" /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf

 

实战


  

为了方便测试,可以关闭防火墙和selinux

 

匿名模式

配置文件

# FTP监听端口
listen_port=2231
# 最大客户端连接数
max_clients=10
# 同一IP最大连接数
max_per_ip=4
# 用户会话的空闲中断时间(秒)
idle_session_timeout=300

# 启用匿名访问模式
anonymous_enable=YES
# 匿名用户上传文件的umask值
anon_umask=022
# 允许匿名用户上传文件
anon_upload_enable=YES
# 允许匿名用户下载文件
download_enable=YES
# 允许匿名用户创建目录
anon_mkdir_write_enable=NO
# 允许匿名用户重命名、删除等操作
anon_other_write_enable=YES
# 匿名用户的FTP根目录
anon_root=/var/ftp

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=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

 

创建匿名用户根目录并开启服务

mkdir -p /var/ftp/pub
chmod 777 /var/ftp/pub
systemctl start vsftpd

 

分享目录

因为要分享的目录不一定在根目录下,所以通过mount --bind来实现类似软链接的功能

mount --bind /mnt/xfs1/share1/ xfs1-share1/
mount --bind /mnt/xfs1/share2/ xfs1-share2/
mount --bind /mnt/xfs2/share1/ xfs2-share1/

 

测试

linux端

[root@N131 ~]# ftp 192.168.1.130 2231
Connected to 192.168.1.130 (192.168.1.130).
220 (vsFTPd 3.0.2)
Name (192.168.1.130:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,130,33,20).
150 Here comes the directory listing.
drwxrwxrwx    5 0        0              63 Oct 13 01:33 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,1,130,103,94).
150 Here comes the directory listing.
drwxrwxrwx    2 0        0               6 Oct 13 01:49 xfs1-share1
drwxrwxrwx    2 0        0               6 Oct 13 01:46 xfs1-share2
drwxrwxrwx    2 0        0               6 Oct 13 01:11 xfs2-share1
226 Directory send OK.
ftp> cd xfs1-share1
250 Directory successfully changed.
ftp> mkdir files
257 "/pub/xfs1-share1/files" created
ftp> dir
227 Entering Passive Mode (192,168,1,130,40,191).
150 Here comes the directory listing.
drwxr-xr-x    2 14       50              6 Oct 13 01:55 files
226 Directory send OK.
ftp> rmdir files
250 Remove directory operation successful.
ftp> exit
221 Goodbye.

 

 

windows端使用FileZilla测试,输入主机和端口后快速连接

 

 

 

本地用户模式

 配置

listen_port=2231
max_clients=10
max_per_ip=4
idle_session_timeout=300

# 关闭匿名访问模式
anonymous_enable=NO
# 指定本地用户的FTP根目录
local_root=/var/ftp
# 将用户权限禁锢在FTP目录
chroot_local_user=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=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

 

创建本地用户

 

测试

 

 

 

 

虚拟用户模式

 创建用于FTP认证的用户数据库文件

第一行用户名,第二行密码,以此类推

明文信息不安全,需要使用db_load命令用哈希(hash)算法将明文信息转换成数据文件,然后将明文信息文件删除

  

[root@localhost vsftpd]# vi /etc/vsftpd/vuser.txt
[root@localhost vsftpd]# cat /etc/vsftpd/vuser.txt 
lilei
123456
hanmeimei
654321
[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
[root@localhost vsftpd]# chmod 600 /etc/vsftpd/vuser.db
[root@localhost vsftpd]# rm -f /etc/vsftpd/vuser.txt

 

 创建虚拟用户映射的系统本地用户

useradd -s /sbin/nologin virftp

 

建立用于支持虚拟用户的PAM文件

PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。

[root@localhost vsftpd]# vi /etc/pam.d/vsftpd.vu 
[root@localhost vsftpd]# cat /etc/pam.d/vsftpd.vu 
auth     required     pam_userdb.so  db=/etc/vsftpd/vuser
account  required     pam_userdb.so  db=/etc/vsftpd/vuser

 

配置文件

listen_port=2231
max_clients=10
max_per_ip=4
idle_session_timeout=300

anonymous_enable=NO
anon_umask=022
anon_upload_enable=YES
anon_world_readable_only=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_root=/var/ftp

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=NO
listen_ipv6=YES

# 开启虚拟用户模式
guest_enable=YES
# 指定虚拟用户对应的系统用户
guest_username=virftp
# 指定PAM文件
pam_service_name=vsftpd.vu
# 指定虚拟用户配置文件目录
user_config_dir=/etc/vsftpd/vusers_dir
# 允许对FTP根目录执行写入操作
allow_writeable_chroot=YES
userlist_enable=YES
tcp_wrappers=YES

 

为虚拟用户设置不同的权限

[root@localhost vsftpd]# cd vusers_dir/
[root@localhost vusers_dir]# vi lilei
[root@localhost vusers_dir]# vi hanmeimei 
[root@localhost vusers_dir]# cat lilei 
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO
download_enable=NO
local_root=/var/ftp/pub/xfs1-share1
[root@localhost vusers_dir]# cat hanmeimei 
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
download_enable=YES
local_root=/var/ftp/pub/xfs1-share2

 

测试

lilei根目录为/var/ftp/pub/xfs1-share1,拥有上传和创建目录权限,不能删除和下载

 

 

hanmeimei拥有所有权限

 

posted @ 2020-10-13 10:48  陆小呆  阅读(498)  评论(0编辑  收藏  举报