目录

vsftpd安装以及使用

ftp安装

1
2
[root@ftp ~]# yum -y install vsftpd

关闭防火墙以及selinux

1
[root@ftp ~]# sed -ri 's/(SELINUX=).*/\1disabled/g' /etc/selinux/config && setenforce 0 && systemctl disable --now firewalld 

配置

FTP 分为两类:

  • PORT FTP
  • PASV FTP

PORT FTP是一般形式的FTP。这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过 此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp- data)的方式。PORT FTP由FTP服务器指定数据传输所使用的端口,默认值为20。PASV FTP由FTP客户端决定数据传输的端口。 PASV FTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数 据传输端口更为方便一些。

配置讲解

  • port_enable=YES|NO

如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES。

  • connetc_from_port_20=YES|NO

控制以PORT模式进行数据传输时是否使用20端口(ftp-data)。YES使用,NO不使用。默认值为NO,但RHL自带的vsftpd.conf文件中此参数设为YES。

  • ftp_data_port=port number

设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。

  • port_promiscuous=YES|NO

默认值为NO。为YES时,取消PORT安全检查。该检查确保外出的数据只能连接到客户端上。小心打开此选项。

  • pasv_enable=YES|NO

YES,允许数据传输时使用PASV模式。NO,不允许使用PASV模式。默认值为YES。

  • pasv_min_port=port number | pasv_max_port=port number

设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意。默认值为0。把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高。

  • pasv_promiscuous=YES|NO

此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。

  • pasv_address=

此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取。

所以如果linux打开了防火场,必须开通对应的端口 例如:

1
-A INPUT -m state --state NEW -p tcp -m tcp --dport 30000:31000 --syn -j ACCEPT

具体配置文件,注意所有配置项后面不要有空格

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
[root@ftp vconf]# cat /etc/vsftpd/vsftpd.conf
#不允许匿名访问
anonymous_enable=NO
#允许本地用户访问,注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问 
local_enable=YES
#是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
write_enable=YES
#掩码值
local_umask=022
#限制匿名用户上传以及写入
anon_upload_enable=NO
anon_world_readable_only=NO
anon_mkdir_write_enable=NO

# 是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_local_user=YES
#限制chroot,设置为 NO 时,用户登录FTP服务器后具有访问自己目录以外的其他文件的权限, 设置为 YES 时 , 用户被锁定在自己的 home 目录中,vsftpd将在下面 chroot_list_file选项值的位置寻找 chroot_list文件,此文件需用户建立,再将需锁定在自己home目录的用户列入其中,每行一个用户
chroot_list_enable=YES
# 此文件需自己建立 , 被列入此文件的用户 , 在登录后将不能切换到自己目录以外的其他目录 , 由 FTP 服务器自动地 chrooted 到用户自己的home目录下,使得 chroot_list文件中的用户不能随意转到其他用户的FTP home目录下,从而有利于FTP服务器的安全管理和隐私保护
chroot_list_file=/etc/vsftpd/chroot_list

ascii_upload_enable=YES
##设定支持ASCII模式的上传和下载功能
ascii_download_enable=YES
#PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证
pam_service_name=vsftpd
#下面的配置在conf中手动添加,设定启用虚拟用户功能
guest_enable=YES
# //指定虚拟用户的宿主用户
guest_username=vsftpd
allow_writeable_chroot=YES
#设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。
user_config_dir=/etc/vsftpd/vconf


#当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
virtual_use_local_privs=YES

#是否激活目录欢迎信息功能 默认情况下,欢迎信息是通过该目录下的.message文件获得的 此文件保存自定义的欢迎信息,由用户自己建立
dirmessage_enable=YES

#登陆提示信息
ftpd_banner=Welcom to  FTP server

#是否让系统自动维护上传和下载的日志文件  默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定  默认值为NO
xferlog_enable=YES
#是否以标准xferlog的格式书写传输日志文件 默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定 默认值为NO
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log


#Make sure PORT transfer connections originate from port 20 (ftp-data). 是否设定FTP服务器将启用FTP数据端口的连接请求 ftp-data数据传输,21为连接控制端口
connect_from_port_20=NO

#设定是否允许 改变 上传文件的属主 , 与chown_username=whoeve项配合使用 ,whoever:任何人
chown_uploads=NO

#大多数 FTP 服务器都选择用 ASCII 方式传输数据 , 用 ASCII 方式上传和下载文件 
ascii_upload_enable=YES
ascii_download_enable=YES

#另外,从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报错误。要修复这个错误可以在vsftpd的配置文件中增加下列项
allow_writeable_chroot=YES


# 如果设置为 YES , 则 vsftpd 将以独立模式运行,由vsftpd自己监听和处理连接请求
listen=YES
# 监听端口
listen_port=21
#不使用ipv6
listen_ipv6=NO
#此选项默认值为NO ,此时ftpusers文件中的用户禁止登录FTP服务器;若此项设为YES,则 user_list文件中的用户允许登录   FTP服务器,而如果同时设置了 userlist_deny=YES ,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有,直接被FTP服务器拒绝
userlist_enable=YES
#此项默认为YES,设置是否阻扯user_list文件中的用户登录FTP服务器
userlist_deny=YES

#表明服务器使用 tcp_wrappers 作为主机访问控制方式,tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制,在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制,前者设置允许访问记录,后者设置拒绝访问记录。例如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow 文件,如在下面增加两行命令:vsftpd:192.168.57.1DENY 和vsftpd:192.168.57.9DENY 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.116.90的FTP服务器,此时FTP服务器虽可以PING通,但无法连接
tcp_wrappers=YES


#允许数据传输时使用PASV模式
pasv_enable=YES
#PASV模式地址
pasv_address=192.168.116.90
# 关闭port模式
port_enable=NO
pasv_min_port=65500
pasv_max_port=65535
#接收超时时间
accept_timeout=30
#连接超时时间
connect_timeout=2
#不查找dns服务器
reverse_lookup_enable=NO



后续操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#创建用户,新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统)
[root@ftp ~]# useradd vsftpd -d /home/wwwroot -s /bin/false

#建立虚拟用户名单
[root@ftp ~]# touch /etc/vsftpd/virtusers

#添加用户,第一行账号,第二行密码,注意:不能使用root做用户名,系统保留
[root@ftp ~]# cat /etc/vsftpd/virtusers
xieys
111111

#生成虚拟用户数据文件
[root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
-T允许应用程序能够将文本文件转译载入进数据库。
-t hash使用hash码加密
-f 指定包含用户名和密码文本文件。此文件格式要示:奇数行用户名、偶数行密码

#修改认证方式,修改/etc/pam.d/vsftpd配置文件,注意:如果系统为32位,lib64改为lib,否则配置不生效。
[root@ftp ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session    optional     pam_keyinit.so    force revoke
#auth       required	pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required	pam_shells.so
#auth       include	password-auth
#account    include	password-auth
#session    required     pam_loginuid.so
#session    include	password-auth
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

#建立虚拟用户个人Vsftp的配置文件,建立目录
[root@ftp ~]# mkdir /etc/vsftpd/vconf
[root@ftp ~]# cd /etc/vsftpd/vconf

#编辑虚拟用户配置文件,配置文件名必须为虚拟用户名
[root@ftp vconf]# cat xieys 
#设置用户目录
local_root=/home/wwwroot/xieys/
#设置上传文件的权限,掩码表示
anon_umask=022
#其他设置
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

[root@ftp vconf]# touch /var/log/vsftpd.log
[root@ftp vconf]# chown vsftpd.vsftpd /var/log/vsftpd.log

[root@ftp vconf]# mkdir /home/wwwroot/xieys
[root@ftp vconf]# chown vsftpd.vsftpd /home/wwwroot/xieys
[root@ftp vconf]# touch /etc/vsftpd/chroot_list

[root@ftp vconf]# systemctl restart vsftpd