文件传输协议,基于该协议FTP客户端与服务端可以实现共享文件,上传文件,下载文件。FTP基于TVP协议生成一个虚拟的连接,主要用于控制FTP连接信息,同时再生成一个单独的TCP连接用于FTP数据传输,用户可以通过客户端向FTP服务段上传,下载,删除文件,FTP服务端可以同时提供给多人共享使用;

 FTP服务是client/server(C/S)模式,基于FTP协议是新FTP文件对外共享及传输的软件称之FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传,下载文件;

FTP主动模式:

客户端从一个任意端口N(N>1024)连接到FTP服务器的port21命令端口,客户端开始监听端口N+1,并发送FTP命令"port N+1" 到FTP服务器,之后服务端才以数据端口20来连接客户端N+1端口

FTP被动模式:

客户端从一个任意端口N(N>1024)连接到服务端的port21命令端口,客户端开始监听端口N+1,并提交PASV命令,这个时候服务端会开启一个任意的端口(P>1024)发送PORT P命令交给客户端,客户端发起从本地端口N+1到服务器端口P的连接用来传输数据

FTP基于C/S模式,FTP客户端与服务器端有两种传输 模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。

主动模式  PORT

被动模式   PASV

FTP主被动模式,默认为主动模式,设置为被动模式使用端口方法如下:

pasv_enable=YES

pasv_min_port=YES

pasv_min_port=YES

【Vsftpd.conf配置文件详解】

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

anonymous_enable=YES                #允许匿名用户访问

local_enable=YES                    #允许本地用户访问

write_enable=YES                    #本地系统用户写入权限

local_umask=                      #本地用户创建文件及目录默认权限掩码

anon_upload_enable=YES               #匿名用户是否可以上传

anon_mkdir_write_enable=YES          #匿名用户是否可以创建

dirmessage_enable=YES                #如果目录存在。message隐藏文件,进入该目录,会显示.message

xferlog_std_from_port_20=YES         #FTP使用20端口进行数据传输

xferlog_std_format=YES               #日志文件将根据xferlog的标准格式写入

listen=NO                            #Vsftpd不以独立的服务启动,通过xinetd服务服务进行管理,建议改成YES

listen_ipv6=YES                      #启用IPv6监听     
pam_service_name=vsftpd #列出与pam相关的文件名称,即/etc/pam.d/目录下 的文件名称 userlist_enable=YES #vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP tcp_wrappers=YES #设置vsftpd与tcp wrapper结合进行主机的访问控制,vsftpd服务检查/etc/hosts.allow和/etc/hosts.deny中的设置,来决定请求连接的主机,
是否允许访问该FTP服务器

【本地用户实战】

# yum install -y vsftpd libdb libdb-utils --skip-broken

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES #开启系统用户验证
write_enable=
YES #写入权限
local_umask=
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/
user_list #对应的是系统列表,
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES #启用用户列表文件
userlist_deny=
NO #不禁用用户列表中的用户
tcp_wrappers=YES

useradd -M -s /sbin/nologin ftpuser   #创建系统用户,用于访问ftp

passwd ftpuser   #设置密码

echo "ftpuser" >> /etc/vsftpd/user_list    #将ftpuser系统用户添加用户列表。

mkdir /home/ftpuser

chown ftpuser:ftpuser /home/ftpuser/

systemctl restart vsftpd

ps:这里要保证/home/ftpuser目录权限属主属组是对应的系统用户以及读写权限

验证:

【 vsftp虚拟用户实战】

如果是基于vsftpd系统用户访问FTP服务器,系统用户越来越不利于 管理,而且不利于系统安全管理。因此,为了能更加的安全使用vsftpd,需要vsftpd虚拟用户方式,

vsftpd虚拟用户原理:虚拟用户就是没有实际真实系统用户,而是通过映射到其中真实用户以及设置相应的权限来实现访问验证的,虚拟用户不能登入linux系统,从而保证了系统更加安全可靠

# yum install -y vsftpd libdb libdb-utils --skip-broken

#useradd -s /sbin/nologin vsftpduser       #所有vsftpd虚拟用户需要映射到一个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用

# vim /etc/vsftpd/ftpuser.txt        #创建虚拟用户临时文件/etc/vsftpd/ftpuser.txt;

xiaoyu
123456
xiaozhang
123456

# db_load -T -t hash -f /etc/vsftpd/ftpuser.txt /etc/vsftpd/vsftpd_login.db     #生成VSFTPD虚拟用户数据库认证文件,设置权限700
# chmod 700 /etc/vsftpd/vsftpd_login.db
# file /etc/vsftpd/vsftpd_login.db
/etc/vsftpd/vsftpd_login.db: Berkeley DB (Hash, version 9, native byte-order)

# vim /etc/pam.d/vsftpd        #配置PAM认证文件,/etc/pam.d/vsftpd行首加入以下配置

auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login

# vim /etc/vsftpd/vsftpd.conf 

anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
#config virtual_userFTP
guest_enable=YES #启用虚拟用户
guest_username=vsftpduser #映射虚拟用户至系统用户vsftpduser
user_config_dir=/etc/vsftpd/vsftpd_user_conf #设置虚拟用户所在的目录
virtual_use_local_privs=YES #虚拟用户使用与本地用户相同的权限

# mkdir -p /etc/vsftpd/vsftpd_user_conf/             #创建虚拟用户配置文件所在的目录,与上述vsftpd.conf配置所对应

# vim /etc/vsftpd/vsftpd_user_conf/xiaoyu   #创建虚拟用户配置文件,例如:创建xiaoyu这个虚拟用户,

local_root=/home/vsftpduser/xiaoyu             #xiaoyu虚拟用户配置文件路径
write_enable=YES #允许登录xiaoyu有写入权限
anon_world_readable_only=YES #允许匿名用户下载,然后读取文件
anon_upload_enable=YES #允许匿名用户上传文件权限,只有在write_enable=YES时该配置参数才生效
anon_mkdir_write_enable=YES #允许匿名用户创建目录,只有在write_enable=YES时改配置参数才生效
anon_other_write_enable=YES #允许匿名用户其他全权限,如修改全权限,删除,改名等

创建虚拟用户 各自的虚拟目录

# mkdir -p /home/vsftpduser/{xiaoyu,zhangsan};      #在系统用户vsftpduser的家目录各自创建虚拟用户的虚拟目录,并授权
# chown -R ftpuser:ftpuser /home/ftpuser/xiaoyu

# ll -d /home/vsftpduser/xiaoyu/
drwxr-xr-x. 2 ftpuser ftpuser 18 6月 24 17:32 /home/vsftpduser/xiaoyu/

# systemctl restart vsftpd
# netstat -anput | grep vsftpd
tcp6 0 0 :::21 :::* LISTEN 3271/vsftpd
[root@localhost ~]# systemctl enable vsftpd

在本地客户端验证即可!

【主动与被动模式】

在本章博客开篇中讲到vsftp主备动模式的原理,首先我们需要知道的是,vsftp的主被动是相对于FTPServer端来说的,

主动模式:server主动向客户端发起连接请求

被动模式:server等待客户端发起连接请求(默认模式)

那么问题来了,再生产环境中,如何选择主被动模式呢?可以遵循以下规则:

1)客户端没有设置防火墙,选用主动模式

2)服务端没有防火墙,选择使用被动模式

3)双方都有防火墙的情况下, vsftpd可以服务端设置端口范围,选用被动模式

【拓展】

参数详解

-A:启用主动模式
-p:启用被动模式(默认为ftp和pftp)
-i:在mget中关闭提示
-n:禁止自动登录
-e:禁用readline支持(如果存在)
-g:禁用文件名通配符
-m:不要强制数据通道接口与控制通道相同
-v:详细模式
-t:启用数据包跟踪[无功能]
-d:启用调试

ftp> user xiaoyu 1       #user是传递用户名密码的命令
331 Please specify the password.
230 Login successful.

ftp> dir    #查看所在的文件内容
227 Entering Passive Mode (127,0,0,1,109,22).
150 Here comes the directory listing.
drwxr-xr-x 2 500 500 4096 Sep 08 01:09 test01
226 Directory send OK.
ftp>

#/bin/bash

ftp -n <<EOF
open 192.168.2.138
user xiaoyu 1
prompt     #不提示认证,直接执行上传
mput test01.txt
EOF

vsftp虚拟主机实战的更多相关文章

  1. vsftp虚拟主机

    ################################Vsftp服务器实战##########################################3 文件传输协议,基于该协议FT ...

  2. Apache入门篇(三)之apache2.4.33的新特性解析与虚拟主机实战

    1.http 2.4新特性 新特性: (1) 在编译时可以将多个MPM构建为可加载模块,可以在运行时通过LoadModule指令配置所选的MPM: (2) 2.2版本的event MPM在实验阶段,到 ...

  3. Apache虚拟主机实战

    [root@localhost ~]# wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.32.tar.bz2  [root@localho ...

  4. Linux安装Nignx基于域名的多虚拟主机实战

    看这个文章之前,要保证你的Nginx已经安装成功! 如果没有,请移步到下面这个文章,看完后再回来看! https://www.cnblogs.com/apollo1616/p/10214531.htm ...

  5. nginx笔记 安装nginx 配置 反向代理 多虚拟主机

    1,检测linux上是否 通过yum安装了nginxrpm   -qi  nginx 2.安装nginx之前的依赖包yum install gcc patch libffi-devel python- ...

  6. Nginx安装与升级(包括虚拟主机)

    Nginx WEB服务器最主要就是各种模块的工作,模块从结构上分为核心模块.基础模块和第三方模块,其中三类模块分别如下: 核心模块:HTTP模块.EVENT模块和MAIL模块等: 基础模块:HTTP ...

  7. ***阿里云ECS实战配置虚拟主机 + Apache 配置虚拟主机三种方式

    阿里云ECS实战配置虚拟主机 买了一台ECS阿里云服务器,性能感觉有点富余,想着可以陪着虚拟主机多一些WWW目录好放一些其他的程序.比如DEMO什么的. 今天研究了下,主要是就是做基于不同域名的虚拟主 ...

  8. nginx配置实战1----配置虚拟主机

    1 nginx虚拟主机的概念 虚拟主机是在网络服务器上划分出一定的磁盘空间供用户放置站点.应用组件等,提供必要的站点功能.数据存放和传输功能,所谓虚拟主机,也叫"网站空间",就是把 ...

  9. 基于虚拟主机的HAProxy配置实战

    本实例是如上图所示 主要实现的功能如下: 当客户访问www.tb.com/tb.com的时候HAProxy将网站提交到电商服务器集群当访问bbs.tb.com的时候,将访问请求调度到论坛集群,实现论坛 ...

随机推荐

  1. 设计模式--观察者模式Observer(对象行为型)

    一.观察者模式 观察者模式是在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新.观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多. ...

  2. OpenVPN安装过程记录

    1.参考网上OpenVPN 的安装步骤进行安装,此处省略. 2.安装完后进行相应证书和密钥的生成. 3.启动openvpn,查看 netstat -tunlp ,如果有openvpn 1194的监听, ...

  3. hybrid programming based on python and C/C++

    Python/C API Reference Manual¶ https://docs.python.org/3/c-api/index.html Extending and Embedding th ...

  4. Ex3_2 最近点对

    原文链接http://blog.csdn.net/zyang008/article/details/6175587 分治法 1)算法描述:已知集合S中有n个点,分治法的思想就是将S进行拆分,分为2部分 ...

  5. C# pdf转word

    引用组件 Spire.Pdf,去官网下载安装,在bin目录里面有需要的dll文件. static void Main(string[] args) { #region Pdf转word PdfDocu ...

  6. Jquery分享插件

    效果图如下: 代码如下: <!DOCTYPE HTML> <html style="padding-bottom: 54px;"> <head> ...

  7. Python-Mongodb vs mysql

    mongodb https://www.cnblogs.com/kermitjam/articles/10147254.html#_label5 centos安装mongodb: https://bl ...

  8. Python-WEB前端-入门到进阶开发之路

    HTTP: Python-HTTP 概况 HTML: Python-HTML基础 Python-form表单标签 Python-HTML CSS 练习 CSS: Python-CSS入门 Python ...

  9. swift 学习- 11 -- 属性

    // '属性'将值跟特定的类, 结构体或枚举关联, 存储属性常量或变量作为实例的一部分,而计算属性计算(不是存储) 一个值, 计算属性可以用于 类, 结构体, 枚举, 存储属性只能用于 类 和 结构体 ...

  10. JAVA框架之Hibernate框架的学习步骤

    首先介绍一下Java三大框架的关系 以CRM项目即客户关系管理项目示例 hibernate框架的学习路线: 1.学习框架入门,自己搭建框架,完成增删改查的操作 2.学习一级缓存,事物管理和基本查询 3 ...