文件传输协议(FTP):

文件传输协议(FTP,File Transfer Protocol),即能够让用户在互联网中上传、下载文件的文件协议,而FTP服务器就是支持FTP传输协议的主机,要想完成文件传输则需要FTP服务端和FTP客户端的配合才行。

通常用户使用FTP客户端软件向FTP服务器发起连接并发送FTP指令,服务器收到用户指令后将执行结果返回客户端。

FTP协议占用两个端口号:

21端口:命令控制,用于接收客户端执行的FTP命令。

20端口:数据传输,用于上传、下载文件数据。

FTP数据传输的类型:

主动模式:FTP服务端主动向FTP客户端发起连接请求。

被动模式:FTP服务端等待FTP客户端的连接请求。

Vsftpd的主程序与配置文件

主程序:/usr/sbin/vsftpd

用户禁止登陆列表:/etc/vsftpd/ftpusers  /etc/vsftpd/user_list

主配置文件:/etc/vsftpd/vsftpd.conf

                        

vsftpd程序配置文件参数的作用:

 一、匿名访问模式

匿名访问:任何人无需验证口令即可登入FTP服务端。

FTP匿名访问模式是比较不安全的服务模式,尤其在真实的工作环境中千万不要存放敏感的数据,以免泄露。

第1步:安装完vsftpd服务后,打开服务查看服务状态。

第2步:vsftpd程序默认已经允许匿名访问模式,我们要做的就是开启匿名用户的上传和写入权限,写入下面的参数:

修改完后重启服务。

第3步:在物理机上输入输入ftp://+ip查看

但是进去之后是空的,物理机上无对文件操作的权限,需要在虚拟机改一下权限。

也可以在另一台虚拟机终端用ftp命令+IP去访问,但是匿名用户无写入等权限,需要把所有者修改为ftp(chown ftp /var/ftp/pub )

[root@linuxprobe ~]# ftp 192.168.2.100       #这里指作为服务器的虚拟机IP

Connected to 192.168.10.10 (192.168.10.10).

220 (vsFTPd 3.0.2)

Name (192.168.10.10:root): anonymous

331 Please specify the password.

Password:敲击回车

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>cd pub

250 Directory successfully changed.

ftp>mkdir files

257 "/pub/files" created

ftp>rename files database

350 Ready for RNTO.

250 Rename successful.

ftp>rmdir database

250 Remove directory operation successful.

ftp>exit

221 Goodbye.

这里在客户端里去pub下创建文件夹会报错,比如550,因为服务器中pub文件夹没有给其他用户写的权限也或者是没有关闭selinux。

找到ftp/pub 更改权限

如果是selinux的问题,做如下更改 vim /etc/selinux/config 更改玩后需要重启虚拟机。或者用setenforce 0命令关闭selinux就可以不用重启虚拟机。

二、本地用户模式

本地用户模式确实要比匿名访问模式更加的安全,所以本实验中会关闭匿名访问模式。

vsftpd服务程序默认已经允许本地用户模式,我们要做的是添加设置本地用户模式权限的参数:

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf

参数

作用

anonymous_enable=NO

禁止匿名访问模式。

local_enable=YES

允许本地用户模式。

write_enable=YES

设置可写入权限。

local_umask=022

本地用户模式创建文件的umask值。

userlist_deny=YES

参数值为YES即禁止名单中的用户,参数值为NO则代表仅允许名单中的用户。

userlist_enable=YES

允许“禁止登陆名单”,名单文件为ftpusers与user_list。

确认填写正确后保存并退出vsftpd.conf文件,然后重启vsftpd服务程序并设置为开机自启动。

[root@linuxprobe ~]# systemctl restart vsftpd
[root@linuxprobe ~]# systemctl enable vsftpd

如果重启vsftpd服务程序时没有报错,此时便可以使用FTP客户机(192.168.2.100)尝试登入FTP服务了~

我们先来看下ftpusers或user_list文件中禁止登陆用户名单:

root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

root用户是禁止登录的,所以需要在服务器新建一个普通用户然后切换到客户端用普通用户的账号密码登录ftp服务器。我这里新建的用户为zzw

[root@linuxprobe ~]# ftp 192.168.2.100

Connected to 192.168.2.100 (192.168.2.100).

220 (vsFTPd 3.0.2)

Name (192.168.10.10:root): zzw           #新建的用户

331 Please specify the password.

Password:输入新建用户本地密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>mkdir files

257 "/home/linuxprobe/files" created

ftp>rename files database

350 Ready for RNTO.

250 Rename successful.

ftp>rmdir database

250 Remove directory operation successful.

ftp>exit

221 Goodbye.

三、虚拟用户模式

因为虚拟用户模式的帐号口令都不是真实系统中存在的,所以只要配置妥当虚拟用户模式会比本地用户模式更加安全,但是Vsftpd服务配置虚拟用户模式的操作步骤相对复杂一些,具体流程如下:

第1步:建立虚拟FTP用户数据库文件。

第2步:创建FTP根目录及虚拟用户映射的系统用户。

第3步:建立支持虚拟用户的PAM认证文件。

第4步:在vsftpd.conf文件中添加支持配置。

第5步:为虚拟用户设置不同的权限。

第6步:重启vsftpd服务,验证实验效果。

第1步:建立虚拟FTP用户数据库文件。

切换至vsftpd程序目录:

[root@linuxprobe ~]# cd /etc/vsftpd/

创建用于生成FTP用户数据库的原始帐号和密码文件:

[root@linuxprobe vsftpd]# vim vuser.list

//单数行为帐号,双数行为密码。

linuxprobe

pa33w0rd

blackshield

pa22w1rd

使用db_load命令用HASH算法生成FTP用户数据库文件vuser.db:

[root@linuxprobe vsftpd]# db_load -T -t hash -f vuser.list vuser.db

查看数据库文件的类型:

[root@linuxprobe vsftpd]# file vuser.db

vuser.db: Berkeley DB (Hash, version 9, native byte-order)

FTP用户数据库内容很敏感,所以权限给小一些:

[root@linuxprobe vsftpd]# chmod 600 vuser.db

删除原始的帐号和密码文件:

[root@linuxprobe vsftpd]# rm -f vuser.list

第2步:创建FTP根目录及虚拟用户映射的系统用户。

创建用户virtual并设置为不允许登陆系统并定义该用户的家目录:

[root@linuxprobe ~]# useradd -d /var/ftproot -s /sbin/nologin virtual

查看该用户的家目录权限:

[root@linuxprobe ~]# ls -ld /var/ftproot/

drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/

为保证其他用户可以访问,给予rwxr-xr-x权限:

[root@linuxprobe ~]# chmod -Rf 755 /var/ftproot/

第3步:建立支持虚拟用户的PAM认证文件:

[root@linuxprobe ~]# vim /etc/pam.d/vsftpd.vu

//参数db用于指向刚刚生成的vuser.db文件,但不要写后缀。

auth       required     pam_userdb.so db=/etc/vsftpd/vuser

account    required     pam_userdb.so db=/etc/vsftpd/vuser

第4步:在vsftpd.conf文件中添加支持配置。

既然要使用虚拟用户模式,而虚拟用户模式确实要比匿名访问模式更加的安全,配置的同时也关闭匿名开放模式。

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf

参数

作用

anonymous_enable=NO

禁止匿名开放模式。

local_enable=YES

允许本地用户模式。

guest_enable=YES

开启虚拟用户模式。

guest_username=virtual

指定虚拟用户帐号。

pam_service_name=vsftpd.vu

指定pam文件。

allow_writeable_chroot=YES

允许禁锢的FTP根目录可写而不拒绝用户登入请求。

第5步:为虚拟用户设置不同的权限


现在不论是zzw1还是zzw2帐户,他们的权限都是相同的——默认不能上传、创建、修改文件,如果希望用户zzw2能够完全的管理FTP内的资料,就需要让FTP程序支持独立的用户权限配置文件了:
指定用户独立的权限配置文件存放的目录:

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers_dir

创建用户独立的权限配置文件存放的目录:

[root@linuxprobe ~]# mkdir /etc/vsftpd/vusers_dir/

切换进入到该目录中:

[root@linuxprobe ~]# cd /etc/vsftpd/vusers_dir/

创建空白的zzw1的配置文件:

[root@linuxprobe vusers_dir]# touch zzw1

指定zzw2用户的具体权限:

[root@linuxprobe vusers_dir]# vim zzw2

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

第6步:重启vsftpd服务,验证实验效果。

确认填写正确后保存并退出vsftpd.conf文件,重启vsftpd程序并设置为开机后自动启用:

[root@linuxprobe ~]# systemctl restart vsftpd
[root@linuxprobe ~]# systemctl enable vsftpd

[root@linuxprobe ~]# ftp 192.168.2.100

Connected to 192.168.2.100

220 (vsFTPd 3.0.2)

Name (192.168.10.10:root): zzw2

331 Please specify the password.

Password:此处输入虚拟用户的密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>mkdir files

257 "/files" created

ftp>rename files database

350 Ready for RNTO.

250 Rename successful.

ftp>rmdir database

250 Remove directory operation successful.

ftp>exit

221 Goodbye.

使用zzw1用户创建(肯定会报错):

[root@linuxprobe ~]# ftp 192.168.2.100

Connected to 192.168.2.100

220 (vsFTPd 3.0.2)

Name (192.168.10.10:root): zzw1

331 Please specify the password.

Password:此处输入虚拟用户的密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>mkdir files

550 Permission denied.

ftp>exit

221 Goodbye.

tip:如果在客户端ftp连接服务器时出现500错误找不到用户的话,需要看一下第一步中vuser.list文件中有没有敲错东西。

Linux vsftpd服务配置以及三种验证方式以及常见错误解决办法的更多相关文章

  1. Linux vsftpd服务配置具体解释

    [背景] 近日.一朋友dominoserver要进行升级.迁移,搭建了linux測试系统,也开启vsftpd服务,但是配置的ftp账号,程序无法正常下载附件. [问题跟踪] 通过ftpclient连接 ...

  2. linux配置redis三种启动方式

    下载 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 解压 tar -xzf redis-4.0.9.tar.gz -C /usr/ ...

  3. linux vsftpd 服务配置

    vsftpd.conf配置如下: # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings ...

  4. Spring随笔 —— IOC配置的三种不同方式简介

    在spring framework中,IOC的配置是最基础的部分,常见的配置方式有基于xml文件和基于注解的配置方式.除了这两种配置方式之外,今天这里再介绍另一种配置方式,先用小demo重温下我们熟悉 ...

  5. linux编译安装时常见错误解决办法

    This article is post on https://coderwall.com/p/ggmpfa 原文链接:http://www.bkjia.com/PHPjc/1008013.html ...

  6. Linux常见错误解决办法

    1. 程序运行的一些基础知识 1. 编译程序时去哪找头文件? 系统目录:就是交叉编译工具链里的某个 include 目录:也可以自己指定:编译时用 " -I dir "选项指定. ...

  7. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  8. Telnet的三种登录方式

    Telnet的三种登录方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.华为创建telnet的三种验证方式 首先,我们可以简单的看一个拓扑图,让我们可以在亦庄的路由器上对双桥 ...

  9. Linux下ftp安装配置及三种用户的验证

    一.原理简介 二.安装配置 三.三种用户的验证 一.简介 FTP即文件传输协议(File Transfer Protocol),完成各主机的文件共享功能,基于客户端-服务器的协议,工作在应用层,tcp ...

随机推荐

  1. luoguP2590 [ZJOI2008]树的统计(树链剖分)

    luogu P2590 [ZJOI2008]树的统计 题目 #include<iostream> #include<cstdlib> #include<cstdio> ...

  2. 微信支付公众号支付redirect_uri域名与后台配置不一致,错误码10003

    最近弄微信支付,微信支付公众号支付redirect_uri域名与后台配置不一致,错误码10003,最容易出错两个地方 1,appid 对应不到 2,开发者网页授权 填写域名 文章来自http://ww ...

  3. Spark链接hive时 “HikariCP” 问题

    IDE本地调试和spark-shell调试报错: Caused by: org.datanucleus.exceptions.NucleusUserException: The connection ...

  4. BZOJ 5450 轰炸 (强连通缩点+DAG最长路)

    <题目链接> 题目大意: 有n座城市,城市之间建立了m条有向的地下通道.你需要发起若干轮轰炸,每轮可以轰炸任意多个城市.但每次轰炸的城市中,不能存在两个不同的城市i,j满足可以通过地道从城 ...

  5. jsp常用代码

    1.头部 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&q ...

  6. ES6——函数-箭头函数

    箭头函数: 1.普通函数 function 函数名(){...} 2.箭头函数 注意:  1)如果只有一个返回值,{}return可以省略: let arr = [12,5,8,99,33,14,26 ...

  7. 20180209-os模块

    下面将学习关于os模块的相关操作 项目练习的目录结构如下:所有的操作都是基于os_exercise.py模块 1.获取当前的Python脚本的工作目录路径 os.getcwd() # 1.获取当前目录 ...

  8. AES apache commons-crypto 对称加密

    apache实现的AES256加密 官方用户指导链接:http://commons.apache.org/proper/commons-crypto/userguide.html 官方字节缓存实现的例 ...

  9. php 连接数据库 Warning: mysqli_connect(): (HY000/2002): No such file or directory in

    1.错误代码 //主机名 $db_host = 'localhost'; //用户名 $db_user = 'jaing'; //密码 $db_password = '1'; //数据库名 $db_n ...

  10. 前端每日实战:76# 视频演示如何用纯 CSS 创作一组单元素办公用品(内含2个视频)

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/oMgmwB 可交互视频 此视频是可 ...