课程名称 Linux网络操作系统
实验名称 vsftpd服务器的搭建
实验一 vsftpd服务器的搭建
- 实验目的及要求
- 实现虚拟机和物理机之间的连通
- 实现物理机上以匿名用户,本地用户,虚拟用户登录ftp服务器
- 实现以上三种身份的登录,上传,下载。由于本地用户权限高,所以为其增加锁定限制,限制其活动路径的范围。
- 实验环境
虚拟机:CentOS7 物理机:Win10
- 实验内容
1. 在虚拟机上安装vsftpd
2. 实现物理机,虚拟机之间的连通
3. 在物理机上实现匿名用户的登录、上传和下载操作
4. 在物理机上实现本地用户的登录、上传和下载操作
5. 在物理机上实现虚拟用户的登录、上传和下载操作
- 实验步骤
- 安装vsftpd
- 检查虚拟机是否有vsftpd安装源,如下图
如存在安装源则会像图中所显示所显示的,输出vsftpd版本号
- 如没有显示版本号,则切换至root用户进行下载安装,如下图
下载过程中选择y(yes)即可,若下载完成会输出complete,若出现错误可根据失败提示解决
- 实现物理机和虚拟机之间的连通
- 打开虚拟机左上角 Workstation à 编辑 à 虚拟网络编辑器,如下图
启用NAT模式(NAT模式默认对应VM8)
- 在物理机下打开cmd,查看物理机ip,如下图
- 在虚拟机终端中查看虚拟网卡的ip
- 虚拟机,物理机互ping,如下图
虚拟机ping主机:
若连通则如上图所示
物理机ping虚拟机:
若连通则如上图所示
若出现超时,或者目的不可达,可检查网络状态是否顺畅,防火墙是否关闭
- 物理机以匿名用户登录ftp服务器,并实现上传,下载操作
3.1修改(检查)vsftpd.conf配置文件,赋予匿名用户用户登录上传下载权限
vsftpd.conf为vsftpd的配置文件,若要修改,最好在第一次修改前进行备份,以便在出现错误后进行还原(在以下修改配置文件时,不再进行赘述)
前有’#’的为注释行,即不生效的语句,若要使其生效,去掉最前面的’#’即可
打开文件后按i进入编辑模式,按Esc进入命令模式,其中:wq为保存退出,:!q为强制退出不保存
此时配置文件中,允许匿名用户,本地用户登录
匿名用户配置如下图:
上述为匿名用户登录的ftp服务器的根目录
若配置没有生效,在物理机进行操作时会报错,如下图:
此为匿名用户没有上传权限的错误,此处不一一列出,有不同报错自行去百度,根据提示解决问题
- 物理机登录
匿名用户成功登陆,如下图:
匿名用户登陆时,提示输入密码,直接Enter即可,不需输入密码
- 物理机下载(去磁盘看一下有没有下载成功)
如下图所示,get为下载命令,!+command可以使用win的命令,很显然下载成功
- 物理机上传(去虚拟机看一下有木有 有木有或者直接去cmd看目录)
如下图所示:
显然,上传成功
- 物理机以本地用户登录ftp服务器,并实现上传,下载操作
- 修改配置文件,如下图:
上图为新增chroot_list,凡是出现在此文件中的本地用户都被限制在local_root路径下,即此路径为其登录后的ftp服务器的根目录,由此实现对本地用户的限制,确保安全,如下图所示
- 本地用户登陆,上传及下载:
下载:
上传:
- 物理机以虚拟用户登录ftp服务器,并实现上传,下载操作
- 添加宿主用户
新建系统用户vsftpd,用户目录为/home/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统)
所配置的虚拟用户其实都是映射成配置的宿主用户。
- 建立虚拟用户名单
- 编辑虚拟用户名单文件,第一行账号,第二行密码,注意:不能使用root做用户名,系统保留
- 生成虚拟用户数据文件
- 修改认证方式
注意如果系统为32位,上面lib64需要改为lib,否则不生效
- 建立虚拟用户个人Vsftpd的配置文件
建立目录:
编辑虚拟用户配置文件(配置文件名必须为虚拟用户名):
配置vsftpd:
- 重启服务器
- 登录,上传及下载:
上传
登陆成功,发现虚拟用户没有上传权限,那么修改配置文件:
上传成功:
下载:
五、实验心得
在开始开始写这个实验的时候,本来信心满满,大概就两个小时的事儿吧,但是我被ftp服务器拒绝连接拒绝了两个星期。
拒绝连接的一些可能的原因:
- 虚拟机防火墙未关闭,如果不想关闭防火墙,可以把ftp的端口打开,同样可以进行连接
- 没有打开vsftpd
- 配置文件更改的时候发生错误,比如多加了几个空格,有的该注释的没有注释,不该注释的注释了。不过在虚拟机上连接ftp的时候可以查看原因(systemctl status vsftpd.service -l),如果是配置文件的问题,这个提示真的很有用!!!然后根据错误提示进行修改就可以了。
- 最后一个原因真的狗血,因为我就是这个原因,被自己蠢哭。我登录的ip地址写错了,在物理机ipconfig查看到的是VM8的ip,但并不是虚拟机的ip,只是在同一网段(总而言之就是ip很重要!一定要对!)。以下是百度的解释:
血的教训
连接超时遇到的问题:
- 物理机ping虚拟机,收到回复:主机不可访问,原因:网关地址没有填写,或和物理主机网关地址不同
在我进行测试时也遇到了很多问题竟然,在网上解决问题时也发现了很多有趣的解决办法。
- 在匿名用户实现上传时,我的物理机报了如下错误:
很显然,不能创建文件,第一想到在vsftpd配置文件中已授权,那么就是ftp服务器下文件的权限不够,所以去修改服务器下文件夹的权限为777,但是仍然没有解决问题,后来发现是selinux限制的问题。解决如下图(不关掉selinux的解决方法:
https://www.jb51.net/article/130915.htm):
先运行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
- PS: priv_sock_get_cmd
就是你把VSFTPD的根目录给了777的权限了,把它改成755,然后再在这个目录里建文件夹,可以给777的权限(如果ftp被强制改成777的权限是会报错的,根目录不能是777的权限),改完之后,重启服务器,重新登录,上传成功
- 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的配置文件改得面目全非,有些语句漏了没写,比如:
这个真的很重要!!!所以下次改的时候不能全删,不用的注释就好了
在配置虚拟用户的时候多谢这位老哥的详细讲解
(),我就是跟着他一步一步来的,所以没有什么问题(除了权限问题,还有配置文件不完全)。