Linux友人帐之网络编程基础FTP服务器

一、概述

1.1FTP基本概念

FTP(File Transfer Protocol)是一种用于文件传输的标准协议。FTP服务是一种能够让用户通过FTP协议在本地计算机和远程服务器之间进行文件传输的服务。FTP服务可以允许用户上传或下载文件,也可以进行目录浏览、文件删除、文件重命名等操作。FTP服务是网络操作中常用的一种服务,特别是在需要大量文件传输的场合,如网站建设、文件备份等。

FTP服务通常包括以下功能:

  1. 用户认证:在FTP服务中,用户需要提供用户名和密码才能连接到FTP服务器。

  2. 文件传输:FTP服务提供从客户端上传、下载文件到服务器的功能。

  3. 目录操作:FTP服务允许用户创建、删除目录,以及在目录间切换。

  4. 文件权限管理:FTP服务可以管理用户对文件和目录的访问权限。

1.2FTP工作模式

Linux友人帐之网络编程基础FTP服务器_第1张图片

FTP服务有两种工作式工作模式,一种为主动方式,也叫PORT方式,另一种为被动方式,也叫PASV方式。 

 FTP主动模式

Linux友人帐之网络编程基础FTP服务器_第2张图片

在FTP中,使用两个TCP连接,一个连接为控制连接,用来传输控制命令,另一个连接为数据连接,用来传输上传下载的数据文件。在主动方式中,FTP服务器在端口21上监听TCP连接建立请求,客户端在本地选择一个动态端口x,向FTP服务器的21号端口发起TCP连接建立请求,经过TCP三次握手,在客户端动态端口x与服务器端口21之间建立了控制连接,用来传输命令。如果要进行数据传输,客户端会先选择一个动态端口x+1,用作数据连接,在端口x+1上监听TCP连接请求,然后在控制连接上使用PORT指令告诉服务器,客户端用于数据连接的端口,服务器收到PORT指令后,以端口20向客户端端口x+1发起TCP连接建立请求,经过TCP三次握手,在服务器20号端口与客户端x+1号端口之间建立的数据连接,用作传输据。由此可以看出,数据连接是由服务器主动发起的,因此称为主动方式。

FTP主动模式需要客户端和服务器之间进行多次通信,因此它通常较慢。在大多数情况下,FTP被动模式是更好的选择,因为它不需要客户端和服务器之间的多次通信,因此更快。

FTP被动模式

Linux友人帐之网络编程基础FTP服务器_第3张图片

在FTP被动方式中,控制连接的建立方法与主动方式相同,而数据连接的建立则不同。当需要传输数据时,客户端通过控制连接向服务器发送PASV命令,服务器收到PASV命令后选择一个动态端口y,并通过PORT命令将选择的动态端口y告诉客户端,向客户端使用本地动态端口x+1,向服务器的动态端口y发起TCP连接建立请求,经过TCP三次握手,在客户端端口x+1与服务器端口y之间建立起数据连接,用作传输数据。由此可以看出,数据连接是由客户端主动发起的,而服务器是被动接收连接,因此称为被动方式。 

 FTP被动模式的优点是可以避免传输数据时被防火墙或网络的NAT路由器所阻挡,从而提供更加可靠的数据传输服务。然而,使用FTP被动模式也有一些注意事项。例如,FTP服务器必须正确地配置被动模式以允许客户端访问,否则客户端会无法建立连接。此外,由于FTP服务器在一个固定的端口上等待客户端的连接,因此可能会存在安全问题。因此,在使用FTP被动模式时,建议谨慎考虑安全问题并采取适当的安全措施。

1.3FTP安装与配置文件

Linux友人帐之网络编程基础FTP服务器_第4张图片Linux友人帐之网络编程基础FTP服务器_第5张图片

 1.4用户访问FTP服务器

匿名用户访问FTP服务器

可以使用匿名登录来访问FTP服务器。这可以通过在FTP客户端中提供用户名“anonymous”和电子邮件地址作为密码来实现。大多数FTP服务器支持匿名访问,但是在某些情况下可能需要首先获得授权才能进行访问。建议在使用FTP服务器之前仔细阅读相关的使用协议和政策。

Linux友人帐之网络编程基础FTP服务器_第6张图片

Linux友人帐之网络编程基础FTP服务器_第7张图片

Linux友人帐之网络编程基础FTP服务器_第8张图片普通用户访问FTP服务器Linux友人帐之网络编程基础FTP服务器_第9张图片

1.5使用命令访问FTP

Linux友人帐之网络编程基础FTP服务器_第10张图片

1.6 锁定普通用户主目录

Linux友人帐之网络编程基础FTP服务器_第11张图片
Linux友人帐之网络编程基础FTP服务器_第12张图片

Linux友人帐之网络编程基础FTP服务器_第13张图片Linux友人帐之网络编程基础FTP服务器_第14张图片Linux友人帐之网络编程基础FTP服务器_第15张图片

1.7控制用户登录ftp服务器

Linux友人帐之网络编程基础FTP服务器_第16张图片
Linux友人帐之网络编程基础FTP服务器_第17张图片

Linux友人帐之网络编程基础FTP服务器_第18张图片

Linux友人帐之网络编程基础FTP服务器_第19张图片 1.8控制主机登录ftp

Linux友人帐之网络编程基础FTP服务器_第20张图片

Linux友人帐之网络编程基础FTP服务器_第21张图片 

Linux友人帐之网络编程基础FTP服务器_第22张图片1.9虚拟目录设置Linux友人帐之网络编程基础FTP服务器_第23张图片

Linux友人帐之网络编程基础FTP服务器_第24张图片
 

二、实战实验

2.1安装FTP服务软件

任务描述

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。

本关任务:介绍Linux系统上常用的FTP服务器软件vsftpd,我们学会如何在Linux系统上搭建一个FTP服务器。

相关知识

FTP服务器是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTPFile Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。

vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。

Linux系统安装软件和Windows系统上安装软件不太一样,在Windows上我们只需要下载需要安装的软件二进制文件(常见的格式是.exe),然后双击即可进行安装。而Linux系统上安装软件的常见方式有如下几种:

  1. 源码编译安装
  2. 软件包安装
  3. 在线安装

源码安装步骤是下载源码到本机,然后对源码进行编译,生成可执行文件,然后将生成的可执行文件拷贝到对应的安装目录即可,常见的软件源码包格式为.tar.gz.tar.bz2等;

软件包安装步骤是下载好已经编译好的可执行文件包,然后使用对应的包管理工具进行安装,不同的Linux系统使用不同的包管理工具,常见包管理工具如下所示:

  1. Ubuntu/Debian 系统使用 dpkg 进行管理软件包(软件包的后缀为.deb);
  2. Redhat/CentOS 系统使用 rpm 进行管理软件包(软件包的后缀为.rpm);

在线安装是指不需要用户亲自下对应软件的包,但是需要对应系统能够访问互联网,不同的Linux系统使用不同的工具进行在线安装软件,常见的在线安装软件的工具如下所示:

  1. Ubuntu/Debian 系统使用 apt-get 进行在线安装软件;
  2. Redhat/CentOS 系统使用 yum 进行在线安装软件;

建议使用在线安装软件,离线安装软件常见的问题是软件间的依赖问题,如果离线安装软件,则必须要手动安装依赖的库,而在线安装则只需要一条命令完成所有的操作,在线安装会自动去安装依赖库;

源码安装VSFTP

首先下载源码包,此处使用的是vsftpd-3.0.2.tar.gz。

具体安装步骤如下所示:

  1. 解压源码包:tar zxvf vsftpd-3.0.2.tar.gz
  2. 进入源码文件夹:cd vsftpd-3.0.2/
  3. 编译源码:make
  4. 安装源码:sudo make install
  5. 复制配置文件: sudo cp vsftpd.conf /etc

注意如果是Ubuntu系统则需要修改Makefile文件内容,否则在安装源码步骤会出现错误。

Linux友人帐之网络编程基础FTP服务器_第25张图片

[原始内容]

Linux友人帐之网络编程基础FTP服务器_第26张图片

[修改后内容]

如果安装成功则会出现如下界面:

Linux友人帐之网络编程基础FTP服务器_第27张图片

至此源码安装vsftpd软件结束,如果正确安装,则可以执行vsftpd命令启动服务:

在线安装VSFTP

本实验环境使用的系统是Ubuntu,所以使用apt-get工具来在线安装软件,具体步骤如下所示:

  1. 更新软件源:sudo apt-get update
  2. 安装vsftpd:sudo apt-get install vsftpd

如果安装成功则会出现如下界面:

Linux友人帐之网络编程基础FTP服务器_第28张图片

注意:如果当前用户是root,则执行以上安装命令时不需要加sudo

2.2FTP服务器启动/关闭

任务描述

通过上一关的学习,我们学会如何在Linux系统上安装vsftpd软件,当我们安装好后,我们接下学会如何开启/关闭vsftpd服务。

本关任务:介绍在Linux系统上如何开启、关闭和重启vsftpd服务。

相关知识

当我们安装成功vsftpd软件后,默认vsftpd服务是关闭的,此时,如果我们需要传送文件时,我们必须开启vsftpd服务。

本实验环境使用的系统是Ubuntu,当我们使用apt-get在线安装软件后,通常会在/etc/init.d/目录下生成一个启动该服务软件的脚本,例如,我们使用apt-get安装vsftpd软件后,我们可以看到在/etc/init.d/目录下生成一个名为vsftpd的脚本文件,该脚本可以用来控制vsftpd服务的启动与关闭等信息。

[vsftpd服务脚本文件]

Linux service 命令

Linux系统中使用service命令来控制系统服务,它可以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。

service命令的使用格式:

service 服务名 控制命令

  • 服务名:自动要控制的服务名,即/etc/init.d目录下的脚本文件名;
  • 控制命令:系统服务脚本支持的控制命令。

常见的控制命令:

  1. start:启动该服务;
  2. stop:关闭该服务;
  3. restart:重新启动该服务;
  4. status:查看该服务状态;

注意并不是所有的服务都支持以上4种控制命令,不同的服务提供不同的控制命令,大多数服务都支持以上4种常用的控制命令。

vsftpd服务管理

当我们成功安装vsftpd后,接下来,我们使用service命令来管理vsftpd服务。

我们将在以下案例演示中分别介绍如何启动、关闭、重新启动vsftpd服务,以及查看vsftpd服务状态。

案例演示1

查看vsftpd服务状态,可以使用如下命令:

sudo service vsftpd status

[请在右侧“命令行”里直接体验]

可以看到当前vsftpd服务处于waiting状态,也就是关闭状态。

案例演示2

启动vsftpd服务并且查看是否启动成功,可以使用如下命令:

  1. sudo service vsftpd start
  2. sudo service vsftpd status

[请在右侧“命令行”里直接体验]

可以看到vsftpd服务处于running状态。

案例演示3

重新启动vsftpd服务并且查看是否重新启动成功,可以使用如下命令:

  1. sudo service vsftpd restart
  2. sudo service vsftpd status

Linux友人帐之网络编程基础FTP服务器_第29张图片

[请在右侧“命令行”里直接体验]

可以看到当前vsftpd服务先被stop后,紧接着被start

案例演示4

关闭vsftpd服务并且查看是否关闭成功,可以使用如下命令:

  1. sudo service vsftpd stop
  2. sudo service vsftpd status

[请在右侧“命令行”里直接体验]

可以看到vsftpd服务处于waiting状态,也就是关闭状态。

注意:如果当前用户是root,则执行以上命令时不需要加sudo

编程要求

本关任务是学会如何启动/关闭vsftpd服务器。

具体编程要求如下:

  • 开启vsftpd服务(实验环境使用的是Ubuntu系统)。

2.3FTP客户端 

任务描述

通过以上关卡的学习,我们学会了如何安装和启动ftp服务器软件,接下来我们来学习如何利用ftp进行文件的传送操作。

本关任务:学会如何使用ftp进行本地机和远程机之间传送文件。

相关知识

Linux系统上ftp客户端软件常用的有ftplftpfirefox浏览器。

ftp命令用来设置文件系统相关功能。ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相信掌握了这些,使用Linux进行ftp操作将会非常容易。

ftp命令常见用法

ftp命令格式:

ftp [host] [port]

  1. [host]为要连接的服务器地址,例如:127.0.0.1 (或 localhost )表示连接本地服务器;
  2. [port]为服务器的端口,默认为 21 ,当我们修改了 vsftpd 的默认端口后,我们连接的时候需要指定新端口;

常见ftp命令如下所示:

  1. FTP>open host [port] 重新建立一个新的连接;
  2. FTP>bye: 终止主机 FTP 进程,并退出 FTP 管理方式;
  3. FTP>close: 终止远程的 FTP 进程,返回到 FTP 命令状态, 所有的宏定义都被删除;
  4. FTP>quit: 同 BYE;
  5. FTP>help [command] 输出命令的解释;
  6. FTP>cd: 更改远程计算机上的目录,同 Linux 的 cd 命令;
  7. FTP>cdup: 更改远程计算机上的目录,返回上一级目录;
  8. FTP>lcd: 改变当前本地主机的工作目录,如果缺省,就转到当前用户的 HOME 目录;
  9. FTP>pwd: 列出当前远程主机目录;
  10. FTP>dir [remote-directory] [local-file] 列出当前远程主机目录中的文件;
  11. FTP>ls [remote-directory] [local-file] 同 dir;
  12. FTP>delete: 删除远程主机中的文件;
  13. FTP>rename [from] [to] 改变远程主机中的文件名;
  14. FTP>rmdir directory-name 删除远程主机中的目录;
  15. FTP>mkdir directory-name 在远程主机中建立目录;
  16. FTP>mget [remote-files] 从远程主机接收一批文件至本地主机;
  17. FTP>get [remote-file] [local-file] 从远程主机中传送至本地主机中;
  18. FTP>mput local-files 将本地主机中一批文件传送至远程主机;
  19. FTP>put local-file [remote-file] 将本地一个文件传送至远程主机中;
  20. FTP>recv remote-file [local-file] 同 get;
  21. FTP>send local-file [remote-file] 同 put;
  22. FTP>status: 显示当前 FTP 的状态;
  23. FTP>! command: 执行本地 shell 命令,如: !dir(显示本机当亲目录内容),如果不加!如:dir(显示服务器当前目录内容)。

注意:使用ftp命令去连接远程主机时,必须保证远程主机的vsftpd服务是开启状态。

案例演示环境初始化:执行如下操作:向文件/etc/vsftpd.conf(部分Linux系统是/etc/vsftpd/vsftpd.conf文件)结尾追加三行anon_root=/anon_other_write_enable=YESanon_umask=022。同时将anon_upload_enable=YESwrite_enable=YESanon_mkdir_write_enable=YES前的#符号删除,并将anonymous_enable设置为YES,然后重新启动vsftpd服务,下一关讲解为什么要这样做。

Linux友人帐之网络编程基础FTP服务器_第30张图片

Linux友人帐之网络编程基础FTP服务器_第31张图片

[修改后的配置文件]

连接远程主机

案例演示1:

使用ftp客户端连接本地vsftpd服务器,可以使用如下命令: ftp localhostftp 127.0.0.1

Linux友人帐之网络编程基础FTP服务器_第32张图片

[请在右侧“命令行”里直接体验]

如果本地vsftpd服务器开启的话,我们就可以直接连接程序,此时需要输入登录的用户名和密码。当正确的输入用户名和密码后,我们就可以使用ftp来上传和下载文件了。vsftpd服务器默认使用匿名登录,即用户名为anonymous,密码为空(直接回车即可)。

执行本地shell命令

案例演示2:

显示本地主机的当前目录,将本地主机的当前目录修改为/home目录,然后显示当前目录下的文件信息,可以使用如下命令:

  1. !pwd
  2. lcd /home
  3. !ls

Linux友人帐之网络编程基础FTP服务器_第33张图片

[请在右侧“命令行”里直接体验]

执行远程shell命令

案例演示3

显示远程主机的当前目录,将远程主机的当前目录修改为/tmp目录,然后显示当前目录下的文件信息,可以使用如下命令:

  1. pwd
  2. cd /tmp
  3. ls

Linux友人帐之网络编程基础FTP服务器_第34张图片

[请在右侧“命令行”里直接体验]

上传文件

案例演示4

在远程主机上新建一个目录newDir,然后将本地的文件/home/fzm/test.c上传到远程主机newDir目录下并重命名为newTest.c,可以使用如下命令:

  1. mkdir newDir
  2. send /home/fzm/test.c ./newDir/newTest.c

Linux友人帐之网络编程基础FTP服务器_第35张图片

[请在右侧“命令行”里直接体验]

下载文件

案例演示5:

将远程主机上的文件/tmp/newDir/newTest.c下载到本地/home/fzm目录下并重新命名为oldTest.c,然后将远程主机上的newDir目录删除,可以使用如下命令:

  1. cd /tmp
  2. recv newDir/newTest.c /home/fzm/oldTest.c
  3. delete newDir/newTest.c
  4. rmdir newDir

Linux友人帐之网络编程基础FTP服务器_第36张图片

[请在右侧“命令行”里直接体验]

退出远程连接

案例演示6:

终止远程主机的连接,然后退出ftp管理程序,可以使用如下命令:

  1. close
  2. bye

[请在右侧“命令行”里直接体验]

编程要求

本关任务是学会如何使用ftp命令上传下载远程主机文件。

注意:在执行本关任务前,首先执行如下命令来初始化任务环境。

  1. apt-get update
  2. apt-get install ftp
  3. touch testFile
  4. 向文件 `/etc/vsftpd.conf` 结尾追加三行 anon_root=/、anon_other_write_enable=YES 和 anon_umask=022 。同时将 anon_upload_enable=YES、write_enable=YES和anon_mkdir_write_enable=YES 前的 # 符号删除,并将 anonymous_enable 设置为 YES。

注意:平台上使用的vsftpd的配置文件对应需要修改的配置项位置如下所示(需要手动添加的配置项只需在文件默认添加即可):

Linux友人帐之网络编程基础FTP服务器_第37张图片

Linux友人帐之网络编程基础FTP服务器_第38张图片

具体编程要求如下:

  • 启动vsftpd服务;
  • 使用ftp命令连接本机(将本机作为远程服务器);
  • 切换远程服务器的当前工作目录为tmp
  • 在远程服务器上新建一个目录Dir
  • 将本地的一个文件(/root/testFile)上传到远程主机的Dir目录下并重命名为upLoadFile

ftp连接远程服务器时报错
USER ***
331Please specify password
PASS ***
530 Login incorrect
---------------->
经过大量排查发现了错误,是因为用户鉴权问题没解决好,(因为用户是nologin的,所以存在)
解决方法:
第一种:

vi /etc/pam.d/vsftpd
注释掉/etc/pam.d/vsftpd文件里这一行:
#auth required pam_shells.so

#%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
如图:


第二种:

vi /etc/shells
在最后一行下边加上

/sbin/nologin
值得注意的是 添加完之后的代码下一行必须是~

两种方式任选一种就可以啦~

这样最后重启服务器就可以解决啦!

# 启动vsftpd服务
sudo service vsftpd start

# 使用t命令连接本机(将本机作为远程服务器)
ftp -n <本机IP地址>

# 切换远程服务器的当前工作目录为tmp
cd /tmp

# 在远程服务器上新建一个目录Dir
mkdir Dir

# 将本地的文件(/root/testFile)上传到远程主机的Dir目录下并重命名为upLoadFile
put /root/testFile Dir/upLoadFile

# 退出FTP连接
bye

 2.4FTP服务器配置

任务描述

通过以上关卡的学习,我们学会了使用ftp命令来登录远程主机,并进行文件的上传和下载操作。接下来我们来学习如何配置vsftpd服务器。

本关任务:学会vsftpd服务器的常见配置。

相关知识

上一关卡中,我们在案例演示前进行了一系列环境的初始化,现在我们详细的介绍为什么我们要做那些环境的配置。

vsftpd服务器提供了很多的配置项,每个配置项都有不同的功能,接下来,我们介绍vsftpd常见的配置项功能,vsftpd服务器的配置文件存放路径为:/etc/vsftpd.conf,部分Linux系统是存放在/etc/vsftpd/vsftpd.conf目录下。

vsftpd服务器的连接方式有两种,一种是可以使用匿名(anonymous)登录,另一种是可以使用本地用户进行远程登录,默认情况下是使用匿名登录。

ftp匿名登录

常见关于匿名登录的配置项如下所示:

  1. anonymous_enable: 是否允许匿名登录 FTP 服务器,默认设置为 YES 允许,如不允许匿名访问则设置为 NO;
  2. anon_upload_enable:是否允许匿名用户上传文件,须将全局的 write_enable=YES。默认为 YES;
  3. anon_mkdir_write_enable:是否允许匿名用户创建新文件夹;
  4. anon_other_write_enable:是否允许匿名用户对文件或目录进行删除、重命名等操作;
  5. anon_root: 匿名用户的默认工作目录;
  6. anon_umask: 匿名用户的文件掩码为缺省 022。

案例演示1:

禁止使用匿名用户登录ftp服务器,具体使用如下步骤:

  1. 设置 anonymous_enable=NO(sudo vim /etc/vsftpd.conf)
  2. sudo service vsftpd restart
  3. ftp localhost

Linux友人帐之网络编程基础FTP服务器_第39张图片

[修改配置文件]

Linux友人帐之网络编程基础FTP服务器_第40张图片

[请在右侧“命令行”里直接体验]

可以看到当我们把`anonymous_enable=NO`后,同时`vsftpd`又默认禁止本地用户登录,所以在远程连接主机时就会出现错误。
ftp本地用户登录

常见关于本地用户登录服务器的配置项如下所示:

  1. local_enable: 是否允许本地用户(即 linux 系统中的用户帐号)登录 FTP 服务器,默认设置为 NO 允许,本地用户登录后会进入用户主目录;
  2. write_enable:是否允许本地用户对 FTP 服务器文件具有写权限,默认设置为 YES 允许;
  3. chroot_local_user:是否将所有用户限制在主目录, YES 为启用 NO 禁用;
  4. chroot_list_enable:是否启动限制用户的名单 YES 为启用 NO 禁用;
  5. chroot_list_file:是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于 chroot_local_user 的值;
  6. local_root: 本地用户登录后的默认工作目录;
  7. local_umask: 设置本地用户的文件掩码为缺省 022;
  8. userlist_enable:此选项激活后,vsftpd 将读取 userlist_file 参数所指定的文件中的用户列表,默认为 NO;
  9. userlist_file:userlist_enable 选项生效后,被读取的包含用户列表的文件。默认值是 /etc/vsftpd.user_list;
  10. userlist_deny:决定禁止还是只允许由 userlist_file 指定文件中的用户登录 FTP 服务器。userlist_enable 选项启动后才能生效。默认值为 YES,禁止userlist_file 指定文件中的用户登录,同时不向这些用户发出输入口令的指令。NO,只允许 userlist_file 指定文件中的用户登录FTP服务器;

chroot_local_userchroot_list_enablechroot_list_file三个配置项间的关联关系如下表所示:

chroot_local_user=YES chroot_local_user=NO
chroot_list_enable=YES 1. 所有用户都被限制在其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制 1.所有用户都不被限制其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制
chroot_list_enable=NO 1.所有用户都被限制在其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户 1.所有用户都不被限制其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户

userlist_enableuserlist_denyuserlist_file三个配置项间的关联关系如下表所示:

userlist_enable=YES userlist_enable=NO
userlist_deny=YES 禁止userlist_file指定文件中的用户登录,同时不向这些用户发出输入口令的指令 不影响用户登录
userlist_deny=NO 只允许userlist_file指定文件中的用户登录 不影响用户登录

案例演示环境初始化:如果用户想在本平台的右侧命令行进行验证如下案例,则需要将vsftpd的配置文件(/etc/vsftpd.conf)中pam_service_name=vsftpd修改为pam_service_name=ftp,笔者建议用户在本地的Ubuntu 12.04系统上进行验证。

案例演示1:

新建一个本地用户(ftpUser,密码为123456),然后配置vsftpd服务允许本地用户登录,使用ftpUser远程连接主机,具体使用如下步骤:

  1. sudo useradd ftpUser
  2. sudo passwd ftpUser
  3. 设置 local_enable=YES(sudo vim /etc/vsftpd.conf)
  4. sudo service vsftpd restart
  5. ftp localhost

[请在右侧“命令行”里直接体验]

[修改配置文件]

Linux友人帐之网络编程基础FTP服务器_第41张图片

[请在右侧“命令行”里直接体验]

案例演示2:

所有用户限制在主目录不能进行其它目录的切换(除主目录外),使用ftpUser进行远程连接验证,具体使用如下步骤:

  1. 设置 chroot_local_user=YES(sudo vim /etc/vsftpd.conf)
  2. sudo chmod a-w /home/ftpUser
  3. sudo service vsftpd restart
  4. ftp localhost

[修改配置文件]

Linux友人帐之网络编程基础FTP服务器_第42张图片

[请在右侧“命令行”里直接体验]

注意:如果启用chroot,必须保证登录ftp服务器的用户根目录不可写,因此要执行sudo chmod a-w /home/ftpUser(因为是使用ftpUser用户登录,如果其它用户登录则修改对应的根目录)。

可以发现登录后,我们切换当前目录为/,然后列出当前目录下的所有文件,发现只存在一个文件,因为此时的/目录不是我们整个系统的根目录,这里的根目录其实只是/home/ftpUser目录而已。

案例演示3:

禁止/etc/vsftpd/userlist文件中的用户登录ftp服务器,使用ftpUser用户进行验证,具体使用如下步骤:

  1. 设置 userlist_deny=YES、userlist_enable=YES和userlist_file=/etc/vsftpd/user_list(sudo vim /etc/vsftpd.conf)
  2. sudo mkdir /etc/vsftpd/
  3. sudo touch etc/vsftpd/user_list
  4. 向 /etc/vsftpd/user_list 文件中添加一行内容 ftpUser(sudo vim /etc/vsftpd/user_ist)
  5. sudo service vsftpd restart
  6. ftp localhost

[修改配置文件]

[请在右侧“命令行”里直接体验]

[向/etc/vsftpd/user_list文件中添加ftpUser]

Linux友人帐之网络编程基础FTP服务器_第43张图片

[请在右侧“命令行”里直接体验]

vsftpd其它配置

常见其它配置项如下所示:

  1. data_connection_timeout:设置数据连接超时时间;
  2. idle_session_timeout:设置数据传输中断间隔时间;
  3. ascii_upload_enable:是否以 ASCII 方式上传数据;
  4. ascii_download_enable:是否以 ASCII 方式下载数据;
编程要求

本关任务是学会如何配置ftp服务器。

注意:在执行本关任务前,首先执行如下命令来初始化任务环境。

  1. useradd -m newUser
  2. passwd newUser(设置密码为:123456)
  3. touch testFile
  4. 将 vsftpd 的配置项 pam_service_name 的值修改为 ftp

具体编程要求如下:

  • 使用newUser进行连接本地ftp服务器;
  • /root/testFile文件上传到远程服务器的当前工作目录下并重命名为upLoadFile
# 连接到远程服务器
ftp <远程服务器IP地址>

# 登录到FTP服务器
<用户名>
<密码>

# 创建名为upLoadFile的文件
touch upLoadFile

# 上传/root/testFile文件到远程服务器的当前工作目录下,并将其重命名为upLoadFile
put /root/testFile upLoadFile

# 退出FTP连接
bye

 

你可能感兴趣的:(Linux,服务器,linux,网络)