1. vsftp概述

  FTP是File Transfer Protocol(文本传输协议)的简称,用于Internet上的文件的双向传输。使用FTP传输时,具有一定程度的危险性,因为数据在因特网上面是完全没有受到保护的明文传输方式。

  VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,全称是Very Secure FTP,从名称定义上可以看出,这是为了解决FTP的安全传输问题的。

1.1 安全特性

  1)vsftp程序的运行者一般是普通用户,降低了相应进程的权限,提高了安全性

  2)任何需要执行较高权限的指令都需要上层程序的许可

  3)ftp所需要使用的绝大多数命令都被整合到了vsftp中,基本不需要系统额外提供命令

  4)拥有chroot功能,可以改变用户的根目录,限制用户只能在自己的家目录

2. vsftp连接类型

  控制连接(持续连接)-->TCP 21(命令信道)-->用户收发ftp命令

  数据连接(按需连接)-->TCP 20(数据信道)-->用于上传下载数据

3. vsftp工作模式

Port模式

ftp客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接受数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接受数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server 必须和客户端建立一个新的连接用来传送数据。

Passive模式

FTP客户端首先和服务器的TCP 21端口建立连接,用来建立控制通道发送命令,但建立连接后客户端发送Pasv命令。服务器端收到Pasv命令后,打开一个临时端口(端口大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器的临时端口,然后FTP服务器将通过这个端口传输数据。

注意:由于vsftp的被动模式是随机端口进行数据传输,在设置防火墙时需要刻意放行。

4. vsftp传输模式

Binary模式:不对数据进行任何处理,适合进行可执行文件、压缩文件、图片等

ASCII模式:进行文本传输时,自动适应目标操作系统的结束符,如回车符等

Linux的红帽发行版中vsftp默认采用的是Binary模式,这样能保证绝大多数文件传输后能正常使用

切换模式:在ftp>提示符下输入ascii即可转换到ASCII模式,输入bin,即转换到Binary模式

5. vsftp软件信息

服务端软件名:vsftpd

客户端软件名:ftp、filezilla..

服务名:vsftpd

端口号:20、21、指定范围内随机端口号

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

6. 登录验证方式

匿名用户验证:

  用户账号名称:ftp或anonymous

  用户账号密码:无密码

  工作目录:/var/ftp

  默认权限:默认可下载不可上传,上传权限由两部分组成(主配置文件和文件系统)

本地用户验证:

  用户账号名称:本地用户(/etc/passwd)

  用户账号密码:用户密码(/etc/shadow)

  工作目录:登录用户的宿主目录

  权限:最大权限(drwx------)

虚拟(virtual)用户验证:

  1. 创建虚拟用户用来代替本地用户,减少本地用户曝光率

  2. 使用本地用户作为虚拟用户的映射用户,为虚拟用户提供工作目录和权限控制

  3. 能够设置严格的权限(为每一个用户生成单独的配置文件)

7. vsftp部署

开放端口

[root@centos2 ~]# firewall-cmd --zone=public --add-port=/tcp
[root@centos2 ~]# firewall-cmd --zone=public --add-port=/tcp --permanent
[root@centos2 ~]# firewall-cmd --zone=public --add-port=/tcp
[root@centos2 ~]# firewall-cmd --zone=public --add-port=/tcp --permanent

安装

[root@centos2 ~]# yum install vsftpd

7.1 匿名用户验证

匿名权限控制:

anonymous_enable=YES            #启用匿名访问
anon_umask= #匿名用户所上传文件的权限掩码
anon_root=/var/ftp #匿名用户的FTP目录
anon_upload_enable=YES #允许上传文件
anon_mkdir_write_enable=YES #允许创建目录
anon_other_write_enable=YES #开放其他写入权限(删除、覆盖、重命名)
anon_max_rate= #限制最大传输速率(0为不限速,单位:bytes/s)

试验需求和流程:

1. 实现可以上传

  a. anon_upload_enable=YES

  b. 在/var/ftp/下创建上传目录

  c. 修改上传目录的权限或所有者,让匿名用户有写入权限
[root@centos2 /etc/vsftpd]# vim vsftpd.conf
添加一行anon_upload_enable=YES
或者把#anon_upload_enable=YES注释去掉 之后重启服务 [root@centos2 /etc/vsftpd]# systemctl restart vsftpd
[root@centos2 ~]# cd /var/ftp/

[root@centos2 /var/ftp]# mkdir test
#新建试验目录
[root@centos2 /var/ftp]# chown -R ftp:ftp test/
#修改目录的所有者,所属组

2. 实现创建目录和文件其他操作

anon_mkdir_write_enable=YES        #允许创建目录
anon_other_write_enable=YES #删除文件、文件改名、文件覆盖
[root@centos2 /etc/vsftpd]# vim vsftpd.conf
#在文件默认加上下述两行内容
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES [root@centos2 /etc/vsftpd]# systemctl restart vsftpd
#重启服务

3. 用户进入某个目录时,弹出相应的说明

a. 在对应目录下创建 .message 文件,并写入相应内容
b. 确认dirmessage_enable=YES是否启用
c. 尝试切换目录查看效果(同一次登录仅提示)

4. 实现上传的文件可下载

  默认情况下开放上传权限后,上传的文件是无法被下载的,因为文件的其他人没有r权限,设置anon_mask=022,可以让上传的文件其他人拥有r权限,然后才能被其他人下载。

7.2 本地用户验证

本地用权限控制:

local_enable=YES                #是否启用本地系统用户
local_umask= #本地用户所上传文件的权限掩码
local_root=/var/ftp #设置本地用户的FTP根目录
chroot_local_user=YES #是否将用户禁锢在主目录
local_max_rate= #限制最大传输速率
ftpd_banner=Welcome #用户登录时显示的欢迎信息
userlist_enable=YES & userlist_deny=YES
#禁止/etc/vsftpd/user_list文件中出现的用户登录FTP
userlist_enable=YES & userlist_deny=NO
#仅允许/etc/vsftpd/user_list文件中出现的用户登录FTP 配置文件:ftpusers
#禁止/etc/vsftpd/ftpusers文件中出现的用户登录FTP,权限比user_list更高,即时生效

实验需求与流程:

1. 服务端创建用户并设置密码(创建的用户不需要登录操作系统,仅用来登录vsftpd)

[root@centos2 /var/ftp]# useradd -s /sbin/nologin user1

2.将所有的用户禁锢在自己的家目录下

注:默认是没有禁锢的,客户端登录后可以随意切换目录,查看文件所在位置和文件名

chroot_local_enable=YES

#开启用户家目录限制,限制所有用户不能随意切换目录

[root@centos2 /etc/vsftpd]# vim vsftpd.conf

#找到#chroot_local_user=YES,并把注释去掉
#之后重启服务
#需取消用户家目录写权限

3. 将部分用户禁锢在自己的家目录下

chroot_list_enable=YES

#开启白名单功能,允许白名单中的用户随意切换目录

chroot_list_file=/etc/vsftpd/chroot_list

#白名单文件所在位置(需自己创建)

[root@centos2 /etc/vsftpd]# vim vsftpd.conf

#找到
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#将其注释去掉,保存退出 [root@centos2 /etc/vsftpd]# vim chroot_list
#在里面写入允许的用户 #之后重启服务

4. 配置文件:/etc/vsftpd/ftpusers

所有写入文件内的用户名都不允许登录ftp,立即生效

5. 修改被动模式数据传输使用端口

pasv_enable=YES
pasv_min_port=
pasv_max_port=

7.3 虚拟用户验证

1. 建立FTP的虚拟用户的用户数据库文件(在/etc/vsftpd)

vim vsftpd.user
#该文件名可随便定义,文件内容格式:奇数行用户,偶数行密码 db_load -T -t hash -f vsftpd.user vsftpd.db
#将用户密码的存放文件转化为数据库类型,并使用hash加密 chmod vsftpd.db
#修改文件权限为600,保证其安全性

2. 创建FTP虚拟用户的映射用户,并制定其用户家目录

useradd -d /var/ftproot -s /sbin/nologin virtual
#创建 virtual 用户作为FTP的虚拟用户的映射用户

3. 建立支持虚拟用户的PAM认证文件,添加虚拟用户支持

cp -a /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
#使用模板生成自己的认证配置文件,方便调用

编辑新生成的文件vsftpd.pam(清空原来的内容,添加下述两行)

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

在vsftpd.conf文件中添加支持配置

修改:

修改:
pam_service_name=vsftpd.pam 添加:
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/dir

4. 为虚拟用户建立独立的配置文件,启动服务并测试

注:做虚拟用户配置文件设置时,将主配置文件中自定义的匿名用户相关设置注释掉

用户可以上传:
anon_upload_enable=YES #允许上传文件 用户可以创建目录或文件
anon_mkdir_write_enable=YES #允许创建目录 用户可以修改文件名
anon_upload_enable=YES #允许上传文件(为了覆盖而开启)
anon_other_write_enable=YES #允许重命名和删除文件、覆盖

注:给映射用户的家目录 设置 o+r 让虚拟用户有读权限

[root@centos2 /etc/vsftpd]# vim vsftpd.user
a b c #文件名随意,内容格式:奇数行用户,偶数行密码 [root@centos2 /etc/vsftpd]# db_load -T -t hash -f vsftpd.user vsftpd.db
#将用户名密码的存放文件转化为数据库类型,并使用hash加密
[root@centos2 /etc/vsftpd]# chmod vsftpd.db
#修改文件权限,保证安全性 [root@centos2 /etc/vsftpd]# useradd -d /home/virtual -s /sbin/nologin virtual
#创建 virtual 用户作为FTP的虚拟用户的映射目录 [root@centos2 /home/virtual]# cd /etc/pam.d/
[root@centos2 /etc/pam.d]# cp -a vsftpd vsftpd.pam
#生成模板
[root@centos2 /etc/pam.d]# vim vsftpd.pam
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd
account required pam_userdb.so db=/etc/vsftpd/vsftpd [root@centos2 /etc/vsftpd]# vim vsftpd.conf pam_service_name=vsftpd.pam guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/dir [root@centos2 /etc/vsftpd]# mkdir dir
[root@centos2 /etc/vsftpd/dir]# vim a
anon_upload_enable=YES [root@centos2 /etc/vsftpd/dir]# vim b
anon_mkdir_write_enable=YES [root@centos2 /etc/vsftpd/dir]# vim c
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#给映射用户的家目录 设置 o+r 让虚拟用户有读权限
#映射目录需取消写权限
#chmod a-w /home/virtual

7.4 openssl+vsftpd 加密验证

使用 tcpdump 工具进行指定端口抓包,抓取ftp登录过程中的数据包

tcpdump -i ens33 -nn -X -vv tcp port  and ip host 来源ip

    -i        interface:指定tcpdump需要监听的接口
-n 对地址以数字方式显示,否则显示为主机名
-nn 除了-n的作用外,还把端口显示为数值,否则显示端口服务名
-X 输出包的头部数据,会以16进制和ASCII两种方式同时输出
-vv 产生更详细的输出

1. 查看是否安装了 OpenSSL

rpm -q openssl

2. 查看vsftpd 是否支持openssl

ldd /usr/sbin/vsftpd | grep libssl

3. 生成加密信息的秘钥和证书文件

存放位置:/etc/ssl/certs

openssl genrsa -out vsftpd.key
#创建私钥,生成RSA密钥 openssl req -new -key vsftpd.key -out vsftpd.csr openssl x509 -req -days -sha256 -in vsftpd.csr -signkey vsftpd.key -out vsftpd.crt
#使用CA服务器签发证书,设置证书的有效期等信息

注:生成秘钥和证书文件后,将目录(/etc/ssl/certs)的权限修改为500

注:实验环境可以用命令生成测试,生产环境必须要在https证书厂商注册,否则浏览器不识别

4. 修改主配置文件/etc/vsftpd/vsftpd.conf

ssl_enable=YES
#启用ssl认证
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES
#开启tlsvl1、sslv2、sslv3都支持
allow_anon_ssl=YES
#允许匿名用户{虚拟用户}
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
#匿名登录和传输时强制使用ssl
force_local_logins_ssl=YES
force_local_data_ssl=YES
#本地登录和传输时强制使用ssl
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
#rsa格式证书
rsa_private_key_file=/etc/ssl/certs/vsftpd.key
#rsa格式密钥

注:密钥文件在配置文件中单独声明

5. 重启服务

systemctl restart vsftpd

6. 测试(使用第三方客户端连接)

连接测试时选择:

  服务器类型:显示TLS/SSL

  登录类型:一般或匿名

[root@centos2 ~]# rpm -q openssl
openssl-1.0.2k-.el7.x86_64
[root@centos2 ~]# ldd /usr/sbin/vsftpd | grep libssl
libssl.so. => /lib64/libssl.so. (0x00007f8972e6c000)
[root@centos2 ~]# ldd /usr/sbin/vsftpd
linux-vdso.so. => (0x00007fffd7e73000)
libssl.so. => /lib64/libssl.so. (0x00007f9065826000)
libwrap.so. => /lib64/libwrap.so. (0x00007f906561b000)
libnsl.so. => /lib64/libnsl.so. (0x00007f9065401000)
libpam.so. => /lib64/libpam.so. (0x00007f90651f2000)
libcap.so. => /lib64/libcap.so. (0x00007f9064fed000)
libdl.so. => /lib64/libdl.so. (0x00007f9064de9000)
libcrypto.so. => /lib64/libcrypto.so. (0x00007f9064986000)
libc.so. => /lib64/libc.so. (0x00007f90645b8000)
libgssapi_krb5.so. => /lib64/libgssapi_krb5.so. (0x00007f906436b000)
libkrb5.so. => /lib64/libkrb5.so. (0x00007f9064082000)
libcom_err.so. => /lib64/libcom_err.so. (0x00007f9063e7e000)
libk5crypto.so. => /lib64/libk5crypto.so. (0x00007f9063c4b000)
libz.so. => /lib64/libz.so. (0x00007f9063a35000)
libaudit.so. => /lib64/libaudit.so. (0x00007f906380c000)
libattr.so. => /lib64/libattr.so. (0x00007f9063607000)
/lib64/ld-linux-x86-.so. (0x00007f9065cc3000)
libkrb5support.so. => /lib64/libkrb5support.so. (0x00007f90633f7000)
libkeyutils.so. => /lib64/libkeyutils.so. (0x00007f90631f3000)
libresolv.so. => /lib64/libresolv.so. (0x00007f9062fda000)
libpthread.so. => /lib64/libpthread.so. (0x00007f9062dbe000)
libcap-ng.so. => /lib64/libcap-ng.so. (0x00007f9062bb8000)
libselinux.so. => /lib64/libselinux.so. (0x00007f9062991000)
libpcre.so. => /lib64/libpcre.so. (0x00007f906272f000) [root@centos2 /etc/ssl]# cd certs/ [root@centos2 /etc/ssl/certs]# openssl genrsa -out vsftpd.key
Generating RSA private key, bit long modulus
...................................................................................................+++
...................................+++
e is (0x10001)
[root@centos2 /etc/ssl/certs]# openssl req -new -key vsftpd.key -out vsftpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name ( letter code) [XX]:CN
State or Province Name (full name) []:HH
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:GXKJ
Organizational Unit Name (eg, section) []:OP
Common Name (eg, your name or your server's hostname) []:ss
Email Address []: Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@centos2 /etc/ssl/certs]# openssl x509 -req -days -sha256 -in vsftpd.csr -signkey vsftpd.key -out vsftpd.crt
Signature ok
subject=/C=CN/ST=HH/L=ZZ/O=GXKJ/OU=OP/CN=ss
Getting Private key
[root@centos2 /etc/pki/tls]# chmod certs
[root@centos2 /etc/pki/tls/certs]# cd /etc/vsftpd/
[root@centos2 /etc/vsftpd]# vim vsftpd.conf anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask= #guest_enable=YES
#guest_username=virtual
#user_config_dir=/etc/vsftpd/dir ssl_enable=YES ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES allow_anon_ssl=YES force_anon_logins_ssl=YES
force_anon_data_ssl=YES force_local_logins_ssl=YES
force_local_data_ssl=YES rsa_cert_file=/etc/ssl/certs/vsftpd.crt rsa_private_key_file=/etc/ssl/certs/vsftpd.key [root@centos2 /etc/vsftpd]# systemctl restart vsftpd

vsftp网络服务的更多相关文章

  1. Linux下网络服务的安全设置

    Linux下网络服务的安全设置      Linux操作系统由于其良好的稳定性.健壮性.高效性和安全性.正在成为各种网络服务的理想平台.各种网络应用在Linux系统上部有性能卓越的应用,例如,提供We ...

  2. [转载]SELinux 环境下网络服务设置,配置 Apache 、Samba、NFS

    原文地址:http://www.ibm.com/developerworks/cn/linux/l-cn-selinux-services1/index.html?ca=drs- 引言 SELinux ...

  3. Salesforce Apex页面中调用远端网络服务

    本文介绍了Salesforce Apex页面中调用远端网络服务的实现过程. ### 注册远端网络服务 在使用Apex代码调用远端网络服务之前,首先需要在Salesforce中注册远端网络服务地址, 本 ...

  4. 1、linux网络服务实验 用PuTTY连接Linux

    这个是大三下学期的Linux网络服务配置详解时,感觉老师上得简单,就整理下,岭南师范学院师弟妹有福,如果是蔡老师交的话,可以拿来预习,复习. 一.用PuTTY连接Linux ①.装有redhat系统的 ...

  5. /etc/xinetd.conf 和 /etc/xinetd.d/*【新网络服务配置】

    http://blog.csdn.net/kelven2004/article/details/1701930 xinetd 是 inetd 的安全加强版,它内置了自己的 TCP wrapper, 可 ...

  6. 在docker里部署网络服务

    之前试着玩玩docker有一阵子了,今天算是头一回正式在docker里部署网络服务. 本来想和lxc差不多的东西那自然是手到擒来,没想到还是改了很多. 第一个遇到的问题是,远程连到docker宿主机干 ...

  7. Nodejs·网络服务

    本章是从NodeJS拥有的模块角度,讲述了网络服务中的应用: net ----- > TCP dgram --> UDP http -----> HTTP https ----> ...

  8. linux配置oracle11G监听及本地网络服务 及 数据库建库

    配置监听及本地网络服务 在oracle用户的图形界面oracle用户中,新开启一个终端,输入命令netca 会弹出如下界面. 数据库建库 在oracle用户的图形界面oracle用户中,新开启一个终端 ...

  9. Oracle配置本地网络服务名

    Oracle安装完成后,可以使用客户端自带的的网络配置向导(Net Configuration Assistant)进行配置 1.启动Net Configuration Assistant.选择&qu ...

随机推荐

  1. python初级(302) 6 对象(一)

    作业: 1.编写一个Dog类,并生成对象dog,属性包含颜色,大小,重量,可以汪汪叫,摇尾巴,跑 # -*- coding: utf-8 -*- class Dog: def __init__(sel ...

  2. 查看Oracle表空间以及用户与其默认表空间情况

    Oracle中一个表空间可能是多个用户的默认表空间,下面语句统计了用户及其默认表空间情况,如果用户多个,用户之间通过逗号分隔. select t.default_tablespace, to_char ...

  3. Gerrit - 一些基本用法

    1 - 主配置文件 主配置文件位于$GERRIT_SITE/etc/gerrit.config目录 [gerrit@mt101 ~]$ cat gerrit_testsite/etc/gerrit.c ...

  4. WebGL学习笔记二——绘制基本图元

    webGL的基本图元点.线.三角形 gl.drawArrays(mode, first,count) first,代表从第几个点开始绘制即顶点的起始位置 count,代表绘制的点的数量. mode,代 ...

  5. Java的三大版本

    Java的三大版本 Write Once.Run Anywhere JavaSE:标准版(桌面程序,控制台开发......) JavaME:嵌入式开发(手机,小家电......) JavaEE:E企业 ...

  6. 各手机PC品牌投屏功能连接方法

    一.iOS终端(iPhone/iPad)无线投屏: 1.将iPhone或iPad与必捷会议盒子连接至同一路由器: 2.滑动iPhone/iPad的屏幕,调出Airplay功能,选择需要投屏的主机,开始 ...

  7. Referenced file contains errors (http://www.springframework.org/...解决

    今天打开老项目出现如下错误: Referenced file contains errors (http://www.springframework.org/schema/context/spring ...

  8. Linux 下面 oracle 数据库连接工具的安装还有特殊字符密码登录的设置

    1. 下载Oracle的连接客户端 https://www.oracle.com/database/technologies/instant-client/downloads.html 2. 我这里仅 ...

  9. [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

    nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...

  10. vue 在发送axios请求时数据渲染问题

    这是我请求的json格式的数据 一开始在vue用普通的数据渲染,更改为vue后使用v-for 发现没办法渲染上去了. obj.data就是以上数据. 必须加上这三行给this随意赋个值,神奇的事情就会 ...