本章向读者介绍企业vsftpd服务器实战、匿名用户访问、系统用户访问及虚拟用户实战等。

1 vsftpd服务器企业实战

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

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

1.1 FTP传输模式

FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。主被动模式如图(a)、(b)所示,主被动模式详细区别如下:

  • FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
  • FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

在企业实际环境中,如果FTP客户端与FTP服务端均开放防火墙,FTP需以主动模式工作,这样只需要在FTP服务器端防火墙规则中,开放20、21端口即可。关于防火墙配置后面章节会讲解。

图1-1(a) FTP主动模式

图1-1(b) FTP被动模式

1.2 vsftpd服务器安装配置

vsftpd服务器端安装有两种方法,一是基于YUM方式安装,而是基于源码编译安装,最终实现效果完全一致,本文采用yum安装vsftpd,步骤如下:

1.2.1 yum安装vsftpd

在命令行执行如下命令

# yum install vsftpd* -y

图1-2 yum安装vsftpd

1.2.2 检查vsftpd安装后的配置文件路径

# rpm -ql vsftpd|more

图1-3 检查vsftpd安装后的配置文件路径

1.2.3 启动vsftpd服务

# systemctl restart vsftpd.service

图1-4 启动vsftpd服务

1.2.4 查看进程是否启动

# ps -ef |grep vsftpd

图1-5 查看vsftp进程

1.2.5 vsftpd.conf默认配置文件详解
anonymous_enable=YES		    开启匿名用户访问;
local_enable=YES 启用本地系统用户访问;
write_enable=YES 本地系统用户写入权限;
local_umask=022 本地用户创建文件及目录默认权限掩码;
dirmessage_enable=YES 打印目录显示信息,通常用于用户第一次访问目录时,信息提示;
xferlog_enable=YES 启用上传/下载日志记录;
connect_from_port_20=YES FTP使用20端口进行数据传输;
xferlog_std_format=YES 日志文件将根据xferlog的标准格式写入;
listen=NO vsftpd不以独立的服务启动,通过xinetd服务管理,建议改成YES;
listen_ipv6=YES 启用IPV6监听;
pam_service_name=vsftpd 登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证;
userlist_enable=YES vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP;
tcp_wrappers=YES 设置vsftpd与tcp wrapper结合进行主机的访问控制,vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。
1.2.6 通过Windows客户端资源管理器访问Vsftp服务器端

ftp://192.168.1.181

图1-6 匿名用户访问FTP默认目录

1.2.7 FTP设置为被动模式使用端口方法

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

pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100

1.3 vsftpd服务器简介

目前主流的FTP服务器软件包括:vsftpd、ProFTPD、PureFTPd、Wuftpd、Server-U FTP、 FileZilla Server等软件,其中Unix/Linux使用较为广泛的FTP服务器软件为vsftpd 。

非常安全的FTP服务进程(Very Secure FTP daemon,vsftpd),vsftpd在Unix/Linux发行版中最主流的FTP服务器程序,优点小巧轻快,安全易用、稳定高效、满足企业跨部门、多用户的使用(1000用户)等。

vsftpd基于GPL开源协议发布,在中小企业中得到广泛的应用,vsftpd可以快速上手,基于vsftpd虚拟用户方式,访问验证更加安全。vsftpd还可以基于MYSQL数据库做安全验证,多重安全防护。

1.4 FTP客户端简介

windows和Linux系统默认都自带有ftp命令程序,可以连接到FTP服务器进行交互式的上传,下载通信。除此以外,还有大量的图形化FTP客户端工具。

windows中常用FTP客户端软件包括CuteFTP、FlashFXP、LeapFTP、Filezilla等。

1.5 vsftpd匿名用户配置

vsftpd默认以匿名用户访问,匿名用户默认访问的FTP服务器路径为:/var/ftp/pub,匿名用户只有查看权限,无法创建、删除、修改。如需关闭FTP匿名用户访问,需修改配置文件/etc/vsftpd/vsftpd.conf,将anonymous_enable=YES修改为anonymous_enable=NO,重启vsftpd服务即可。

1、设置允许匿名用户能够上传、下载、删除文件

如果允许匿名用户能够上传、下载、删除文件,需在/etc/vsftpd/vsftpd.conf配置文件中加入如下:

anon_upload_enable=YES              允许匿名用户上传文件;
anon_mkdir_write_enable=YES 允许匿名用户创建目录;

匿名用户完整vsftpd.conf配置文件如下:

anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
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

2、修改目录权限

由于默认vsftpd匿名用户有两种:anonymous、ftp,所以匿名用户如果需要上传文件、删除及修改等权限,需要ftp用户对/var/ftp/pub目录有写入权限,使用如下chown和chmod任意一种即可,设置命令如下:

方法一:

# chown -R ftp /var/ftp/pub

方法二:

# chmod o+w /var/ftp/pub

图1-6 (a)更改/var/ftp/pub目录属主

图1-6(b)更改/var/ftp/pub目录写入权限

如上vsftpd.conf配置文件配置完毕,同时权限设置完

4、重启vsftpd服务

# systemctl restart vsftpd.service

5、通过Windows客户端访问,能够上传文件、删除文件、创建目录等操作,如图1-7所示:

图1-7 匿名用户访问上传文件

1.6 vsftpd系统用户配置

vsftpd匿名用户设置完毕,匿名用户,任何人都可以查看FTP服务器的文件、目录,甚至可以修改、删除,此方案不适合存放私密文件在FTP服务器,如何保证文件或者目录专属拥有者呢,vsftpd系统用户可以实现该需求。

实现vsftpd系统用户方式验证,只需在Linux系统中创建多个用户即可,创建用户使用useradd,同时给用户设置密码,即可通过用户和密码登录FTP,进行文件上传、下载、删除等操作。vsftpd系统用户实现方法步骤如下:

1、Linux系统中创建系统用户superman1、superman2,分别设置密码为123456:

# useradd superman1

# useradd superman2

# echo 123456|passwd --stdin superman1

# echo 123456|passwd --stdin superman2

图1-8 创建用户并设置密码

2、修改vsftpd.conf配置文件如下:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
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

3、重启vsftpd服务

# systemctl restart vsftpd.service

4、通过Windows资源客户端验证,使用superman1、superman2用户登录FTP服务器,即可上传文件、删除文件、下载文件,superman1、superman2系统用户上传文件的家目录在/home/superman1、/home/superman2下,如图1-9(a)、1-9(b)所示:

图1-9(a) superman1用户登录FTP服务器

图1-9(b) superman1登录FTP服务器上传文件

1.7 vsftpd虚拟用户配置

注意:当允许虚拟用户登录时,就不能实现实体用户登录!!两者不共存!

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

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

vsftpd虚拟用户企业案例配置步骤如下:

1、安装vsftpd虚拟用户需用到的软件及认证模块;

# yum install pam* libdb-utils libdb* --skip-broken -y

图1-10 安装vsftpd虚拟用户需用到的软件及认证模块

2、创建虚拟用户临时文件/etc/vsftpd/ftpusers.txt,新建虚拟用户和密码,其中superman001、superman002为虚拟用户名,123456为密码,如果有多个用户,依次格式填写即可;

# echo "superman001

123456

superman002

123456" > /etc/vsftpd/ftpusers.txt

图1-11 创建虚拟用户临时文件

3、生成vsftpd虚拟用户数据库认证文件,设置权限700;

# db_load -T -t hash -f /etc/vsftpd/ftpusers.txt /etc/vsftpd/vsftpd_login.db

# chmod 700 /etc/vsftpd/vsftpd_login.db

图1-12 生成vsftpd虚拟用户数据库认证文件

4、配置PAM认证文件,/etc/pam.d/vsftpd文件配置成如下两行;

# echo "auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login

account required pam_userdb.so db=/etc/vsftpd/vsftpd_login" > /etc/pam.d/vsftpd

图1-13 配置PAM认证文件

5、所有vsftpd虚拟用户需要映射到一个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用,创建命令如下;

# useradd -s /sbin/nologin ftpuser

图1-14 创建虚拟用户需要映射到的一个系统用户

6、完整vsftpd.conf配置文件如下;

#global config Vsftpd
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
userlist_enable=YES
tcp_wrappers=YES #config virtual user FTP
pam_service_name=vsftpd
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YES
allow_writeable_chroot=YES

如上vsftpd虚拟用户配置文件参数详解:

#config virtual user FTP
pam_service_name=vsftpd 虚拟用户启用pam认证;
guest_enable=YES 启用虚拟用户;
guest_username=ftpuser 映射虚拟用户至系统用户ftpuser;
user_config_dir=/etc/vsftpd/vsftpd_user_conf 设置虚拟用户配置文件所在的目录;
virtual_use_local_privs=YES 虚拟用户使用与本地用户相同的权限;
allow_writeable_chroot=YES 所有的用户都将拥有chroot权限。

7、至此,所有虚拟用户共同基于/home/ftpuser主目录实现文件上传与下载,可以在/etc/vsftpd/vsftpd_user_conf目录创建虚拟用户各自的配置文件,创建虚拟用户配置文件主目录;

# mkdir -p /etc/vsftpd/vsftpd_user_conf

图1-15 创建虚拟用户配置文件主目录

8、如下分别为虚拟用户superman001、superman002用户创建配置文件;

为superman001用户创建配置文件,同时创建私有的虚拟目录,配置如下:

# echo "local_root=/home/ftpuser/superman001

write_enable=YES

anon_world_readable_only=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES" > /etc/vsftpd/vsftpd_user_conf/superman001

图1-16 为superman001用户创建配置文件,同时创建私有的虚拟目录

为superman002用户创建配置文件,同时创建私有的虚拟目录,配置如下:

# echo "local_root=/home/ftpuser/superman002

write_enable=YES

anon_world_readable_only=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES" > /etc/vsftpd/vsftpd_user_conf/superman002

图1-17 为superman002用户创建配置文件,同时创建私有的虚拟目录

虚拟用户配置文件内容详解:

local_root=/home/ftpuser/superman002	superman002虚拟用户配置文件路径;
write_enable=YES 允许登陆用户有写权限;
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 允许匿名用户其他权限,例如删除、重命名等。

9、创建虚拟用户各自虚拟目录;

# mkdir -p /home/ftpuser/{superman001,superman002}

# chown -R ftpuser:ftpuser /home/ftpuser

图1-18 创建虚拟用户各自虚拟目录

10、重启vsftpd服务;

# systemctl restart vsftpd.service

图1-19 启动vsftpd服务

11、通过Windows客户端资源管理器登录vsftpd服务端,测试结果如图1-20(a)、1-20(b)所示:

图1-20(a) superman001虚拟用户登录FTP服务器

图1-20(b) superman001虚拟用户上传下载文件

欢迎关注我的微信公众号【超哥的IT私房菜】获取更多技术干货!

有什么吐槽或反馈意见,直接告诉我!

我会解决您说的问题,进一步更好的服务您哦!

温馨提示:如出现二维码失效也可直接添加微信号:ysc13803862469

Linux云计算-07_Linux文件服务器之vsftpd服务器的更多相关文章

  1. 【转】Android 服务器之SFTP服务器上传下载功能

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

  2. 【转】Android 服务器之SFTP服务器上传下载功能 -- 不错

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

  3. Linux下将MySQL服务添加到服务器的系统服务中

    Linux下将MySQL服务添加到服务器的系统服务中 Linux环境下将MySQL服务添加到服务器的系统服务中 1.了解MySQL程序路径 MySQL数据目录: /home/mysql/dataMyS ...

  4. linux下部署tomcat服务器之安装tomcat

    下载tomcat压缩包 apache-tomcat-7.0.82.tar.gz 在把包放到linux 的softwore文件夹下  自己选择文件夹 tar -zxvf apache-tomcat-7. ...

  5. linux上的文件服务

    主要的文件服务vsftp.Samba.NFS对比 服务器名称 用户客户端平台 使用范围 服务端口 VSFTP Windows/linux/unix/macOS等 发布网站,文件共享 Tcp/21 Sa ...

  6. java基础76 web服务器之Tomcat服务器

    (注:本文是以“压缩版Tomcat”为例,展开描述的) 一.Tomcat服务器的介绍 1.服务器 1.1.服务器的种类 从物理上讲:服务器就是一台pc机器.至少8核/8G以上.内存至少用T来计算.宽带 ...

  7. 简洁的 systemd 操作指南Linux下Service文件服务说明(转)

    1.服务权限systemd有系统和用户区分:系统(/user/lib/systemd/system/).用户(/etc/lib/systemd/user/). 一般系统管理员手工创建的单元文件建议存放 ...

  8. 文件服务器之fastDFS

    FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合中小文件(建议范围:4KB < file ...

  9. 第2课 讲解主流三大web服务器之Apache服务器(httpd服务器) - 大型网站高并发架构与自动化运维实战(六)

    基本配置 配置固定IP地址 打开默认的网卡配置文件 cd /etc/sysconfig/network-script/ cp ifcfg-eth0 ifcfg-eth1 vim ifcfg-eth0 ...

随机推荐

  1. Go语言web开发---Cronexpr 包实现并发定时任务

    安装Cronexpr包: go get -u github.com/gorhill/cronexpr 这个包支持七位时间控制 *(秒) *(分) *(时) *(日) *(月) *(周) *(年) 栗子 ...

  2. ALD技术,相机去噪,图像传感器

    ALD技术,相机去噪,图像传感器 1. 作为镜片的防反射涂层技术被关注的ALD(atomic layer deposition)的引入趋势. (a)为什么需要一种新的防止反射的涂层技术? ALD被认为 ...

  3. 摄像头PVD和CVD薄膜

    摄像头PVD和CVD薄膜 在FDP 的生产中,在制作无机薄膜时,可以采用的方法有两种:PVD 和CVD (将VE 和VS 归于PVD ,而ALD 归于CVD). Physical Vapor Depo ...

  4. TVMNN编译Compiler栈

    TVMNN编译Compiler栈 内容纲要 前言 调研目标 TVM介绍 TVM源码架构 FrontEnd Relay BackEnd VTA实现原理及设计思想提炼 整体结构 VTA Hardware ...

  5. MinkowskiEngine实用函数和类

    MinkowskiEngine实用函数和类 sparse_quantize MinkowskiEngine.utils.sparse_quantize(coords, feats=None, labe ...

  6. TinyML-TVM是如何驯服Tiny的(下)

    TinyML-TVM是如何驯服Tiny的(下) Lazy Execution实际上,随着通信开销开始占主导地位,一旦用户请求,就执行算子的开销变得非常昂贵.可以通过延迟评估直到用户需要调用的结果来提高 ...

  7. Qt Creater快速定义函数的快捷键

    1.简介 在Qt creator中编写函数的时候,在头文件编写了函数,需要在相应的cpp文件中编写对应的函数定义实现,如果每次都需要手动的敲击全部的代码,这会非常的耗时耗力,显得很方便,这时候就需要巧 ...

  8. 实验4、Flask基于Blueprint & Bootstrap布局的应用服务

    1. 实验内容 模块化工程内容能够更好的与项目组内成员合作,Flask Blueprint提供了重要的模块化功能,使得开发过程更加清晰便利.此外,Flask也支持Bootstrap的使用. 2. 实验 ...

  9. grep过滤空行和注释行

    1)grep的排除选项为 -v排除空行的命令是:grep -v '^$' filename 2)排除以#注释的命令是:grep -v '^#' filename 3)结合起来就是,既排除空行又排除注释 ...

  10. Golang学习(用代码来学习) - 第五篇

    /** 并发控制:context的学习 */ func context_test() { PrintStartSeperator("context_test") ctx, canc ...