学习链接:
vsftpd官网:
Filezilla 官方网站:
http://filezilla.sourceforge.net/
https://filezilla-project.org/
51cto专题
http://os.51cto.com/art/201008/222036.htm
阿里云栖文档
https://yq.aliyun.com/ziliao/topic_46152/
包地址:
https://pkgs.org/download/vsftpd
http://rpmfind.net/linux/rpm2html/search.php?query=vsftpd
一,FTP 的数据链路原理
FTP (File Transfer Protocol) 主要是用来进行文件的传输,数据采用明文传输;
1, FTP 功能简介
(1)不同等级的用户身份:user, guest, anonymous
(2)命令记录与登录文件记录
(3)限制用户活动的目录: (change root, 简称 chroot)
2,FTP主动方式的工作流程
FTP传输使用tcp协议,使用命令信道与数据流通道俩个连接
上图为默认主动方式工作:
(1)建立命令通道连接
客户端会随机选择一个大于1024以上的端口(port AA)和服务端21端口建立连接
这个为命令通道,可以查询文件名,下载,上传等
(2)通知FTP服务端使用active且上报连接的端口
客户端需要数据传输时,如果时主动式,会随机启用一个端口(port BB),并通过命令通道上报FTP服务端,并等待FTP服务端的连接;
(3)FTP服务端主动向客户端连接
FTP服务端会主动由20端口向客户端的portBB建立连接;
FTP客户端与服务器端共建立俩个连接,分别用于命令下达和数据,FTP默认使用主动方式端口为20
注意:数据通道时有数据传输才建立;
主动方式使用的端口:
命令通道:21
数据通道:20
在主动方式中FTP服务端与客户端之间有防火墙的问题:
(1) 客户端与服务器间命令信道的建立:
因为NAT 会主动的记录由内部送往外部的连接信息,而由于命令信道的建立是
由客户端向服务器端发起建立连接的,所以这步可以顺利的建立起来的;
(2)客户端与服务器间数据信道建立时的通知:
客户端主机会先启用 port BB ,并通过命令通道上报 FTP 服务器,且等待服务器端的主动连接;
(3)3服务端主动连到 NAT 等待转递至客户端的连接问题:
但是由于通过 NAT 的转换后,FTP 服务器只能得知 NAT 的 IP 而不是客户端的
IP , 因此 FTP 服务器会以 port 20 主动的向 NAT 的 port BB 发送主动建立连接
的要求。 但你的 NAT 并没有启动 port BB 来监听 FTP 服务端的连接
解决方法:
(1)使用 iptables 所提供的 FTP 侦测模块:(使用在21固定端口时)
iptables提供模块,使用modprobe加载ip_conntrack_ftp及ip_nat_ftp等模块。
模块会主动分析目标时port21的连接信息,所以会得到port BB的信息。
(2)客户端选择被动式 (Passive) 连接模式:
3,客户端选择被动式方式
(1) 客户端与服务器建立命令信道:
客户端会随机选择一个大于1024以上的端口(port AA)和服务端21端口建立连接;
这个为命令通道,可以查询文件名,下载,上传等
(2)客户端发出 PASV 的建立连接请求:
当使用数据信道的指令时,客户端通过命令通道发出 PASV 的被动式要求 (Passive 的缩写), 并等待服务器的回应;
(3)FTP 服务端启动数据端口,并通知客户端建立连接:
如果你的 FTP 服务器是能够处理被动式连接的,此时 FTP 服务器会先启动一个端口在监听。 这个端口可以是随机或者自定义某一范围的端口;然后 FTP 服务端会通过命令通道告知客户端该已经启动的端口,并等待客户端的连接。
(4)客户端随机取用大于 1024 的端口进行连接:
客户端会随机取用一个大于 1024 的端口来对主机的 port PASV建立连接。
4,FTP 的安全性问题与替代方案
FTP为明文传输,可以用sftp-server替代,或者做以下限制
(1)随时更新到最新版本的 FTP 软件,并随时注意漏洞讯息;
(2)善用 iptables 来限制可以使用 FTP 的网段;
(3)善用 TCP_Wrappers 来限制可以登入的网段;
(4) 善用 FTP 软件的设置来限制使用FTP 服务器的使用者的不同权限;
(5)使用 Super daemon 来进阶管理 FTP 服务器;
(6)随时注意用户的家目录、以及匿名用户登入的目录的『档案权限』;
(7)若不对外公开可以修改 FTP 的 port 。
(9)使用 FTPs 这种加密的 FTP 功能
5,开放什么身份的使用者登入
(1)开放实体用户的情况 (Real user):
FTP服务器默认允许实体用户登入,系统并没对实体用户限制,所以他可以对整个文件系统进行任何他具有权限的工作
开放实体用户时建议:
a)使用替代的FTP方案。
b)限制用户权限,如chroot与/sbin/nologin,如vsftpd默认可以通过/etc/vsftpd/ftpusers来禁止登录ftp账号;
(2)访客身份(Guest)
通常会建立 guest 身份的案例当中,大多时由于服务器提供了类似个人 Web 首页的功能给一般身份用户, 使用者需要管理自己的网页空间,这时将使用者的身份压缩成为 guest ,并且将他的可用目录设定好,常见的建议如下:
a)仅提供需要登入的账号,不需要提供系统上面所有人均可登入的环境
b)针对不同的访客给他们不一样的家目录, 并且家目录与用户的权限设定需要相符合;
例如要提供 dmtsai 管理他的网页空间位置/home/dmtsai/www ,那需要将 dmtsai 在 FTP 提供的目录仅有 /home/dmtsai/www 就可以
c)定较多的限制,包括:上下传文件数目与硬盘容量的限制、登入的时间限制、可以使用的指令等
(3)匿名登录使用者 (anonymous)
必须做限制
二,vsftpd(Very Secure FTP Daemon)服务器基础设置
1,为何使用vsftpd?
(1)vsftpd针对操作系统的程序的权限(privilege)
系统上所执行的程序会启动一个程序为PID(Process ID),这个PID在系统上能进行的任务与拥有的权限有关。
(2)vsftpd支持chroot(change root directory)功能 ,root指根目录而非系统管理员。
比如,以匿名身份登入ftp服务器 ,会被限定在 /var/ftp目录下工作,看见的根目录就是/var/ftp
(3)vsftpd服务启动者身份为一般用户,所以对Linux系统权限较低。
(4)任何需要较高执行权限的vsftpd指令会以一支特殊的上层程序所控制。
(5)绝大部分ftp会使用到的额外指令功能,如dir,ls,cd...都已经被整合到vsftpd主程序中
(6)所有来自客户端且想要使用这支上层程序所提供的较高执行权限之vsftpd指令的需求,都被视为不可信任的要求来处理,必需要经过相当程序的身份确认后,才可以利用上层程序的功能,例如chown(),Login的要求等动作
2,所需要的软件以及软件结构
(1)yum安装
yum install vsftpd
(2)安装生成文件
# rpm -ql vsftpd
/etc/logrotate.d/vsftpd # 日志轮询
/etc/pam.d/vsftpd # 使用PAM模块时的配置文件
/etc/rc.d/init.d/vsftpd #
/etc/vsftpd
/etc/vsftpd/ftpusers # PAM模块指定禁止登入用户的文件
/etc/vsftpd/user_list # 生效与否,与userlist_enable,userlist_deny有关。
/etc/vsftpd/vsftpd.conf # 主配置 文件
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd # vsftpd的执行文件
/var/ftp # vsftpd默认匿名者登入的根目录;
/var/ftp/pub
/etc/vsftpd/chroot_list # 默认不存在,需要手动创建。可以将账号chroot在家目录下。
生效与否,与chroot_list_enable, chroot_list_file有关
# /etc/pam.d/vsftpd内容,file后面文件为禁止用户使用vsftpd
# 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
# /etc/vsftpd/ftpusers内容,将禁止的账号写入这个文件,一行一个账号
# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
3,vsftpd.conf配置文件详解 man 5 vsftpd.conf
(1)服务器环境相关的设置
connect_frot_port_20=YES/NO # 使用20端口进行数据传输
listen_port=21 # 监听端口,也是命令通道端口,仅适合以standalone方式生效(对super daemon无效)
dirmessage_enable=YES/NO #用户进入目录时,显示需要注意的内容,显示内容由message_file指定
message_file=message # dirmessage_enable=YES时此选项可用,用来存放需要显示的信息
listen=YES/NO #定义ftp的启动模式YES作为独立的服务启动,NO由xinetd启动
pasv_enable=YES/NO #是否支持被动模式,一定要设定为YES
use_localtime=YES/NO #是否实用本地时间取代GMT时间,建议设置为YES
write_enable=YES/NO #是否允许用户上传数据
connect_timeout=60 #连接超时时间单位s,主动式连接模式时,服务端在60s得不到客户端响应,则强制断线
accept_timeout=60 #使用被动模式进行数据传输时,如果数据传输端口等待时间超过60s则强制断线
data_connection_timeout=300 #数据传输超时时间
idle_session_timeout=300 #空闲会话超时时间
max_clients=0 #如果ftp作为独立的服务,此选项用来设置同一时间最多有多少客户端可以连接
max_per_ip=0 #定义同意ip在同一时间最多可建立多少连接
pasv_min_port=0,pasv_max_port=0 #定义被动模式进行数据传输所使用的端口范围0不限制
ftpd_banner= #定义用户登录ftp时显示的欢迎信息内容,一般使用banner_file选项设定
banner_file=/PATH/FILE #同上
(2)真实用户的相关设置
guest_enable=YES/NO #是否在真实用户登录后被系统识别为guest。具体身份由guest_username指定
guest_username=ftp #guest_enable=YES生效时,指定识别为系统中的哪个用户
local_enable=YES/NO #是否允许/etc/passwd内的帐号以真实用户的方式登录ftp服务器
local_max_rate=0 #定义传输速度 单位为bytes/second
chroot_local_user=YES/NO #是否将用户限制在家目录内,具体设置需配合下面俩个选项使用
chroot_list_enable=YES/NO #是否启用chroot列表功能
chroot_list_file=/etc/vsftpd/chroot_list #定义被限制在家目录用户名称存放的文件,
userlist_enable=YES/NO #是否启用禁止用户登录的功能
userlist_deny=YES/NO #如果值为YES则存放在user_list文件中的用户无法登录ftp,在userlist_enable=YES时生效
userlist_file=/etc/vsftpd/user_list # 定义用户名称此选项在userlist_deny=YES时生效
(3)匿名用户的相关设置
anonyous_enable=YES/NO #是否允许匿名用户登录,后面所有的选项都是在anonyous_enable=YES时才会生效
anon_world_readable_only=YES/NO #是否允许匿名用下载
anon_other_write_enable=YES/NO #是否允许匿名用户具有除了写以外的权限,包括删除改名
anon_mkdir_write_enable=YES/NO #是否允许匿名用户具有建立目录的权限,如果允许则anon_other_write_enable的值必须为YES
anon_upload_enable=YES/NO #是否允许匿名用户上传资料
deny_email_file=/etc/vsftp/banned_emails #是否启用阻止某些邮件地址功能来禁止某些匿名用户登录
banned_email_file=/etc/vsftpd/banned_emails # 用来记录存放邮箱地址的文件
no_anon_passwod=YES/NO #匿名用户登录是否需要密码
anon_max_rate=0 #匿名用户的传输速度单位bytes/second
anon_umask=077 #匿名用户上传文件的权限
(4)安全相关设置
ascii_upload_enable=YES/NO #设置是否启用ASCII 模式上传数据
ascii_download_enable=YES/NO #设置是否启用ASCII 模式下载数据
one_process_model=YES (NO) #当设为YES时,表示每个建立的连接都会拥有一支process
tcp_wrappers=YES/NO # 设置vsftpd是否与tcp wrapper相结合来进行主机的访问控制。默认值为YES。如果启用,则vsftpd服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。
比如:若要仅允许192.168.0.1—192.168.0.254的用户可以连接FTP服务器,则在/etc/hosts.allow文件中添加以下内容:
vsftpd:192.168.0. :allow
all:all :deny
xferlog_enable= YES/NO #是否启用上传/下载日志记录。如果启用,则上传与下载的信息将被完整纪录在xferlog_file 所定义的档案中。预设为开启。
xferlog_file=/var/log/vsftpd.log #设置日志文件名和路径
xferlog_std_format=YES/NO #如果启用,则日志文件将会写成xferlog的标准格式
nopriv_user=nobody #默认以nobody作为服务执行者权限
pam_service_name=vsftpd #设置PAM使用的名称
4,vsftpd启动的模式
vsftpd 可以使用 stand alone 或 super daemon 的方式来启动, CentOS 默认是以 stand alone 来启动的。
a)提供给整个因特网来进行大量下载的任务,建议你使用 stand alone 的方式, 服务的速度上会比较好。
b)仅提供给内部人员使用的 FTP 服务器,使用 super daemon 来管理;
(1)利用CentOS提供的script来启动vsftpd(stand alone)
/etc/init.d/vsftpd start
(2)以super daemon来启动
a)更改配置
vim /etc/vsftpd/vsftpd.conf
listen=NO
b)安装配置superdaemon
# 安装xinetd
yum install xinetd
# 编写配置 文件
vim /etc/xinetd.d/vsftpd
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
server_args = /etc/vsftpd/vsftpd.conf
log_on_success += DURATION USERID
log_on_failure += USERID
disable = no
}
# 停止vsftpd服务
/etc/init.d/vsftpd stop
#启动xinetd服务
/etc/init.d/xinetd restart
# 查看开机启动项
chkconfig --list
5,CentOS的vsftpd默认值
# grep -v ^# vsftpd.conf | grep -v ^$
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
功能说明:
a)可以使用 anonymous 匿名账号或其他实体账号 (/etc/passwd) 登入;
b)anonymous 的家目录在 /var/ftp ,且无上传权限,已经被 chroot ;
c)实体用户的家目录参考 /etc/passwd,并没有被 chroot;
d) /etc/vsftpd/ftpusers 内存在的账号都不能使用 vsftpd (PAM);
e)利用 /etc/hosts.{allow|deny} 来作为基础防火墙;
f)当客户端有任何上传/下载信息时,该信息会被纪录到 /var/log/xferlog
g) 主动方式的端口为 port 20;
h) 使用格林威治时间 (GMT)。
6,针对实体用户的设置
如需要达到的功能为:
a)使用本地时间取代 GMT 时间;
b)用户登入时显示一些欢迎信息;
c)系统账号不可登入主机 (即 UID 小于 500 以下的账号);
d)一般实体用户可以进行上传、下载、建立目录及修改文件等动作;
e)用户新增的文件、目录之 umask 设定为 002;
f)其他主机设定值保留默认值。
(1)主配置文件设置
# grep -v ^# vsftpd.conf | grep -v ^$
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
banner_file=/etc/vsftpd/welcome.txt
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
use_localtime=YES
(2)建立欢迎信息
# cat /etc/vsftpd/welcome.txt
Hi,welcome my ftp!
(3)建立限制系统账号登入的文件
/etc/vsftpd/ftpusers:就是 /etc/pam.d/vsftpd 设定所影响的;
/etc/vsftpd/user_list:由 vsftpd.conf 的 userlist_file 所设定。
# cat ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
(4)测试
# lftp 47.95.251.172
lftp 47.95.251.172:~> user ftptest passwd
lftp [email protected]:~> ls
drwxr-xr-x 2 501 501 4096 Dec 05 14:04 a
lftp [email protected]:~> cd /
cd ok, cwd=/
lftp [email protected]:/> ls
drwxr-xr-x 2 0 0 4096 Sep 20 15:20 aliyun-bin
dr-xr-xr-x 2 0 0 4096 Aug 24 12:29 bin
dr-xr-xr-x 4 0 0 4096 Aug 24 12:24 boot
drwxr-xr-x 5 0 0 4096 Oct 28 16:15 data0
drwxr-xr-x 18 0 0 3540 Oct 24 23:39 dev
drwxr-xr-x 72 0 0 4096 Dec 05 13:57 etc
(5)SELinux设置
# 查看 selinux设置
getsebool -a | grep ftp
# 设置 selinux
setsebool -P ftp_home_dir=1
(6)对用户 (包括未来新增用户) 进行 chroot
a)增加chroot内容
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
b)建立不被chroot的账号列表,即使没有任何账号,该文件也要存在
vim /etc/vsftpd/chroot_list
testuser1
testuser2
c)重启服务
/etc/init.d/vsftpd restart
(7)限制实体用户的总下载流量(带宽)
a)内容增加
local_max_rate=1000
b)重启服务
/etc/init.d/vsftpd restart
(8)限制最大同时上线人数与同一IP的FTP连接数
a)内容增加
max_client=10
max_per_ip=2
b)重启服务
/etc/init.d/vsftpd restart
(9)建立严格的可使用FTP的账号列表,只许user_list内用户登录
a)修改内容
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
b)填写/etc/vsftpd/user_list
# cat /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
testuser2
c)重启服务
/etc/init.d/vsftpd restart
7,仅有匿名登录的相关设置
功能要求:
a)使用本地的时间,而非 GMT 时间;
b)提供欢迎信息,说明可提供下载的信息;
c)仅开放 anonymous 的登入,且不需要输入密码;
d)文件传输的速限为 1 Mbytes/second;
e)数据连接的过程 (不是命令通道) 只要超过 60 秒没有响应,就强制Client 断线
f)只要 anonymous 超过十分钟没有动作,就强制断线;
g)最大同时上线人数限制为 50 人,且同一 IP 最大在线数量为 5 人
h)默认的 FTP 匿名者的根目录所在: ftp 账号的家目录
(1)匿名用户默认登入的根目录是以ftp这个用户的家目录,查询目录
# finger ftp
Login: ftp Name: FTP User
Directory: /var/ftp Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
(2)建立浏览 目录
mkdir /var/ftp/{linux,gun}
(3)编写vsftpd.conf配置文件
# grep -v ^# vsftpd.conf | grep -v ^$
anonymous_enable=YES
no_anon_password=YES
anon_max_rate=100000
data_connection_timeout=60
idle_session_timeout=600
max_clients=50
max_per_ip=5
local_enable=NO
dirmessage_enable=YES
banner_file=/etc/vsftpd/welcome.txt
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
use_localtime=YES
(4)让匿名者可上传/下载自己的资料(权限开放最大)
a)增加内容
write_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
b)重启服务
/etc/init.d/vsftpd restart
c)SELinux设置
setsebool -P allow_ftpd_anon_write=1
setsebool -P allow_ftpd_full_access=1
(5)匿名用户只能上传禁止下载
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=YES
chown_username=daemon
(6)固定范围的端口作为FTP被动式 数据通道
a)增加内容
pasv_min_port=65400
pasv_max_port=65410
b)重启服务
/etc/init.d/vsftpd restart
8,防火墙设置
功能:
a)加入 iptables 的 ip_nat_ftp, ip_conntrack_ftp 两个模块
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
b)放开 port 21 给因特网使用
iptables -A INPUT -p TCP --dport 21 --sport 1024:65534 -j ACCEPT
c)放开 port 65400~65410 端口给 Internet 联机用
iptables -A INPUT -p TCP --dport 65400:65410 --sport 1024:65534 -j ACCEPT
9,常见问题与解决
主要查看日志文件;
/var/log/vsftpd.log
/var/log/messages
/var/log/xferlog
(1)如果在 Client 端上面发现无法联机成功,请检查:
a)iptables 防火墙的规则,是否开放了 port 21 登入;
b)查看 /etc/hosts.deny
c)查看 /etc/xinetd.d/vsftpd
如果 Client 已经连上 vsftpd 服务器,但是却显示『 XXX file can't be opend 』的字样,请检查:
a)最主要的原因是在 vsftpd.conf 设定了检查某个文件,却没创建该文件, 所以,请检查 vsftpd.conf 里面所有设定的文件,使用 touch 创建该文件
如果 Client 已经连上 vsftpd 服务器,却无法使用某个账号登入,请检查:
a)在 vsftpd.conf 里面是否设定了使用 pam 模块来检验账号,以及利用 userlist_file 来管理账号;
b)请检查 /etc/vsftpd/ftpusers 以及 /etc/vsftpd/user_list文件内是否将该账号禁用了;
如果 Client 无法上传文件,该如何是好?
a)最可能发生的原因就是在 vsftpd.conf 里面忘记加上这个设定write_enable=YES这个设定,请加入;
b)是否所要上传的目录权限不对,请以 chmod 或 chown 来修改;
c)是否 anonymous 的设定里面忘记加上了底下三个参数:
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
d)是否因为设定了 email 抵挡机制,又将 email address 写入该文件中了!?请检查!
e)是否设定了不许 ASCII 格式传送,但 Client 端却以 ASCII 传送呢?
请在 client 端以 binary 格式来传送文件!
f)检查一下 /var/log/messages ,是否被 SELinux 所抵挡住了呢?
三,客户端的图形接口 FTP 软件
命令行ftp和lftp俩个指令
图形接口:
1,Filezilla
说明网站:http://filezilla.sourceforge.net/
下载网站:http://sourceforge.net/project/showfiles.php?group_id=21558
2,通过浏览器连接FTP
ftp://[email protected]_ip
ftp://dmtsai:[email protected]_ip
四,vsftpd配置SSL加密功能
1,检查vsftpd是否支持ssl模块
ldd $(which vsftpd) | grep ssl
2,建立vsftpd证书
cd /etc/pki/tls/certs
make vsftpd.pem
cp -a vsftpd.pem /etc/vsftpd/
3,修改vsftpd配置文件
功能:
a)提供实体账号登入,实体账号可上传数据,且 umask 为 002
b)实体账号默认为 chroot 的情况,且全部实体账号可用带宽为1Mbytes/second
c)实体账号的登入与数据传输均需透过 SSL 加密功能传送;
d)提供匿名登录,匿名者仅能下载,不能上传,且使用明码传输 (不透过 SSL)
vim /etc/vsftpd/vsftpd.conf
# user
local_enable=YES
write_enable=YES
local_umask=002
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_max_rate=10000000
#anonymout
anonymous_enable=YES
no_anon_password=YES
anon_max_rate=1000000
data_connection_timeout=60
idle_session_timeout=600
# ssl
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
#system
max_clients=50
max_per_ip=5
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
pasv_min_port=65400
pasv_max_port=65410
五,实战
1,针对真实用户:
a)使用本地时间取代 GMT 时间;
b)用户登入时显示一些欢迎信息;
c)系统账号不可登入主机 (即 UID 小于 500 以下的账号);
d)一般实体用户可以进行上传、下载、建立目录及修改文件等动作;
e)用户新增的文件、目录之 umask 设定为 002;
f)禁止匿名用户
g)对用户 (包括未来新增用户) 进行 chroot
h)限制实体用户的总下载流量(带宽)
i)限制最大同时上线人数与同一IP的FTP连接数
j)建立严格的可使用FTP的账号列表,只许user_list内用户登录
k)启动主动模式
l)其他主机设定值保留默认值。
(1)yum安装
yum install vsftpd -y
(2)创建配置文件
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_max_rate=1000
max_clients=100
max_per_ip=20
dirmessage_enable=YES
banner_file=/etc/vsftpd/welcome.txt
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
#pasv_enable=NO
port_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
tcp_wrappers=YES
use_localtime=YES
(3)创建白名单用户
# cat user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
testuser2
(4)创建chroot用户
# cat chroot_list
testuser2
(5)创建欢迎信息文件
# cat welcome.txt
Hi,welcome my ftp!
(6)创建黑名单用户
cat ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
(7)启动服务和设置开机启动项
service vsftpd start
chkconfig vsftpd on
匿名用户:
# grep -v ^# vsftpd.conf | grep -v ^$
anonymous_enable=YES
no_anon_password=YES
anon_max_rate=100000
data_connection_timeout=60
idle_session_timeout=600
max_clients=50
max_per_ip=5
local_enable=NO
dirmessage_enable=YES
banner_file=/etc/vsftpd/welcome.txt
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
use_localtime=YES
pasv_min_port=65400
pasv_max_port=65410
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=YES
chown_username=daemon
1,8UFTP连接失败,linux命令可以,解决办法:
问题追踪
状态: 正在连接 47.95.251.172 ...
状态: 已经连接到 47.95.251.172:0。正在等待欢迎信息...
响应: 220-Hi,welcome my ftp!
响应: 220
命令: USER anonymous
响应: 230 Login successful.
状态: 连接成功
命令: OPTS UTF8 OFF
响应: 501 Option not understood.
状态: 正在取得目录列表...
命令: PWD
响应: 257 "/"
命令: PASV
响应: 227 Entering Passive Mode (172,17,210,66,255,124).
命令: TYPE A
响应: 200 Switching to ASCII mode.
命令: LIST
错误: 无法打开传输通道。原因:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
错误: 无法取得目录列表
解决办法:文件--->站点管理器--->高级--->活动模式--->确定