学习链接:

vsftpd官网:

http://vsftpd.beasts.org/


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


https://webftp.zzidc.com/




一,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

mail

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

mail

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

mail

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://username@your_ip

ftp://dmtsai:yourpasswd@your_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

mail

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

错误:  无法打开传输通道。原因:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

错误:  无法取得目录列表


解决办法:文件--->站点管理器--->高级--->活动模式--->确定