使用vsftp虚拟用户实现安全访问控制

一、ftp连接方式

1、命令连接

   ftp在与用户交互时,首先打开的是TCP的21号端口,建立命令连接,这个连接会始终存在,直到用户输入bye的那一刻,才断开命令连接。

2、数据连接

   1)主动连接

   主动连接是基于TCP21号端口的,这种方式下,是ftp服务器主动去连接客户端的,而客户端该使用哪个端口来响应这个请求呢?在这种情况下,ftp服务器和客户端就会达成一个共识:ftp服务器主动连接请求的端口是用于命令连接的端口加1,如果端口被占用,就再加1,直到找到空闲的端口为止。假如客户端与服务端建立的命令连接是:CIP,12345,SIP,21 此时客户端使用12345这个端口与ftp服务器的21号端口建立命令连接,那么在主动连接时,服务器就会使用12345+1=12346这个端口去主动连接客户端。

   使用主动连接这种方式去连接客户端,就必然会造成一种缺陷:客户端是不向外提供服务的,所以对于像这种主动来扫描它端口的行为就会被认为是一种赤裸裸的挑衅,一种攻击,因此很容易被客户端防火墙拒绝掉,造成连接的失败。

   2)被动连接

   被动连接是基于TCP的随机端口,这种方式下,客户端会发送给服务器两个数字(如123,89),那么这时建立的数据连接端口就是123*256+89。

二、用户认证方式

1、匿名用户

   在登录FTP时使用默认的用户名,一般是ftp或anonymous

2、系统用户 

   使用系统用户登录,在/etc/passwd中

3、虚拟用户

   FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户登录FTP,只能访问FTP服务器提供的资源,大大增强了系统的安全。

   虚拟用户的优点:

   1)独立:即为虚拟的,那么不会受到系统其他用户的影响

2)安全:如果vsftpd用本地用户搭建的话,有可能由于限制目录,权限等问题而引发安全为题

三、配置虚拟用户,实现安全控制(vsftpd+pam_mysql+mysql)

1、使用ftp虚拟用户案例

   某技术论坛需要做一个与用户交流使用的FTP服务器,需实现以下2条功能:

   1)专用账号(ftpuser1)允许用户上传文件、下载文件、删除文件、创建目录

   2)专用账号(ftpuser2)则只允许用户下载,不允许上传

2、新建本地用户"vuser"

   为什么需要本地用户呢?因为虚拟用户在服务器系统上不存在,所以需要新建一个本地用户,把所有的虚拟用户映射为一个系统用户,它们访问时的文件目录就是此系统用户的家目录(默认权限是700)

wKiom1M_kSrhqJ3TAAAnR-ZexTE307.png

3、安装相关软件程序

1
[root@nmshuishui ~]# yum -y install vsftpd mysql-server mysql-devel pam_mysql

4、创建虚拟用户账号

   1)准备数据库及相关表

   (1)创建数据库

1
[root@nmshuishui ~]# service mysqld start

wKiom1M_k8qCmnL5AAAornfkznA427.png

   (2)授权管理数据库的用户及网段

wKiom1M_vveQWzhMAABGnDDInt8579.png

   (3)为vsftpd数据库创建用户表

wKioL1M_l5byw4hCAAAfc4RGuA4897.png

   2)添加测试的虚拟用户

   为了密码安全,在为虚拟用户添加密码时应该使用PASSWORD函数加密后存储

wKioL1M_v-WD_KLwAABJo1FEfqs455.png

5、配置vsftpd

   1)建立基于pam认证配置文件

1
[root@nmshuishui ~]# vim /etc/pam.d/vsftpd.mysql

   添加如下两行

1
2
auth required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=172.16.251.93 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=172.16.251.93 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

   注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。

   2)修改vsftpd的配置文件(/etc/vsftpd/vsftpd.conf),使其支持mysql认证

wKiom1M_xNbDcdc-AAB0x1aKVBo553.png

   3)启动vsftpd服务进行测试

wKioL1M_wnuhI69ZAAApGoYZX6c873.png

为了以示区别,在公共目录/var/ftp/pub目录下,touch一个pub.txt,在/var/ftproot/目录下touch一个ftproot.txt

   (1)匿名用户登录

wKioL1M_uwGyIzAmAACTc7y8h1U413.png

   (2)虚拟用户ftpuser1登录

wKiom1M_u4-j91VCAAEOsrmTxws247.png

再看它所处的目录,是在/var/ftproot/目录下,有文件为证

wKioL1M_vDyQv2EGAABcZA8LTLA006.png

(3)虚拟用户ftpuser2登录

   虚拟用户ftpuser2登录后与ftpuser1登录所处的位置完全一样,不再贴图。

6、配置虚拟用户的访问权限

   vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

   1)配置vsftpd为虚拟用户提供配置文件目录

1
2
#vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers  #添加此项

   2)创建虚拟用户的配置文件目录,并提供配置文件

1
2
3
4
5
6
[root@nmshuishui ~]# cd /etc/vsftpd/                #进入vsftpd目录
[root@nmshuishui vsftpd]# mkdir vusers              #创建虚拟用户的配置文件目录
[root@nmshuishui vsftpd]# cd vusers                 #进入虚拟用户的配置文件目录
[root@nmshuishui vusers]# touch ftpuser1 ftpuser2   #提供虚拟用户的配置文件
[root@nmshuishui vusers]# ls
ftpuser1  ftpuser2

   3)配置虚拟用户的访问权限

   (1)ftpuser1允许用户上传文件、下载文件、删除文件、创建目录

1
2
3
4
5
#vim ftpuser1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022

      在windows上使用FlashFXP测试

wKioL1M_1-Oip_RuAAETbyRKHKg711.png

   (2)ftpuser2只允许用户下载,不允许上传

既然只允许ftpuser2下载,不允许上传,那就不需要给它任何权限了,只要ftpuser1上传的文件可读,ftpuser2即可下载。

wKiom1M_2ljQOgSAAAF-sHU9U_g783.png

四、经验分享时刻

1、如果没有iptables规则的话,请关闭iptables,否则它会阻挡你vsftp服务的正常运行

2、如果不使用selinux,也请关闭,如果不关闭会报下面这个错(使用FlashFXP连接FTP服务器)

wKioL1NAFKmBfsuRAAB5uNWd29U178.png










本文转自 nmshuishui 51CTO博客,原文链接:http://blog.51cto.com/nmshuishui/1390942,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端就业课 第二阶段】CSS 零基础到实战(04)定位

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。 一、定位 定位分为相对定位以及绝对定位。 相对定位可以理解为在 HTM…

Android TextView设置ClickableSpan 点击结尾空白位置也响应点击的问题

解决办法,在后边紧接着追加一个0宽度字符: builder.append("\u200b"); 相关知识: “\u200b” 为 Unicode Character ‘ZERO WIDTH SPACE’ (U200B),可用于内容标识,不占位数(宽度0&#xff0…

【MATLAB统计分析与应用100例】案例017:matlab读取Excel数据,进行变量系统聚类分析

1. 变量系统聚类分析结果 2. matlab完整代码 (1)读取数据,并转为距离向量 [X,textdata] = xlsread(examp09_03.xls); % 从Excel文件中读取数据 y = 1 -

Wordpress:将图片、post等的URL转换为相对路径

2019独角兽企业重金招聘Python工程师标准>>> 例如上传一张图片,其地址是可能 http://127.0.0.1/wp-content/uploads/2015/12/1_.png, 问题是如果我们通过其他的电脑通过wordpress主机的公网IP访问这张图片时会提示找不到。 最好的处理方法是不…

【MATLAB统计分析与应用100例】案例018:matlab读取Excel数据,进行K均值聚类分析

文章目录 1. K均值聚类分析结果2. matlab完整代码(1)读取数据,并进行标准化变换(2)选取初始凝聚点,进行聚类(3)绘制轮廓图1. K均值聚类分析结果 2. matlab完整代码 (1)读取数据,并进行标准化变换 [X, textdata] = xlsread(examp09_04.xls

CSS 零基础到实战(05)布局、盒子模型、弹性盒子【前端就业课 第二阶段】

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。 一、流动布局 流动布局有3种布局模型,分别是流动布局&…

DVWA系列之24 high级别上传漏洞

最后再来分析high级别的代码:这里首先有一条语句需要理解:$uploaded_ext substr($uploaded_name, strrpos($uploaded_name, .) 1);在这条语句里,首先利用strrpos() 函数来查找“.”在变量$uploaded_name中出现的位置,然后将得到…

WPF 基础控件之 TreeView 样式

其他基础控件1.Window2.Button3.CheckBox4.ComboBox5.DataGrid 6.DatePicker7.Expander8.GroupBox9.ListBox10.ListView11.Menu12.PasswordBox13.TextBox14.RadioButton15.ToggleButton16.Slider TreeView 实现下面的效果1)TreeView来实现动画;Grid 分两…

HTML Animation 【前端就业课 第二阶段】CSS 零基础到实战(06)

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。 一、Animation 基础 使用 Animation 可以设置帧动画,与 tr…

史上最全的Visual Studio Code安装C/C++环境,若不行头砍给你。

一、下载Visual Studio Code安装 下载链接地址 二、安装C/C++插件 输入c/c++, 然后点击那里install 三、下载MinGW配置环境变量 下载地址 进入网站后不要点击 "Download Lasted Version",往下滑,找到最新版的 "x86_64-posix-seh"。

C# 11 新特性:泛型 Attribute

之前使用JsonConverterAttribute,我们可以为任意类型自定义 Json 序列化。例如:[JsonConverter(typeof(UserJsonConverter))] public class User {public string Name { get; set; }public override string ToString(){return Name;} }public class User…

NA-NP-IE系列实验实验15:RIPv2 手工汇总

实验15:RIPv2 手工汇总1.实验目的 通过本实验可以掌握:(1)RIPv2 路由的手工汇总(2)RIPv2 不支持CIDR 汇总(3)RIPv2 可以传递CIDR 汇总2.拓扑结构 实验拓扑如图 所示。3.实验步骤 路由…

CSS3 做一个旋转的立体3D正方形 动效核心【前端就业课 第二阶段】CSS 零基础到实战(07)

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。 一、transform-origin transform-origin 用于更改当前元素的中心点&am…

【微服务专题之】.Net6下集成微服务网关-Ocelot

微信公众号:趣编程ACE关注可了解更多的.NET日常实战开发技巧,如需源码 请公众号后台留言 源码;[如果觉得本公众号对您有帮助,欢迎关注].Net6下集成微服务网关-Ocelot网关常见功能1:路由 routing2: 请求聚合3:身份验证和…

ArcGIS实验教程——实验二十七:时态数据可视化----以飓风路径为例

实验效果预览: ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 1. 时态数据简介2. 时态数据的存储方式3. 时态数据显示实例---飓风路径1. 时态数据简介 时态数据 代表某个时间点的状态,如 1990 年香港的土地利用状况或 2009 年 7 月…

02 控制器《ThinkPHP6 入门到电商实战》

文章目录(更新中…) 01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》 02 控制器《ThinkPHP6 入门到电商实战》 03 数据库查询、模型查询、多库查询《ThinkPHP6 入门到电商实战》 04 tp6 的查数据《ThinkPHP6 入门到电商实战》 05 tp6 的数据添…

聊聊C# CLR中那些大量的友元函数,友元类的底层玩法

一:理解友元 如果你看过 CLR 代码就会发现这里面有很多的 friend 修饰符, 比如: MethodTable.cpp 文件下。class MethodTable {/************************************* FRIEND FUNCTIONS************************************/// DO NOT ADD FRIENDS UNLESS ABSOL…

【详细】长按APP图标弹出快捷方式,ShortCut功能实现

Shortcuts介绍 Android7.1(API Level 25)及以上系统可以自定义Shortcuts,通过在桌面上长按App Icon弹出Shortcut列表,点击某个shortcut可使用户快捷得打开App里常用的或推荐的任务。国内各个厂商基本上在安卓8.0上集成了该功能。…

ArcGIS实验教程——实验二十八:统计图表(饼状图、柱状图)制作

统计图表(饼状图、柱状图)预览: ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 1. 制作图表2. 在地图上显示图表1. 制作图表 加载甘肃行政区划数据。 打开数据的属性表,可以看到有面积、人口、GDP、土地利用等字段。

01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》

本机环境:win10 集成环境:studyphp(方便学习使用Windows下集成环境) 数据库可视化操作软件:sqlyog 文章目录(更新中…) 01 thinkphp6的前期开发准备《ThinkPHP6 入门到电商实战》 02 控制器《…