查看是否安装 rpm -qa|grep vsftpd
yum -y install vsftpd
/etc/vsftpd/vsftpd.conf #主配置文件
/usr/sbin/vsftpd #主程序
/etc/vsftpd/ftpusers #FTP用户黑名单
/etc/vsftpd/user_list #控制用户登录
/var/ftp #匿名用户主目录
anonymous_enable=YES #是否启用匿名用户
anon_upload_enable=NO #是否允许匿名用户上传文件
anon_mkdir_write_enable=NO #是否允许匿名用户创建文件夹
local_enable=YES #是否允许本地用户
write_enable=YES #是否允许本地用户具有写权限
local_umask=022 #本地用户掩码 777-022 755默认权限
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ftpd_banner=Welcome to blah FTP service. dongyanming
chroot_local_user=YES
chroot_list_enable=YES #锁定用户在自己的家目录
chroot_list_file=/etc/vsftpd/chroot_list #此文件中的用户将启用chroot!
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_enable=YES #NO时, user_list文件不生效
#YES时 userlist_deny=YES时: user_list 和 ftpusers 同为黑名单
# user_list文件中的用户不能登录FTP,列表外的用户可以登录。
# userlist_deny=NO时: user_list中用户可以登录,列表外不可以登录
userlist_deny=YES
#userlist_file=/etc/vsftpd/vsftpd.user_list
======================================================================
这里是用CentOS7.0来进行配置的,和其他不同的版本号大同小异,仅仅是在此做一个记录,方便自己查看的同时也能够分享出来给有需要的人看看
1、配置防火墙,开启所需端口
7.0使用的防火墙是firewall,我改成用iptables作为防火墙
(1)关闭firewall:
systemctl stop firewalld.service
#停止firewall
systemctl disable firewalld.service
#禁止firewall开机启动
(2)安装iptables防火墙
yum install iptables-services
#安装
vi /etc/sysconfig/iptables
#编辑防火墙配置文件
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10060:10090 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq!
#保存退出
systemctl restart iptables.service
#最后重启防火墙使配置生效
systemctl enable iptables.service
#设置防火墙开机启动
说明:21端口是ftp服务端口;10060到10090是Vsftpd被动模式需要的端口,可自定义一段大于1024的tcp端口。
2、关闭selinux
vi /etc/selinux/config
#SELINUX=enforcing
#注释掉
#SELINUXTYPE=targeted
#注释掉
SELINUX=disabled
#增加
:wq! #保存退出
setenforce 0 #使配置立即生效
3、安装vsftp
yum install -y vsftpd
#安装vsftpd
yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI
#安装vsftpd虚拟用户配置依赖包
systemctl start vsftpd.service
#启动
systemctl enable vsftpd.service
#设置vsftpd开机启动
4、配置vsftp
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-bak
#备份默认配置文件
执行以下命令进行设置
sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#anon_upload_enable=YES/anon_upload_enable=NO/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#anon_mkdir_write_enable=YES/anon_mkdir_write_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#chown_uploads=YES/chown_uploads=NO/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#async_abor_enable=YES/async_abor_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#ascii_upload_enable=YES/ascii_upload_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#ascii_download_enable=YES/ascii_download_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#ftpd_banner=Welcome to blah FTP service./ftpd_banner=Welcome to FTP service./g" '/etc/vsftpd/vsftpd.conf'
echo -e "use_localtime=YES\nlisten_port=21\nchroot_local_user=YES\nidle_session_timeout=300
\ndata_connection_timeout=1\nguest_enable=YES\nguest_username=vsftpd
\nuser_config_dir=/etc/vsftpd/vconf\nvirtual_use_local_privs=YES
\npasv_min_port=10060\npasv_max_port=10090
\naccept_timeout=5\nconnect_timeout=1" >> /etc/vsftpd/vsftpd.conf
5、建立虚拟用户文件
touch /etc/vsftpd/virtusers
编辑虚拟用户名单文件:(第一行账号,第二行密码,注意:不能使用root做用户名,系统保留)
vi /etc/vsftpd/virtusers
web1
123456
web2
123456
web3
123456
:wq!
#保存退出
6、生成虚拟用户数据文件
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
chmod 600 /etc/vsftpd/virtusers.db
#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
7、在/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效)
修改前先备份 cp /etc/pam.d/vsftpd /etc/pam.d/vsftpdbak
vi /etc/pam.d/vsftpd
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
注意:如果系统为32位,上面改为lib,否则配置失败
8、新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统)
useradd vsftpd -d /home/wwwroot -s /bin/false
chown vsftpd:vsftpd /home/wwwroot -R
chown www:www /home/wwwroot -R
#如果虚拟用户的宿主用户为www,需要这样设置。
9、建立虚拟用户个人Vsftp的配置文件
mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
touch web1 web2 web3
#这里创建三个虚拟用户配置文件
mkdir -p /home/wwwroot/web1/http/
vi web1
#编辑用户web1配置文件,其他的跟这个配置文件类似
local_root=/home/wwwroot/web1/http/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
10、最后重启vsftpd服务器
systemctl restart vsftpd.service
备注:
guest_username=vsftpd #指定虚拟用户的宿主用户(就是我们前面新建的用户)
guest_username=www
#如果ftp目录是指向网站根目录,用来上传网站程序,可以指定虚拟用户的宿主用户为nginx运行账户www,可以避免很多权限设置问题
========================================================================
这里是对vsftp配置文件的详细解释,主要参考了《RedHat8.0网络服务》一书中《使用vsftpd架设FTP服务器》一节的内容。
一、vsftpd简介
除了安全、高速、稳定之外,vsftpd还具有如下的特性:
支持基于IP的虚拟FTP服务器
支持虚拟用户
支持PAM或xinetd / tcp_wrappers的认证方式
支持两种运行方式:独立和Xinetd
支持每个虚拟用具有独立的配置
支持带宽限制等
/etc/vsftpd.ftpusers
/etc/vsftpd.user_list
二、vsftpd的默认主配置文件
anonymous_enable=YES
//允许本地用户登录
local_enable=YES
//开放本地用户的写权限
write_enable=YES
//设置本地用户的文件生成掩码为022,默认值为077
local_umask=022
//当切换到目录时,显示该目录下的.message隐含文件的内容
//这是由于默认情况下有message_file=.message的 设置
dirmessage_enable=YES
//激活上传和下载日志
xferlog_enable=YES
//启用FTP数据端口的连接请求
connect_from_port_20=YES
//使用标准的ftpd xferlog日志格式
xferlog_std_format=YES
//设置PAM认证服务的配置文件名称,该文件存放 在/etc/pam.d/目录下
#pam_service_name=vsftpd
三、进一步配置vsftpd
为了使匿名用户能够上传,需要在/etc/vsftpd中激活两个配置选项,分别是:
//允许匿名用户上传
anon_mkdir_write_enable=YES
//开 启匿名用户的写和创建目录的权限
若要以上两项设置生效,同时还要求:
//匿名用户对文件系统的上传目录具有写权限
//上面的配置语句用于放开匿名用户的浏览权限
默认情况下,vsftpd为了安全,禁止了ASCII传输方式。虽然在ftp客户软件中可以使用asc命 令,但是传输文件时仍然使用二进制传输方式。可以分别启用上传和下载的ASCII传输方式,方法是编辑/etc/vsftpd配置文件,将如下两 行前的#去掉即可 启用:
#ascii_download_enable=YES
为了使用户连接服务器后显示信息,vsftpd提供了两个选项,分别是:
banner_file
也可以设置如下的banner_file选项的值:
注意:(1)如果设置了ftpd_banner的值,将覆盖vsftpd默认的服务器连接后的信息。
(2)如果ftpd_banner和banner_file同时设置,那么banner_file将覆盖ftpd_banner的设置。
//设置空闲的用户会话的中断时间
例如下面的配置:
例如下面的配置:
例如下面的配置:
connect_timeout=60
例如下面的配置:
anon_max_rate=30000
例如下面的配置:
pasv_max_port=60000
在 默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围内进行下载和上传。这样的设置对于一个FTP服务器来说是不安全的。如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot选项,涉及如下选项:
chroot_list_enable
chroot_list_file
(1)设置对所有的本地用户执行chroot(即活动范围限制在自家目录)只要将chroot_local_user的值设 为YES即可, 即:
chroot_list_enable=YES
chroot_list_file= /etc/vsftpd.chroot_list
注意 :上面所提及的文件/etc/vsftpd.chroot_list和下面将要提及的文件 /etc/vsftpd.user_list的格式要求均为每个 用户名占一行。
要配置基于本地用户的访问控制,可以通过修改vsftpd的主配置文件/etc/vsftpd.conf来进行, 有两种限制方法:
例如下面的设置:
userlist_deny=YES
userlist_file= /etc/vsftpd.user_list
例如下面的设置:
userlist_deny= NO
userlist_file= /etc/vsftpd.user_list
注意:对于userlist_enable可以这样理解:
如 果userlist_enable=YES,表示vsftpd将从userlist_file选项给出的文件名中装载一个含有用户名的清单。然后再读取 userlist_deny的值来确定vsftpd.user_list中的用户是否允许访问FTP服 务器。如果用户不能访问,将在输入用户口令前被拒绝。
由于vsftpd有两种运行方式,即:由inetd启动和独立启动。 这两种运行方式的主机访问控制配置是不同的,下面介绍的是由xinetd启动的vsftpd的主机访问控制的配置。显然,要配置这种主机访问控制,需要修 改配置文件/etc/xinetd.d/vsftpd。
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
表示只允许192.168.1.0网段内的主机访问。
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
表示只有192.168.1.0网段内的主机不能访问。
访问控制表时主机表的书写语法
选项值 含义
Hostname 可解析的主机名
IP Address 十进制表示的IP地址
Net_name 在/etc/networks中定义的网络名
x.x.x.0 x.x.0.0 x.0.0.0 0.0.0.0 0作为通配符看待。如:191.72.61.0匹配从191.72.61.0到191.72.61.255的所有IP地址。0.0.0.0表示匹配所有的IP地址
x.x.x.{a,b,.} x.x.{a,b,.} x.{a,b,.} 指定主机表。如:191.72.61.{1,3,123}表示包含地址191.72.61.1、191.72.61.2和191.72.61.123
IPAddress/netmask 定义要匹配的网络或子网。如:172.19.16/20匹配从172.19.16.0到172.19.31.255
3)配置每个客户机的最大连结数
//在置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:
又如:access_time = 8:30-11:30 13:00-18:00 表示只有在上午8点半到11点半和下午1点到下午6点才能访问此FTP服务器。
在配置文件/etc/xinetd.d/vsftpd的 {}中添加如下的配置语句:
可以用下面的命令生成文件/etc/vsftpd.busy_banner:
下面内容是基于xinetd的,因为debian用的是inetd,所以懒得修改了:(
高安全级别匿名FTP服务器的配置要求:
不允许本地用户访问
关闭所有写权限
不允许匿名用户上传
设置客户端连接时的端口范围
设置匿名用户的最大传输速率限制
设置空闲的数据连接的中断时间
设置客户端空闲时的自动中断和激活连接的时间
配置每个主机的最大连接数
配置总的并发连接数
配置禁止访问的主机
配置安全日志
# cd /usr/local/src/vsftpd-1.1.3/EXAMPLE/INTERNET_SITE
# cp vsftpd.conf /etc
# cp vsftpd.xinetd /etc/xinetd.d/vsftpd
//修改主配置文件/etc/vsftpd.conf,添加一 个连接后的信息
# cat >>/etc/vsftpd.conf < > ftpd_banner=This FTP server is anonymous only.
> !
//显示主配置文件的内容如下:
# cat /etc/vsftpd.conf
# Access rights
anonymous_enable=YES
local_enable=NO
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
# Security
anon_world_readable_only=YES
connect_from_port_20=YES
hide_ids=YES
pasv_min_port=50000
pasv_max_port=60000
# Features
xferlog_enable=YES
ls_recurse_enable=NO
ascii_download_enable=NO
async_abor_enable=YES
# Performance
one_process_model=YES
idle_session_timeout=120
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
anon_max_rate=50000
ftpd_banner=This FTP server is anonymous only.
# cat /etc/xinetd.d/vsftpd
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
per_source = 5
instances = 200
no_access = 192.168.1.3
banner_fail = /etc/vsftpd.busy_banner
log_on_success += PID HOST DURATION
log_on_failure += HOST
}
//重新启动xinetd
五、配置基于IP的虚拟FTP服务器
建立虚拟FTP的服务器目录并设置适当的权限
建立虚拟FTP的服务器的xinetd配置文件
建立虚拟FTP的服务器的主配置文件
# ifconfig |grep -1 eth0
eth0 Link encap:Ethernet HWaddr 00:50:56:C7:22:DF
inet addr:192.168.1.222 Bcast:192.168.1.255 Mask:255.255.255.0
//可以看出本机的第一个网络接口eth0的IP为192.168.1.222
2.配置一个虚拟网络接口eth0:1
# ifconfig eth0:1 192.168.1.234 up
# ifconfig |grep -1 eth0:1
eth0:1 Link encap:Ethernet HWaddr 00:50:56:C7:22:DF
inet addr:192.168.1.234 Bcast:192.168.1.255 Mask:255.255.255.0
//可以看出本机的虚拟网络接口eth0:1的IP为192.168.1.234
# mkdir -p /var/ftp2/pub
//确保目录具有如下的权限
# ll -d /var/ftp2
drwxr-xr-x 3 root root 4096 3月12 03:00 /var/ftp2
# ll -d /var/ftp2/pub
drwxr-xr-x 2 root root 4096 3月12 03:00 /var/ftp2/pub
# useradd -d /var/ftp2 -M ftp2
# vi /etc/xinetd.d/vsftpd
// 在此文件的{}中添加如下的配置语句:
// bind = 192.168.1.222
// 将原FTP服务绑定到eth0接口,之后保存退出vi
# cp /etc/xinetd.d/vsftpd /etc/xinetd.d/vsftpd2
//更改新的配置文件/etc/xinetd.d/vsftpd2
# vi /etc/xinetd.d/vsftpd2
//在此文件的{}中添加如下的配置语句:
bind = 192.168.1.234
//将虚拟FTP服务绑定到eth0:1接口
//另外添加如下的配置语句:
server_args = /etc/vsftpd_site2.conf
//使vsftpd读取虚拟FTP服务器的主配置文件,之后保存退出vi
# cp /etc/vsftpd.conf /etc/vsftpd_site2.conf
//修改新的主配置文件
# vi /etc/vsftpd_site2.conf
//将如下的配置语句行:
ftpd_banner=This FTP server is anonymous only.
//修改为:
ftpd_banner=This is the alternative FTP site.
//添加如下的配置语句:
ftp_username=ftp2
//使此虚拟服务器的匿名用户映射到本地用户ftp2
//这样匿名用户登录后才能进入本地用户ftp2的/var/ftp2目录
//修改后,保存退出vi
#
8.重新启动xinetd
# service xinetd restart
#
//配置结束
设置listen=YES
指明vsftpd以独立运行方式启动。
为了实现访问控制,需要添加如下的配置项:
设置max_clients=200
指明服务器总的并发连接数
设置max_per_ip=4
指明每个客户机的最大连接数。
# cp /etc/vsftpd.conf /etc/vsftpd.standalone.conf
//编辑新的配置文件/etc/vsftpd.standalone.conf
# vi /etc/vsftpd.standalone.conf
//在文件开始处插入下面的行
listen=YES
max_clients=200
max_per_ip=4
//并将下面的配置语句
ftpd_banner=This FTP server is anonymous only.
//改为:
ftpd_banner=This FTP server is anonymous only, and vsftpd in "standalone" mode.
//(注意:要写在一行里)
//退出vi
//将由xinetd启动的配置停用
# vi /etc/xinetd.d/vsftpd
//将disable = no
//设为disable = yes
//保存后退出vi
//将disable = no
//设为disable = yes
//保存后退出vi
//重新启动xinetd
# service xinetd restart
//启动独立运行的vsftpd守护进程
# /usr/local/sbin/vsftpd /etc/vsftpd.standalone.conf &
七、配置独立运行的vsftpd在非标准端口下提供服务
为了配置独立运行的vsftpd在非标准端口下提供服务需要添加listen_port配置语句。具体操作步骤如下:
# echo listen_port=10021>> /etc/vsftpd.standalone.conf
//重新启动vsftpd守护进程
# killall vsftpd
# /usr/local/sbin/vsftpd /etc/vsftpd.standalone.conf &
为了配置独立运行的虚拟FTP服务器需要使用listen_address配置语句。以上面的配置为基础进行下面的配置,具
# vi /etc/vsftpd.standalone.conf
//添加listen_address=192.168.1.222的配置行
//将原FTP服务绑定到eth0接口。之后用:wq退出vi
# cp /etc/vsftpd_site2.conf /etc/vsftpd.standalone2.conf
//修改新的配置文件
# vi /etc/vsftpd.standalone2.conf
//在文件开始处插入下面的行
listen=YES
listen_address=192.168.1.234 将虚拟服务器绑定到eth0:1接口
max_clients=200
max_per_ip=4
//并将下面的配置语句
ftpd_banner=This is the alternative FTP site.
//改为:
ftpd_banner=This is the alternative FTP site, and vsftpd in "standalone" mode.
//用:wq退出vi
/usr/local/sbin/vsftpd /etc/vsftpd.standalone.conf
# kill -HUP `pidof vsftpd`
//启动新的虚拟FTP服务器
# /usr/local/sbin/vsftpd /etc/vsftpd.standalone2.conf &
九、配置虚拟用户的FTP服务器
在本地建立普通用户账号并设置密码
将其登录shell设为不可登录
由passwd/shadow口令系统进行认证
vsftpd的虚拟用户 采用了不与系统账户口令文件合二为一的方法,也就是说,为了认证这些虚拟用户vsftpd使用单
vsftp中有三类用户,即:本地用户、虚拟用户和匿名用 户。下面将这三类用户进行比较,见下表。
chroot_local_user=NO时 能,其值为YES时不能
不能激活此类用户的命令
local_enable=YES
guest_enable=YES
anonymous_enable=YES
生成虚拟用户口令库文件
配置生成vsftpd的认证文件
建立虚拟用户所要访问的目录并设置相应权限
建立配置文件
//生成虚拟用户口令库文件,以mysql数据库为例:
//修改口令库 文件的权限
# chmod 600 /etc/vsftpd_login.db
# vi /etc/pam.d/ftp
//插入如下两行
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
//保存后退出vi
// cd /usr/local/src/vsftpd-1.1.3/EXAMPLE/
// cp VIRTUAL_USERS/vsftpd.pam /etc/pam.d/ftp
//建立虚拟用户所要访问的目录并设置仅virtual用户访问的权限
# chmod 700 /home/ftpsite/
# vi /etc/vsftpd.standalone.vu.conf
//在此文件中插入下面的配置语句
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES 启用虚拟用户
guest_username=virtual 将虚拟用户映射为本地virtual用户
pasv_min_port=30000
pasv_max_port=30999
ftpd_banner=This FTP server is virtual user only.
pam_service_name=ftp 指定PAM配置文件为ftp.vu
//插入完毕,保存退出。
# killall vsftpd
# /usr/local/sbin/vsftpd /etc/vsftpd.standalone.vu.conf &
//配置结束
/etc/vsftpd.standalone.vu.conf中添加配置语句anon_world_readable_only=NO
配置好后,新的口令库中的所有用户就都可以登录此FTP服务器了。
虚拟用户valid具有浏览目录、上传和下载的权限
虚拟用户dede具有浏览目录、上传、下载、文件改 名和删除的权限
虚拟用户tom和fred具有浏览目录和下载的权限
下面以简单的虚拟用户FTP服务器的配置为基础进行说明,具体配置步骤为:
//激活对不同的虚拟用户进行不同权限配置的配置语句
user_config_dir=/etc/vsftpd_user_conf
//添加后保存退出vi
//接下来创建此目录
# mkdir /etc/vsftpd_user_conf
#echo "anon_world_readable_only=NO">/etc/vsftpd_user_conf/tom
#echo "anon_world_readable_only=NO">/etc/vsftpd_user_conf/fred
//开放valid和dede的读写权限
> write_enable=YES
> anon_upload_enable=YES
> !
/usr/local/sbin/vsftpd /etc/vsftpd.standalone.vu.conf
# kill -HUP `pidof vsftpd`
#