一、实验环境(rhel7.0版本)

主机环境:rhel7.0

各主机信息

主机名IP
server172.25.254.1
client172.25.254.2
物理机172.25.254.7

 

二、FTP 的介绍       

 

1、FTP 服务器的用途

       

        文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。FTP  最主要的功能是在服务器与客户端之间进行文件的传输,这个协议使用的是明文传输方式。FTP 的传输使用的是 TCP  数据包协议。

        超文本传输协议HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。

 

2、FTP 的工作原理

 

FTP  服务器使用了两个连接,分别是命令通道(使用 21 端口)数据流通道(使用 20 端口)

针对  FTP 的服务端,有两种连接模式:

  1. 主动式连接
  2. 被动式连接

 

(1)主动式连接的工作原理

 

1、建立命令通道的连接:

        客户端会随机取一个大于  1024  以上的端口(port  AA)来与 FTP 服务器端的  port 21  实现连接,这个过程当然需要三次握手。实现连接后客户端便可以通过这个连接来对 FTP  服务器执行命令,查询文件名、下载、上传等等名利都是利用这个通道来执行的。

2、通知  FTP  服务器端使用  Active  且告知连接的端口号

        FTP  服务器的端口 21  号主动用在命令的执行,但是当牵涉到数据流时,就不是使用这个连接了。客户端在需要数据的情况下,会告知服务器端用什么方式来连接,如果是主动式(Active)连接时,客户端会随机启用一个端口(Port  BB)且通过命令通道告知  FTP 服务器这两个信息,并等待  FTP  服务器的连接。

3、FTP  服务器主动向客户端连接

       FTP  服务器由命令通道了解客户端的需求后,会主动地由  Port  20  向客户端的 port BB 连接,这个连接当然也会经过三次握手。此时 FTP 的客户端与服务器端会建立两条连接,分别用在命令的执行与数据的传递。而默认  FTP  服务器端使用的主动连接端口就是 port 20。

值的注意的是:

  1. 数据传输通道是在有数据传输的行为时才建立的通道,并不是一开始连接到  FTP  服务器就立刻建立的通道。
  2. 两者的连接发起端是不一样的。首先 port 21  主要接受来自客户端的主动连接,至于  port 20 则为 FTP  服务器主动连接至客户端。

 

那如何客户端是在防火墙后端,或者是 NAT  服务器后端呢?又会发生什么问题呢?

1、客户端与服务器间命令通道的建立

        客户端会随机取一个大于  1024  以上的端口(port  AA)来与 FTP 服务器端的  port 21  实现连接,这个过程当然需要三次握手。实现连接后客户端便可以通过这个连接来对 FTP  服务器执行命令,查询文件名、下载、上传等等名利都是利用这个通道来执行的。

        因为  NAT  会主动记录由内部送往外部的连接信息,而由于命令通道的建立是由客户端向服务器端连接的,因此这一条连接是可以顺利建立起来的。

2、客户端与服务器间数据通道建立时的通知

        FTP  服务器的端口 21  号主动用在命令的执行,但是当牵涉到数据流时,就不是使用这个连接了。客户端在需要数据的情况下,会告知服务器端用什么方式来连接,如果是主动式(Active)连接时,客户端会随机启用一个端口(Port  BB)且通过命令通道告知  FTP 服务器这两个信息,并等待  FTP  服务器的连接。

3、服务器主动连到  NAT  等待转递至客户端的连接问题

        但是由于通过  NAT  的转换后,FTP  服务器只能得知  NAT  的IP  而不是客户端的 IP,因此 FTP  服务器会以  port 20  主动向  NAT  的 Port  BB  发送主动连接的要求。但 NAT  并没有启动  Port  BB 来监听 FTP 服务器的连接。

        从上面的过程,我们可以发现,在 FTP  的主动式连接当中,NAT 将会被时为客户端,但  NAT 其实并非客户端,这就造成问题了,这就造成问题了。

        如果你曾经在  IP  路由器后面连接某些 FTP  服务器时,可能偶尔会发现明明已经连接上  FTP  服务器了(命令通道已建立),但就是无法取得文件名的列表,而是在超过一端时间后显示“Cant't  buld  data  commection: Connection  refused,无法进行数据传输”之类的信息,那肯定就是这个原因所造成的问题。

那如何解决上面的问题呢?

方法一:使用 iptables 所提供的 FTP 检测模块

        其实  iptables  早就提供了许多好用的模块了,FTP  当然不会被错过。你可以使用  modeprobe  这个命令来加在 ip_conntrack_ftp  及 ip_nat_ftp  等模块,这几个模块会主动地分析目标是  port 21 的连接信息,所以可以得到 Port  BB 的资料,此时若接收到  FTP 服务器的主动连接,就能够将该数据包导向正确的后端主机了。

        不过,如果你链接的目标 FTP  服务器的命令同大批默认端口号并非标准的 21 端口号时(例如某些地下 FTP 服务器),那么这两个模块就无法顺利解析出来。

方法二:客户端选择被动式(Passive)连接模式

        除了主动式链接之外,FTP 还提供一种称为被动式连接接的模式。

 

(2)被动式连接的工作原理

 

1、用户与服务器建立命令通道

        客户端会随机取一个大于  1024  以上的端口(port  AA)来与 FTP 服务器端的  port 21  实现连接,这个过程当然需要三次握手。实现连接后客户端便可以通过这个连接来对 FTP  服务器执行命令,查询文件名、下载、上传等等名利都是利用这个通道来执行的。

2、客户端发出  PASV  的连接要求

        当使用数据通道的命令时,客户端通过命令通道发出  PASV  的被动式连接要求(Passive),并等待服务器的回应

3、FTP  服务器启动数据端口,并通知客户端连接

        如果你使用的  FTP  服务器是能够被动式连接的,此时 FTP  服务器会先启动一个监听端口(port  PASV)。这个端口号码可以是随机的,也可以自定义某一范围的端口,这要看  FTP 服务器软件而定。然后 FTP 服务器会通过命令通道告知客户端该已经启动的端口(port  PASV),并等待客户端的连接。

4、客户端随机取用大于 1024  的端口进行连接

        然后你的客户端会随机取用一个大于  1024  的端口号来进行对主机的  port  PASV  连接。

 

那如何服务端是在防火墙后端,或者是 NAT  服务器后端呢?又怎么解决呢?

牵涉到更深入的 DMZ  技巧。这里不再介绍。

 

3、FTP  开放什么身份的用户登录

 

  1. 实体用户(系统上真实存在的用户)
  2. 访客身份(guest)
  3. 匿名登录用户(anonymous)——匿名用户使用的身份就是  ftp  。

 

三、vsftpd 服务器端的配置

 

1、所需软件与文件结构

 

(1)所需软件

 

这个软件名称就是  vsftpd,使用  yum  安装即可。

 

(2)文件结构

 

安装完毕之后,使用【rpm  -ql  vsftpd】来看看这个软件提供了哪些文件。基本上,比较重要的配置文件如下:

  • /etc/vsftpd/vsftpd.conf

         这个文件是最主要的配置文件。使用“参数=设置值”来设置的,注意,等号两边不能有空白。至于详细的  vsftpd.conf  可以使用【man  5  vsftpd.conf】来查看。

  • /etc/pam.d/vsftpd

        这个是  vsftpd  使用  PAM  模块时的相关配置文件。主要用来作为身份认证只用,还有一些用户身份的功能,也是通过这个文件来实现的。你可以查看一下该文件:

[root@server ~]# 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

        上面  file  后面接的内容是“限制用户无法使用  vsftpd”之意,也就是说其实你的限制文件不见需要使用系统默认值,也可以在这个文件里面进行修改。

  • /etc/vsftpd/ftpusers

        与上一个文件有关系,也就是  PAM 模块(/etc/pam.d/vsftpd)所指定的那个无法登录的用户配置文件。这个文件的设置很简单,你只要将不相让它登录的  FTP  账号写入这个文件即可。一行一个账号,看起来像这样:

[root@server ~]# 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
  • /etc/vsftpd/user_list

       这个文件是否能够生效与  vsftpd.conf  内的两个参数有关,分别是  userlist_enable  和 userlist_deny。如果说 /etc/vsftpd/vsftpd.conf  是 PAM  模块的阻挡访问设置项目,那么  /etc/vsftpd/user_list  则是 vsftod 自定义的阻挡访问项目。事实上这个文件与  /etc/vsftpd/ftpusers  几乎是一模一样的,在默认的情况下,你可以将不允许登录  vsftpd  的账号写入这里。不过这个文件是否会发生作用由  vsftpd.conf  配置文件内的  userlist_deny=[YES|NO]  决定。

[root@server ~]# 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
  • /usr/sbin/vsftpd

        这就是  vsftpd  的主要执行文件。

  • /var/ftp

        这是  vsftpd  默认匿名用户登录的根目录

  • /etc/vsftpd/chroot_list

        这个文件默认是不存在的,所以你必须要手动自行建立。这个文件的主要功能是可以将某些账号的用户 chroot  建立在他们的默认用户主目录下。但这个文件要生效与  /etc/vsftpd.conf  内的 chroot_list_enable、chroot_list_file  两个参数有关。如果你想要将某些实体用户限制在他们的用户主目录下而不许到其他目录去,可以启动这个设置项目。

 

2、主要配置文件  /etc/vsftpd/vsftpd.conf  的语法

 

(1)与服务器环境设置有关的设置值

 

  • connect_from_port_20=YES

       这就是前面提到的  ftp-data 的端口号。即支持主动式连接功能。

  • dirmessage_enable=YES

       当用户进入某个目录时,会显示该目录需要注意的内容。

  • message_file=.message ——该参数默认是没有的

       当  dirmessage_enable=YES 时,可以设置这个项目让  vsftpd  寻找该文件显示的信息

  • listen=NO

        若设置为  YES,表示 vsftpd  是以  stand  alone  的方式来启动。默认是 NO

  • connect_timeout=60     ——该参数默认是没有的

        单位是秒,在数据连接的主动式连模式下,我们发出的连接信息在  60 秒内得不到客户端的响应,则不等待并强制断线。

  • #data_connection_timeout=120

        如果服务器与客户端的数据已经成功建立(不论主动还是被动链接),但是可能由于线路问题导致  120  秒内还是无法顺利地完成数据地传送,那客户端地连接就会被我们地  vsftpd  强制踢除。

  • #idle_session_timeout=600

       如果用户在 300  秒内都没有命令操作,强制脱机!避免无用占用空间。

  • max_clients=       ——该参数默认是没有的

        限制同一时间最多有多少 client  可以同时连上  vsftpd ,限制使用  FTP  的用量。

  • max_per_ip=         ——该参数默认是没有的

        与上面  max_clients  类似,这里是同一个 IP  同一时间可允许多少连接。

  • usese_localtime=YES|NO          ——该参数默认是没有的

        是否使用本地时间,vsftpd 默认使用  GMT 时间(格林尼治时间),所以默认的  FTP  内的文件日期会比中国晚  8  消失,建议修改设置为  YES 。

  • pasv_enable=      ——该参数默认是没有的

        是否支持数据流的被动式连接模式。该参数的默认值是 YES。

  • pasv_min_port=   pasv_max_port=       ——该参数默认是没有的

        上面两个是与被动连接模式使用的端口号有关,如果你想要使用  65400  到  65410  这  11  个 pot  来进行被动式连接模式的连接,可以这样设置:pasv_min_port=65400  及  pasv_max_port=65410。如果是  0  的话,表示随机取用而不限制。

  • #ftpd_banner=Welcome to blah FTP service

       当用户连接进入到  vsftpd  时,在 FTP  客户端软件上会显示的说明文字。不过,这个设置值数据比较少。

  • banner_file=/path/file           ——该参数默认是没有的    ,在客户端使用  ftp  命令登录时,才能看出效果。

        这个项目可以指定某个纯文本文件作为用户登录  vsftpd  服务器时所显示的欢迎字眼。同时,,也能够放置一些用户知道本 FTP 服务器的目录架构

 

(2)与实体用户较相关的设置值

 

  • local_enable=YES

        这个设置值必须要为 YES,在  /etc/passwd  内地账号才能以实体用户地方式登录我们的  vsftpd  服务器

  • local_max_rate=0

        实体用户的传输速度限制,单位为 bytes/second,0 为不限制

  • write_enable=YES

        如果你允许用户上传数据时,就要启动这个设置值       

  • #chroot_local_user=YES

        在默认的情况下,是否要将用户限制在自己的用户主目录之内(chroot)?如果是  YES  代表用户默认就会被 chroot,如果是 NO,则默认是没有 chroot。

  • #chroot_list_enable=YES

        是否启用  chroot  写入列表的功能?与下面的 chroot_list_file  有关,这个项目需要开启,否则下面的列表文件会无效。

  • #chroot_list_file=/etc/vsftpd/chroot_list

       如果  chroot_list_enable=YES,那么就可以设置这个项目了。这个项目与  chroot_local_user 有关。

  • userlist_enable=YES

        是否借助 vsftpd_enable  的阻挡机制来处理某些不欢迎的账号,与下面的参数设置有关。

  • userlist_deny=YES|NO      ——该参数默认是没有的

        当 userlist_enable=YES  时才会生效的设置,若此设置值为 YES  时,则当用户账号被列入某个文件时,在该文件内的用户将无法登录  vsftpd  服务器。该文件的文件名与下列设置项目有关。

  • userlist_file=/etc/vsftpd/user_list      ——该参数默认是没有的

        若上面  userlist_deny = YES 时,则这个文件就有用处了。在这个文件内的账号都无法使用  vsftpd。

 

(3)匿名用户登录的设置值

 

  • anonymous_enable=YES

        设置允许  anonymous  登录 vsftpd  主机。默认是 YES,下面的所由相关设置都需要将这个设置为 anonymous_enable=YES  之后才会生效。

  • anon_world_readable_ONLY=YES|NO  ——该参数默认是没有的

        仅允许  anonymous  具有下载可读文件的权限。

  • anon_other_write_enable=YES|NO ——该参数默认是没有的

        是否允许  anonymous  具有除了写入之外的权限,包括删除与修改服务器上的文件及文件名的权限。如果要设置为  YES,那么开放给 anonymous  写入的目录亦即需要调整权限,让 vsftpd  的PID 拥有者可以写入才行。

  • #anon_mkdir_write_enable=YES

       是否让 anonymous  具有建立目录的权限,如果要设置为  YES,那么 anon_other_write_enable=YES  必须设置。

  • #anon_upload_enable=YES

      是否让  anonymous  具有上传数据的功能,如果要设置为  YES,那么 anon_other_write_enable=YES  必须设置。

  • anon_umask=077     ——该参数默认是没有的

        限制 anonymous  上传文件的权限。如果是  077 则 anonymous  传宋过来的文件权限会是 -rw-------。

  • anon_max_rate=0   ——该参数默认是没有的

        这个设置值后面接的数值单位为 bytes/秒,限制 anonymous  的传输速度,如果是 0 则不限制(由最大带宽所限制),

如果你想让  anonymous  仅有 30KB/s  的速度,可以设置为 anon_max_rate=30000。

  • anon_root=       ——该参数默认是没有的

        修改匿名用户的默认家目录(默认家目录是 /var/ftp)

  • chown_uploads=YES|NO    ——该参数默认是没有的

        是否要修改匿名用户使用的身份,如果是 YES ,那么指定的用户身份由下面那一个参数来决定

  • chown_username=     ——该参数默认是没有的

        如果上面那个参数(chown_uploads)的值是 YES,那么,这个参数就是在指定使用的用户的身份。

  • #deny_email_enable=YES

        将某些特殊的  Email-address  阻挡住,不让那些  anonymous  登录。需与下个设置项目配合。

  • #banned_email_file=/etc/vsftpd/banned_emails

       如果 deny_email_enal=YES  时,可以利用这个设置项目来规定哪个  E-mail  address  不可登录我们的 vsftpd。在上面设置的文件内,一行输入一个  Email-address  即可。

  • no_anon_password=        ——该参数默认是没有的   ,  在客户端使用  ftp  命令登录时,才能看出效果。

        当设置为 YES 时,表示 anonymous  将会略过密码检验步骤,而直接进入  vsftpd  服务器内。所以一般默认都是 NO(登录时会检查输入的  E-mail)

 

(4)访客用户登录的设置值

 

  • guest_enable=YES|NO    ——该参数默认是没有的

        若这个值设置为 YES,那么任何实体账号,均会被假设成为  guest(所以默认时不开放的)。至于访客在 vsftpd  当中,默认会取得  ftp  这个用户的相关权限。但可以通过  guest_username  来修改。

  • guest_username=    ——该参数默认是没有的。若该值是  ftp ,则获取的是匿名用户的身份。

        在 guest_enable=YES  时才会生效,指定访客的身份。

 

(5)与系统安全方面的一些设置值

 

  • #ascii_download_enable=YES

        如果设置为  YES,那么 client  就优先(默认)使用  ASCII  格式下载文件

  • #ascii_upload_enable=YES

        如果设置为  YES,那么 client  就优先(默认)使用  ASCII  格式上传文件

  • tcp_wrappers=YES

       当然我们都习惯支持 TCP  Wrappers  的防火墙机制(即可以利用  /etc/hosts.allow  或  /etc/hosts.deny  来作为基础防火墙)  ,所以设置为 YES

  • xferlog_enable=YES

        当设置为 YES  时,用户上传与下载文件都会被记录下来。记录的文件与下一个设置项目有关

  • #xferlog_file=/var/log/xferlog

        如果上一个设置项目  xferlog_enable=YES  的话,这里就可以设置了。这个是日志文件的文件名

  • xferlog_std_format=YES

        是否设置为 wu-ftp  相同的日志文件格式。

  • #nopriv_user=ftpsecure

         我们的  vsftpd  默认以 ftpsecure  作为此服务执行者的权限。

  • pam_service_name=vsftpd

        这个是  PAM  模块的名称,我们放置在 /etc/pam.d/vsftpd  中的即是这个。

 

3、Redhat  7.x  的 vsftp  默认值

 

Redhat 7.x  的默认值当中, vsftpd  是同时开放实体用户与匿名用户的,Redhat 7.x 的默认值如下:

[root@server ~]# cat /etc/vsftpd/vsftpd.conf | grep -v ^#
1、与匿名用户有关的信息
anonymous_enable=YES        # 支持匿名用户的登录使用 FTP 功能

2、与实体用户有关的功能
local_enable=YES            # 支持本地端的实体用户登录
write_enable=YES            # 允许用户上传数据(包括文件与目录)
local_umask=022             # 建立新目录(755)与文件(644)的权限

3、与服务器环境有关的设置
dirmessage_enable=YES       # 若目录下有 .nessage 则会显示该文件的内容
xferlog_enable=YES          # 启动日志文件记录,记录于 /var/log/xferlog
connect_from_port_20=YES    # 支持主动式连接功能
xferlog_std_format=YES      # 支持 WuFTP 的日志文件格式
listen=NO                   # 不能使用 stand alone 方式启动 vsftpd
listen_ipv6=YES             # 启动 ipv6 对应的端口   
pam_service_name=vsftpd     # 支持 PAM 模块的管理
userlist_enable=YES         # 支持 /etc/vsftpd/user_list 文件内的账号登录控制
tcp_wrappers=YES            # 支持 TCP Wrappers 的防火墙机制(即/etc/hosts.allow 或 /etc/hosts.deny)

通过上述的设置值,我们的 vsftpd 可以实现如下的功能:

  • 对于匿名用户:
  1. 只能登录 FTP,不能进行上传/下载/创建目录/删除;
  2. 只能在 anonymous 用户的主目录/var/ftp下,已经被 chroot了。
  • 对于实体用户:
  1. 可以登录  FTP,可以在自己的主目录下上传/下载/创建目录/删除。
  2. 没有被 chroot,可前往任何有权限可进入的目录中,但是在非自己的主目录下,不能进行任何操作。
  • 任何于  /etc/vsftod/ftpusers  内存在的账号均无法使用  vsftpd (PAM)。
  • 可利用  /etc/hosts.allow 或 /etc/hosts.deny  来作为基础的防火墙。
  • 当客户端有任何上传/下载的信息时,该信息被记录到  /var/log/xferlog  中。
  • 主动式连接的端口为 port  20。
  • 使用格林尼治时间(GMT)。

 

四、四种常见的报错

 

500报错:权限过大

530报错:认证失败

550报错:服务本身不允许

553报错:文件系统权限过小

 

五、vstpd 服务器的配置

 

1、对于服务端——172.25.254.1

 

(1)安装vsftpd    

 

(2)启动vsftpd服务

 

命令通道对应的端口为 21。

 

(3)关闭防火墙

 

(4)关闭内核级的防火墙(selinux)

显示Disabled,代表selinux设置成功

 

2、对于客户端——172.25.254.2

 

(1)安装lftp

 

(2)进行测试:

能够成功连接,表成功

 

六、vsftpd 服务器的配置参数

 

在服务端

编辑vsftpd的配置文件:/etc/vsftpd/vsftpd.conf,即vim /etc/vsftpd/vsftpd.conf

因为修改的是配置文件,所以要重启vsftp服务,即systemctl restart vsftpd

 

在客户端

利用lftp命令进行测试

 

1、针对匿名用户

 

(1)匿名用户的设定     

anonymous_enable=YES|NO      匿名用户登陆的限制

 

【1】、

 

当服务端为YES时

 

客户端测试结果如下:

 

【2】、

 

当服务端为NO时

 

客户端测试结果如下:

 

(2)匿名用户上传文件

anon_upload_enable=YES

write_enable=YES

修改匿名用户登陆的默认目录的权限:chmod 775 /var/ftp/pub    +   修改匿名用户登陆的默认目录的所属组:chgrp ftp /var/ftp/pub   或  chown  ftp.ftp  /var/ftp/pub..

 

服务端:

 

客户端:

这里需要注意的是:只能在pub目录里面上传文件

 

(3)匿名用户上传文件/创建目录默认权限的修改

anono_umask=022

 

服务端:

 

客户端:

 

(4)匿名用户下载自己上传的文件/ pub 目录下的文件

anon_world_readable_only=NO(NO表示匿名用户可以下载自己上传的文件

 

服务端:

 

客户端:

 

(5)匿名用户建立目录

anon_mkdir_write_enable=YES

 

服务端:

 

客户端:

这里需要注意的是:只能在pub目录里面建立目录,并且没有创建文件这个选项

 

(6)匿名用户删除自己上传的文件/自己建立目录/pub 目录下的文件或目录

anono_other_write_enable=YES

 

服务端:

 

客户端:

 

(7)匿名用户上传文件时,使用身份的修改

chown_uploads=YES

chown_username=student

值的注意的是:上传文件使用的身份仍然是  ftp  这个用户,只是上传之后的文件的拥有者发生了变化。即  ftp  用户对目录有  w  的权限即可。而 student 这个用户对目录可以没有  w  的权限。

 

服务端:

 

客户端:

在服务端看到文件的拥有者变为了我们所指定的用户student用户

 

(8)匿名用户家目录的修改

anon_root=/mnt   指定匿名用户的家目录为/mnt

 

服务端:

为了能够看到效果,在服务端的/mnt目录下创建一些文件以便区分

 

客户端:

看到的是/mnt目录中的文件,代表成功

 

(9)匿名用户的最大上传/下载速率

anno_max_rate=100000      # 限速为 100000Bytes (100KBytes)

 

服务端:

 

为了能够看出效果,在客户端创建一个较大的文件

客户端:

 

2、针对实体用户

 

(1)本地用户家目录的修改

local_root=/jiao

 

服务端:

在服务端创建目录 /xjj,为了能够看到效果,在/xjj目录下创建一些文件以便区分

 

客户端:

使用命令:lftp  172.25.254.1  -u  student    或   lftp  172.25.254.1   -u  student,student           # 第一个  studnet  表示用户名,第二个 student  表示 student  这个用户名对应的密码是  student。

在客户端看到的是/xjj目录中的文件,代表修改成功

 

(2)本地用户上传文件/创建目录的默认权限的修改

local_umask=066

 

服务端:

为了使的用户能够上传文件,在服务端需要修改权限

 

客户端:

 

(3)限制本地用户浏览根目录

chroot_local_user=YES

chmod u-w /home/student

 

服务端:

为了排除影响,指定用户家目录的代码注释掉,即使得用户登陆之后是自己的家目录

 

客户端:

我们发现,必须修改权限,否则会报500(权限过大)的错误

 

在服务端修改  /home/student 目录的权限

 

客户端:

 

(4)用户黑名单的建立(黑名单中的用户不能访问根目录)

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

vim /etc/vsftpd/chroot_list

 

服务端:

在服务端修改  /home/chen 、/home/xin 目录的权限

 

客户端:

 

(5)用户白名单的建立(只有白名单中的用户可以访问根目录)

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

vim /etc/vsftpd/chroot_list

 

服务端:

 

客户端:

 

(6)限制本地用户登陆

vim /etc/vsftpd/ftpusers                      永久黑名单

vim /etc/vsftpd/user_list                      临时黑名单

 

/etc/vsftpd/ftpusers为永久黑名单

 

/etc/vsftpd/user_list为临时黑名单,通过设定可以变为白名单

 

(7)用户白名单的设定(只有白名单中出现的用户才能通过lftp远程连接)

userlist_enable=YES

userlist_deny=NO

/etc/vsftpd/user_list                 上面两个参数设定好之后,此文件变成用户白名单,名单中出现的用户可以登陆ftp

 

服务端:


 

客户端:

 

(8)用户黑名单的设定(黑名单中出现的用户不能通过lftp远程连接)

userlist_enable=YES

userlist_deny=YES

/etc/vsftpd/user_list           此参数设定,此文件变成用户黑名单,黑名单中出现的用户不可以登陆ftp

 

服务端:

 

客户端:

 

3、针对访客用户

 

(1)ftp 访客用户的设定

 

服务端:

 

【1】、步骤一:编辑配置文件,用来存放访客用户的用户名和密码

vim  /etc/vsftpd/xinfile                文件名称任意

 

【2】、步骤二:为了安全,将用户名和密码进行加密

db_load -T -t hash -f /etc/vsftpd/xinfile /etc/vsftpd/xinfile.db                  

 

【3】、步骤三:查看是否安装pam    ps aux | grep pam

 

【4】步骤四:编辑解析文件  vim /etc/pam.d/xin

 

【5】、步骤五:修改vsftpd的解析文件  vim /etc/vsftpd/vsftpd.conf

pam_service_name=xin         #这里的 xin  指的是  /etc/pam.d/xin

guest_enable=YES

为了防止影响,将/etc/vsftpd/user_list  文件中的  student  那行去掉

 

客户端:

 

此时,访客用户登陆的效果和匿名用户一样(因为还没有设置guest_username),登入之后默认的时pub目录

 

(2)访客用户家目录的统一指定

 

服务端:

 

步骤同(1),除了 步骤五

对于步骤五:修改vsftpd的解析文件  vim /etc/vsftpd/vsftpd.conf

pam_service_name=xin

guest_enable=YES

guest_username=student

chmod u-w /home/student

 

客户端:

 


值得一提的是:此时访客用户获得的身份是 student 用户的,那么 student  用户所具有的权限,访客用户应该都有(但是 没有对 /home/student  目录写的权限,因为有写的权限,会报  550  的错误。)


 

(3)访客用户家目录独立设定

 

服务端:

 

mkdir /ftphome/user1/user1dir -p

mkdir /ftphome/user2/user2dir -p

guest_username=ftp

local_root=/ftphome/$USER

user_sub_token=$USER

 

客户端:

 

可见:访客用户登陆之后是各自的家目录,表示设置成功


值得一提的是:此时访客用户获得的身份是 anoymous 用户的,那么 anoymous 用户所具有的权限,访客用户应该都有。


 

(4)访客用户独立配置

 

服务端:

 

user_config_dir=/etc/vsftpd/userconf

chmod  775  /ftphome/user1/user1dir

chmod  775  /ftphome/user2/user2dir

chgrp  ftp /ftphome/user1/user1dir

chgrp  ftp /ftphome/user2/user2dir

mkdir /etc/vsftpd/userconf

vim /etc/vsftpd/userconf/user1

示例:anon_upload_enable=YES

需要把anon_upload_enable=YES注释,否则相当于没有限制

 

客户端:

user1可以上传,user2不可以上传,表示对访客用户的独立设置实验成功。

 

4、服务端的最大连接数

max_clients=1

 

服务端:

 

客户端:

 

5、显示的时间问题

有个比较大的问题是,因为  vsftpd  默认使用  GMT  时间,所以你在客户端使用  fto  软件连接到  FTP  服务器时,会发现每个文件的时间都慢了  8  小时。

那怎么办呢?使用  use_localtime  这个参数。

 

服务端:

 

客户端:

 

6、限制同一个 ip  的连接数

max_per_ip=1

 

服务端:

 

客户端:

 

7、用户登录时显示一些欢迎信息的信息:

banner_file=/etc/vsftpd/welcome.txt

 

服务端:

 

客户端:

 

8、补充:

 

当selinux状态是enforcing ,且 firewalld  状态是 active  时,如何使得匿名用户可以登录  ftp  服务器,并且上传文件和下载文件呢?

 

(1)设置 防火墙允许 ftp 服务通过   ——使得匿名用户可以登录  ftp  服务器。

 

(2)查看安全上下文,并设定sebool值——使得匿名用户可以上传和下载文件

 

(3)修改/var/ftp/pub目录的权限和所属组

 

(4)编辑ftp服务的配置文件

 

(5)测试

 

9、通过浏览器取得  FTP 连接

 

FTP  协议在浏览器的地址栏中可以这样输入:

  • ftp://username@your_ip

要记得,如果你没有输入  username@  的字样时,系统默认会以匿名登录来处理这此连接。因此如果你想要使用实体用户连接时,就需在  IP  或主机名之前填写你的账号。举例来说,我的 FTP  服务器(172.25.254.1)若有  student  这个用户,那我启动浏览器后,可以这样做:

  • ftp://student@172.25.254.1

然后在出现的对话框当中输入  student  的密码,就能够使用浏览器来管理我在 FTP  服务器内的文件系统了。设置,你连密码都想要写在网址中,那就更厉害了。

  • ftp://student:yourpassword@172.25.254.1

 

七、让  vsftpd  增加 SSL  的加密功能——只有在图形界面(FileZilla 软件)才能看到效果

 

1、检查  vsftpd  有无支持  SSL 模块                 

                                                                                                                                                                                                                                

2、建立证书

 

3、修改 vsftpd.conf  这个配置文件

[root@server vsftpd]# vim /etc/vsftpd/vsftpd.conf 
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/vsftpd/.sshkey/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/.sshkey/vsftpd.pem

 

八、常见问题与解决之道

 

1、如果在  client  端上面发现无法连接成功,请检查:

  • firewalld  防火墙的规则当中,是否开放了 client  端的 port  21  登录?
  • 在  /etc/hosts.deny  当中,是否设置错误,导致  client  的登录权限被取消了?

 

2、如果  client  已经连上  vsftpd  服务器,但是却显示  “xxx  file  can't  be  open” 的字样,请检查:

  • 最主要的原因还是在于在  vsftpd.conf  当中设置了检查某个文件,但是你却没有将该文件设置起来,所以,请检查  vsftpd.conf  里面所有设置的文件名,使用  touch  这个命令将该文件建立起来即可。

 

3、如果  client  已经连上  vsftpd  服务器,却无法使用某个账号登录,请检查:

  • 在  vsftpd.conf  里面是设置了使用  PAM  模块来检验账号,以及利用 userlist_file  来管理账号?
  • 请检查 /etc/vsftpd/ftpusers  以及  /etc/vsftpd/user_list  文件内是否将该账号写入了?

 

4、如果 client  无法上传文件,该如何操作?

  • 最可能发生的原因就是在 vsftpd.conf  里面忘记加上  “write_enable=YES”  这个设置,请加入。
  • 是否所要上传的目录权限不对,请以  chmod  或  chown  来修改。
  • 是否  anonymous  的设置里面忘记加上了下面这个参数:
  1. anon_upload_enable=YES
  • 是否因为设置了  E-mail  阻挡机制,又将  Email  address  写入该文件中了,请检查。
  • 是否设置了不许  ASCII  格式传送,但 Client  端却以  ASCII 传送。请在  client  端以 binary  格式来传送文件
  • 检查一下  /var/log/messages,是否被 SELinux  所阻挡了。

 

如果上面的解决反感还是无法解决你的问题,请你务必分析一下这两个文件:/var/log/vsftpd.log 与  /var/log/messages ,里面有相当多的重要资料,可以提供进行排错。不过 /var/log/vsftpd.log  却默认不会出现,只有  /var/log/xferlog  而已。如果你想要加入 /var/log/vsftpd.log  的支持,可以这样做:

[root@server ~]# vim /etc/vsftpd/vsftpd.conf
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log

这样,未来有新连接或者是错误时,就会额外写一份到  /var/log/vsftpd.log  去。

 

九、sftp  与 ftps(通过 SSL 加密的  ftp)之间的区别

 

问题:想一想,既然有了  sftp  可以进行加密的 ftp 传输,那为何需要 ftps  呢?

答:因为既然要开放  sftp 的话,就需要同时放形  sshd  亦即  SSH 的连接,如此依赖,port 22 很可能会常常常被检测。若是 openssl、openssh 出问题,恐怕你的系统就会被绑架。如果  ftp  真的有必要存在,那么 通过 ftps  以及利用 vsftpd  这个较为安全的服务器软件来假设,理论上,是要比   sftp  来的安全些,至少对 Internet  放行  ftps  是这样。

 

十、FTP  连接软件:ftp、lftp

 

1、ftp  命令

 

ftp [host|IP] [port]
[root@client ~]# ftp 172.25.254.1
Connected to 172.25.254.1 (172.25.254.1).
220-hello         <==之前配置的欢迎信息
220-你好           <==之前配置的欢迎信息
220 
Name (172.25.254.1:root): anonymous        <==输入用户名
331 Please specify the password.
Password:         <==输入密码
230 Login successful. 
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> help         <==输入 help 来查看有哪些可以使用的命令
Commands may be abbreviated.  Commands are:

!		debug		mdir		sendport	site
$		dir		mget		put		size
account		disconnect	mkdir		pwd		status
append		exit		mls		quit		struct
ascii		form		mode		quote		system
bell		get		modtime		recv		sunique
binary		glob		mput		reget		tenex
bye		hash		newer		rstatus		tick
case		help		nmap		rhelp		trace
cd		idle		nlist		rename		type
cdup		image		ntrans		reset		user
chmod		lcd		open		restart		umask
close		ls		prompt		rmdir		verbose
cr		macdef		passive		runique		?
delete		mdelete		proxy		send
ftp> 

 

2、lftp  命令

 

lftp [-p port] [-u user[,password]] [host|IP]
lftp -f filename
lftp -c commands

选项与参数:
-p:后面可以直接接上 FTP 主机提供的 port
-u:后面则是接上账号与密码,就能够连接上远程主机了
    如果没有账号密码,lftp 默认会使用 anonymous 尝试匿名登录
-f:可以将命令写入脚本中,这样可以帮助进行 shell script 的自动处理
-c:后面直接加上所需要的命令
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐