基于CentOS7.3构建企业级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、FTP传输模式
FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。主被动模式如图1-2(a)、1-2(b)所示,主被动模式详细区别如下:
(1)FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。
(2)FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
在企业实际环境中,如果FTP客户端与FTP服务端均开放防火墙,FTP需以主动模式工作,这样只需要在FTP服务器端防火墙规则中,开放20、21端口即可。关于防火墙配置后面章节会讲解。
图1-2(a) FTP主动模式
-------------------------------------------------------------------------------------------------------
图1-2(b) FTP被动模式
2、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服务器程序,优点小巧轻快,安全易用、稳定高效、满足企业跨部门、多用户的使用等。
3、Vsftpd服务器安装配置
Vsftpd服务器端安装有两种方法,一是基于YUM方式安装,而是基于源码编译安装,最终实现效果完全一致,本文采用YUM安装Vsftpd,步骤如下:
(1) 在命令行执行如下命令,如图1-3所示:
yum install vsftpd* -y |
图1-3 YUM安装Vsftpd服务端
(2) 打印vsftpd安装后的配置文件路径、启动Vsftpd服务及查看进程是否启动,如图1-4所示:
rpm -ql vsftpd|more systemctl restart vsftpd.service ps -ef |grep vsftpd |
图1-4 打印Vsftpd软件安装后路径
(3) 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服务器。 |
(4) 启动Vsftpd服务后,通过Windows客户端资源管理器访问Vsftp服务器端,如图1-5所示:
ftp://192.168.111.131/ |
图1-5 匿名用户访问FTP默认目录
FTP主被动模式,默认为被动模式,设置为被动模式使用端口方法如下:
pasv_enable=YES pasv_min_port=60000 pasv_max_port=60100 |
4、Vsftpd匿名用户配置
Vsftpd默认以匿名用户访问,匿名用户默认访问的FTP服务器端路径为:/var/ftp/pub,匿名用户只有查看权限,无法创建、删除、修改。如需关闭FTP匿名用户访问,需修改配置文件/etc/vsftpd/vsftpd.conf,将anonymous_enable=YES修改为anonymous_enable=NO,重启Vsftpd服务即可。
如果允许匿名用户能够上传、下载、删除文件,需在/etc/vsftpd/vsftpd.conf配置文件中加入如下代码:
anon_upload_enable=YES 允许匿名用户上传文件; anon_mkdir_write_enable=YES 允许匿名用户创建目录; anon_other_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 anon_other_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 |
由于默认Vsftpd匿名用户有两种:anonymous、ftp,所以匿名用户如果需要上传文件、删除及修改等权限,需要ftp用户对/var/ftp/pub目录有写入权限,使用如下chown和chmod任意一种即可,设置命令如下:
chown -R ftp pub/ chmod o+w pub/ |
如上Vsftpd.conf配置文件配置完毕,同时权限设置完,重启vsftpd服务即可,通过Windows客户端访问,能够上传文件、删除文件、创建目录等操作,如图1-6所示:
图1-6 匿名用户访问上传文件
5、Vsftpd系统用户配置
Vsftpd匿名用户设置完毕,匿名用户,任何人都可以查看FTP服务器端的文件、目录,甚至可以修改、删除,此方案如适合存放私密文件在FTP服务器端,如何保证文件或者目录专属拥有者呢,Vsftpd系统用户可以实现该需求。
实现Vsftpd系统用户方式验证,只需在Linux系统中创建多个用户即可,创建用户使用useradd,同时给用户设置密码,即可通过用户和密码登录FTP,进行文件上传、下载、删除等操作。Vsftpd系统用户实现方法步骤如下:
(1) Linux系统中创建系统用户jfedu1、jfedu2,分别设置密码为123456:
useradd jfedu1 useradd jfedu2 echo 123456|passwd --stdin jfedu1 echo 123456|passwd --stdin jfedu2 |
(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) 通过Windows资源客户端验证,使用jfedu1、jfedu2用户登录FTP服务器,即可上传文件、删除文件、下载文件,jfedu1、jfedu2系统用户上传文件的家目录在/home/jfedu1、/home/jfedu2下,如图1-7(a)、1-7(b)所示:
图1-7(a) jfedu1用户登录FTP服务器
图1-7(b) jfedu1登录FTP服务器上传文件
6、Vsftpd虚拟用户配置
如果基于Vsftpd系统用户访问FTP服务器,系统用户越多越不利于管理,而且不利于系统安全管理,鉴于此,为了能更加的安全使用VSFTPD,需使用Vsftpd虚拟用户方式。
Vsftpd虚拟用户原理:虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。
Vsftpd虚拟用户企业案例配置步骤如下:
(1) 安装Vsftpd虚拟用户需用到的软件及认证模块:
yum install pam* libdb-utils libdb* --skip-broken -y |
(2) 创建虚拟用户临时文件/etc/vsftpd/ftpusers.txt,新建虚拟用户和密码,其中jfedu001、jfedu002为虚拟用户名,123456为密码,如果有多个用户,依次格式填写即可:
jfedu001 123456 jfedu002 123456 |
(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 |
(4) 配置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 |
(5) 所有Vsftpd虚拟用户需要映射到一个系统用户,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用,创建命令如下:
useradd -s /sbin/nologin ftpuser |
(6) 完整vsftpd.conf配置文件代码如下:
#global config Vsftpd 2017 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 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 |
如上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 虚拟用户使用与本地用户相同的权限。 |
(7) 至此,所有虚拟用户共同基于/home/ftpuser主目录实现文件上传与下载,可以在/etc/vsftpd/vsftpd_user_conf目录创建虚拟用户各自的配置文件,创建虚拟用户配置文件主目录:
mkdir -p /etc/vsftpd/vsftpd_user_conf/ |
(8) 如下分别为虚拟用户jfedu001、jfedu002用户创建配置文件:
/etc/vsftpd/vsftpd_user_conf/jfedu001,同时创建私有的虚拟目录,代码如下:
local_root=/home/ftpuser/jfedu001 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/jfedu002,同时创建私有的虚拟目录,代码如下:
local_root=/home/ftpuser/jfedu002 write_enable=YES anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES |
虚拟用户配置文件内容详解:
local_root=/home/ftpuser/jfedu002 jfedu002虚拟用户配置文件路径; 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/{jfedu001,jfedu002} chown -R ftpuser:ftpuser /home/ftpuser |
重启Vsftpd服务,通过Windows客户端资源管理器登录Vsftpd服务端,测试结果如图1-8(a)、1-8(b)所示:
图1-8(a) jfedu001虚拟用户登录FTP服务器
图1-8(b) jfedu001虚拟用户上传下载文件
你若觉得作者的文章写得不错,请奖励作者几锭银子,让作者感受到来自你满满的鼓励和继续创作的动力!我们支持原创!鼓励原创!
打赏之后,文章底部显示参与打赏者的记录,可以直接通过微信扫描打赏哟,直接按打赏根据提示操作。
自定义打赏金额,友情提示打赏金额不要超过50元哦,土豪可以随意哦,51CTO谢谢您对作者的支持!谢谢你的慷慨大方!
本文转自 wgkgood 51CTO博客,原文链接:http://blog.51cto.com/wgkgood/1937458
基于CentOS7.3构建企业级Vsftpd文件服务器相关推荐
- 基于 Go 语言构建企业级的 RESTful API 服务
现代软件架构已经逐渐从单体架构转向微服务架构,在微服务架构中服务间通信采用轻量级通信机制.对于轻量级通信的协议而言,通常基于 HTTP 和 RPC ,能让服务间的通信变的标准化并且无状态化.此外开发模 ...
- 基于 Flink+Iceberg 构建企业级实时数据湖 | 附 PPT 下载
扫描下面二维码,回复 Flink 可获取该 PPT
- 基于centos7.9安装 imagemagick7.1.0
imagemagick已发布7.1.0-4版本, 官方提供的 rpm 安装包基于 centos8.x 构建, 奈何我们生产环境是 centos7.9版本, 只能源码安装了 安装过程依赖较多, 折腾了四 ...
- 基于K8S构建企业级Jenkins CI/CD平台实战(三) 之 带你实战Spring boot/Cloud 项目 CI/CD jenkins自动化构建、部署过程
需要环境 Git(GitLab) Harbor 私服 kubernetes-plugin 使用 Kubernetes jenkins 通过前面三篇我们已经了解了jenkins和 kubernetes- ...
- 云+X案例展 | 民生类:基于AWS PaaS构建基础集团企业级中台
本案例由浪潮投递并参与评选,CSDN云计算独家全网首发:更多关于[云+X 案例征集]的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个"云+行业" ...
- 阿里云大数据认证——基于阿里云数加构建企业级数据分析平台-课堂笔记
阿里云Clouder认证 六.基于阿里云数加构建企业级数据分析平台 1. 课程目标 (1) 了解数据分析的步骤和目的 (2) 熟悉数据分析平台搭建的组成部分 (3) 掌握阿里云数加不同产品及其使用场景 ...
- 基于k8s+Prometheus+Alertmanager+Grafana构建企业级监控告警系统
特别提醒: 下文实验需要的yaml文件和压缩包可加我微信获取 微信: luckylucky421302 1.1 深度解读Prometheus 1.1.1 什么是Prometheus? Prometh ...
- 基于阿里云数加构建企业级数据分析平台
基于阿里云数加构建企业级数据分析平台 数据分析是基于商业目的,有目的的进行收集.整理.加工和分析数据,提炼有价值信息的过程 ![在这里插入图片描述](https://img-blog.csdnimg. ...
- 基于Jenkins和k8s构建企业级DevOps容器云平台
1.1 什么是DevOps? DevOps中的Dev是Devlopment(开发),Ops是Operation(运维),用一句话来说 DevOps 就是打通开发运维的壁垒,实现开发运维一体化.DevO ...
最新文章
- 吴裕雄--天生自然 高等数学学习:高阶偏导数
- 如何将SP1集成到Office 2007安装包
- ABAP程序打印Spool Request到PDF
- 未来物联网全栈开发 --JavaScript or Python?
- 解决: Elements in iteration expect to have ‘v-bind:key‘ directives
- HDFS的读/写流程
- python中字典的常用操作命令及注意事项
- linux下tomcat部署java web项目_在linux下用tomcat部署java web项目的过程与注意事项
- Setup JIRA Service Desk 3.9.2 on Oracle Linux 6.8
- c语言补码取反后什么意思,补码为什么取反加一
- 服务器Ubuntu 16.04 更新NVIDIA显卡驱动-命令行版本及报错完美解决
- C++ CEF3加载高清图片崩溃
- opencv人脸识别-海康网络摄像头
- Maven配置中央仓库
- mysql中的locate,MySQL LOCATE()用法及代码示例
- 计算机内部应用什么计算,计算机内部使用什么来计数
- idea报错 :org.codehaus.plexus.component.repository.exception.ComponentLookupException:
- PHP编程与系统开发
- 考研数据结构之串(4.4)——练习题之将串str中所有值为ch1的字符转换成ch2的字符(C表示)
- 如何选择考研数学资料?最全考研数学复习资料推荐