课程名称     Linux网络操作系统    

 

实验名称     vsftpd服务器的搭建          

 

实验一  vsftpd服务器的搭建

 

  • 实验目的及要求

 

  1. 实现虚拟机和物理机之间的连通
  2. 实现物理机上以匿名用户,本地用户,虚拟用户登录ftp服务器
  3. 实现以上三种身份的登录,上传,下载。由于本地用户权限高,所以为其增加锁定限制,限制其活动路径的范围。

 

  • 实验环境

 

            虚拟机:CentOS7  物理机:Win10

 

  • 实验内容

 

            1. 在虚拟机上安装vsftpd

            2. 实现物理机,虚拟机之间的连通

            3. 在物理机上实现匿名用户的登录、上传和下载操作

            4. 在物理机上实现本地用户的登录、上传和下载操作

            5. 在物理机上实现虚拟用户的登录、上传和下载操作

 

  • 实验步骤

 

  1. 安装vsftpd

 

  1. 检查虚拟机是否有vsftpd安装源,如下图

 

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_ftp

如存在安装源则会像图中所显示所显示的,输出vsftpd版本号

 

  1. 如没有显示版本号,则切换至root用户进行下载安装,如下图

 

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_centos_02

下载过程中选择y(yes)即可,若下载完成会输出complete,若出现错误可根据失败提示解决

 

  1. 实现物理机和虚拟机之间的连通

 

  1. 打开虚拟机左上角 Workstation à 编辑 à 虚拟网络编辑器,如下图

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_centos_03

启用NAT模式(NAT模式默认对应VM8)

  1. 在物理机下打开cmd,查看物理机ip,如下图

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_04

 

  1. 在虚拟机终端中查看虚拟网卡的ip

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_上传_05

  1. 虚拟机,物理机互ping,如下图

虚拟机ping主机:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_ftp_06

若连通则如上图所示

 

物理机ping虚拟机:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_07

若连通则如上图所示

若出现超时,或者目的不可达,可检查网络状态是否顺畅,防火墙是否关闭

 

  1. 物理机以匿名用户登录ftp服务器,并实现上传,下载操作

3.1修改(检查)vsftpd.conf配置文件,赋予匿名用户用户登录上传下载权限

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_centos_08

vsftpd.conf为vsftpd的配置文件,若要修改,最好在第一次修改前进行备份,以便在出现错误后进行还原(在以下修改配置文件时,不再进行赘述)

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_配置文件_09

前有’#’的为注释行,即不生效的语句,若要使其生效,去掉最前面的’#’即可

打开文件后按i进入编辑模式,按Esc进入命令模式,其中:wq为保存退出,:!q为强制退出不保存

此时配置文件中,允许匿名用户,本地用户登录

 

匿名用户配置如下图:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_10

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_11

 

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_centos_12

上述为匿名用户登录的ftp服务器的根目录

 

若配置没有生效,在物理机进行操作时会报错,如下图:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_ftp_13

此为匿名用户没有上传权限的错误,此处不一一列出,有不同报错自行去百度,根据提示解决问题

 

  1. 物理机登录

匿名用户成功登陆,如下图:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_上传_14

匿名用户登陆时,提示输入密码,直接Enter即可,不需输入密码

  1. 物理机下载(去磁盘看一下有没有下载成功)

如下图所示,get为下载命令,!+command可以使用win的命令,很显然下载成功

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_centos_15

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_配置文件_16

 

  1. 物理机上传(去虚拟机看一下有木有 有木有或者直接去cmd看目录)

如下图所示:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_17

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_上传_18

显然,上传成功

  1. 物理机以本地用户登录ftp服务器,并实现上传,下载操作
  1. 修改配置文件,如下图:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_配置文件_19

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_上传_20

上图为新增chroot_list,凡是出现在此文件中的本地用户都被限制在local_root路径下,即此路径为其登录后的ftp服务器的根目录,由此实现对本地用户的限制,确保安全,如下图所示

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_centos_21

 

  1. 本地用户登陆,上传及下载:

下载:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_配置文件_22

 

 

上传:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_ftp_23

 

  1. 物理机以虚拟用户登录ftp服务器,并实现上传,下载操作
  1. 添加宿主用户

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_配置文件_24

新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统)

所配置的虚拟用户其实都是映射成配置的宿主用户。

  1. 建立虚拟用户名单

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_25

  1. 编辑虚拟用户名单文件,第一行账号,第二行密码,注意:不能使用root做用户名,系统保留

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_上传_26

 

  1. 生成虚拟用户数据文件

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_27

  1. 修改认证方式

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_centos_28

 

注意如果系统为32位,上面lib64需要改为lib,否则不生效

  1. 建立虚拟用户个人Vsftpd的配置文件

建立目录:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_配置文件_29

编辑虚拟用户配置文件(配置文件名必须为虚拟用户名):

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_30

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_上传_31

 

配置vsftpd:

 

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_centos_32

  1. 重启服务器
  2. 登录,上传及下载:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_33

上传

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_上传_34

登陆成功,发现虚拟用户没有上传权限,那么修改配置文件:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_linux_35

上传成功:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_上传_36

下载:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_ftp_37

 

 

五、实验心得

            在开始开始写这个实验的时候,本来信心满满,大概就两个小时的事儿吧,但是我被ftp服务器拒绝连接拒绝了两个星期。

            拒绝连接的一些可能的原因:

  1. 虚拟机防火墙未关闭,如果不想关闭防火墙,可以把ftp的端口打开,同样可以进行连接
  2. 没有打开vsftpd
  3. 配置文件更改的时候发生错误,比如多加了几个空格,有的该注释的没有注释,不该注释的注释了。不过在虚拟机上连接ftp的时候可以查看原因(systemctl status vsftpd.service -l),如果是配置文件的问题,这个提示真的很有用!!!然后根据错误提示进行修改就可以了。
  4. 最后一个原因真的狗血,因为我就是这个原因,被自己蠢哭。我登录的ip地址写错了,在物理机ipconfig查看到的是VM8的ip,但并不是虚拟机的ip,只是在同一网段(总而言之就是ip很重要!一定要对!)。以下是百度的解释:

血的教训

            连接超时遇到的问题:

  1. 物理机ping虚拟机,收到回复:主机不可访问,原因:网关地址没有填写,或和物理主机网关地址不同

 

在我进行测试时也遇到了很多问题竟然,在网上解决问题时也发现了很多有趣的解决办法。

  1. 在匿名用户实现上传时,我的物理机报了如下错误:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_配置文件_38

很显然,不能创建文件,第一想到在vsftpd配置文件中已授权,那么就是ftp服务器下文件的权限不够,所以去修改服务器下文件夹的权限为777,但是仍然没有解决问题,后来发现是selinux限制的问题。解决如下图(不关掉selinux的解决方法:

https://www.jb51.net/article/130915.htm):

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_配置文件_39

先运行getsebool -a | grep ftp (查看selinux里有哪些关于ftp的)

接下来我们allow_ftpd_anon_write allow_ftpd_full_access 这两个ON掉

如果出现

500 OOPS: vsftpd: refusing to run with writable anonymous root

  1. PS: priv_sock_get_cmd

就是你把VSFTPD的根目录给了777的权限了,把它改成755,然后再在这个目录里建文件夹,可以给777的权限(如果ftp被强制改成777的权限是会报错的,根目录不能是777的权限),改完之后,重启服务器,重新登录,上传成功

  1. vsftpd只能匿名登录,本地用户出现530错误的一个实例

(https://luy.li/2010/03/15/vsftpd_localuser_530/)

网上很多教程,在介绍vsftpd的本地用户的配置的时候,大意都是这样的:

建立一个xxx用户,家目录为/yyy/zzz,并把这个用户的shell(/etc/passwd里对应行的最后一列)设置成/sbin/nologin或者是/bin/false,再设置一个密码。

            然后修改vsftpd的配置文件,一般是/etc/vsftpd.conf,加上:

 

local_enable=YES
        write_enable=YES
        local_umask=022

 

            然后重启vsftpd就可以了。

 

对于出现530 Login incorrect. 的解释一般是两种:

1. xxx用户对 /yyy/zzz 没有权限。

2. xxx用户被加到 /etc/vsftpd.user_list 列表里了。

但是我今天的操作中,这个新建的用户并没有发现以上两种现象,仍然出现了可恶的530错误,但是匿名用户正常登录。

折腾半天以后,发现用一个shell是/bin/bash的用户却是可以登录ftp的。于是,试着把xxx用户的shell也改成/bin/bash,果然也可以登录了。但是这样显然还没有解决我的问题,因为这样一来,xxx这个用户都可以通过ssh登录服务器了,安全就没有保障了。

于是再找更详细的原因,终于发现了:

其实vsftpd对本地用户鉴权的过程中是可以检查用户shell的合法性的,而且默认就启用了。虽然你可以在配置文件中通过添加

 

check_shell=NO

 

来取消vsftpd对shell的检测,但是这个配置项要生效却有个前提:编译的时候不能包含PAM特性(一种*nix系统中的插件式身份鉴别模块),而ubuntu等发行版的二进制包并不能满足这点,所以除非你是自己编译的vsftpd,这个配置项是没有多少用的。

要解决这个问题,还得继续问:vsftpd是怎么检查一个shell是否合法呢?其实这个答案很简单,vsftpd读取 /etc/shells 这个文件,如果用户的shell在这个文件里存在,就认为合法,否则即使你输入了正确的密码,仍然会给你一个530,哈哈。

所以,解决办法就是:把 /sbin/nologin 或者是 /bin/false 加到 /etc/shells 中去!

 

虽然我的问题不再于此,但看了之后感觉受益匪浅。我报530的主要原因是我将vsftpd的配置文件改得面目全非,有些语句漏了没写,比如:

物理服务器 没有存储 可以直接做虚拟化吗 物理服务器搭建_上传_40

这个真的很重要!!!所以下次改的时候不能全删,不用的注释就好了

 

            在配置虚拟用户的时候多谢这位老哥的详细讲解

(),我就是跟着他一步一步来的,所以没有什么问题(除了权限问题,还有配置文件不完全)。