使用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 -

WinForm 之 窗口最小化到托盘及右键图标显示菜单

日常开发有时候需要实现窗口最小化到系统托盘,本文就来讲讲该如何实现winfrom最小化到系统托盘,本例子基于VS2019编写。用C#开发winform桌面程序时,程序启动后,默认是显示在桌面而且在任务栏中有对应的图标。有的时候,…

C语言学习笔记--函数与指针

1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值、参数类型和参数个数共同决定。如 int add(int i,int j)的类型为 int(int,int)。 (2)C 语言中通过 typedef 为函数类型重命名 typedef type name(parameter list);//如 typedef int f(int,int); 2. 函数指针 (…

C语言试题五十七之假定输入的字符串中只包含字母和*号。请编写函数function,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 假定输入的…

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

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

MySQL数据库的优化(下)MySQL数据库的高可用架构方案

【51CTO独家特稿】如果单MySQL的优化始终还是顶不住压力时,这个时候我们就必须考虑MySQL的高可用架构(很多同学也爱说成是MySQL集群)了,目前可行的方案有:一、MySQL Cluster 优势:可用性非常高,性能非常好。每份数据至…

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

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

C# 扩展object类 将string强制转换成int

扩展代码&#xff1a; public static class ClassExtend{/// <summary>/// 将object强制转化为int/// </summary>/// <param name"o">要强制转换的object</param>/// <param name"defaultValue">o为null或者转换失败的默认值…

Android之华为手机打开app奔溃提示java.io.FileNotFoundException: res/drawable/abc_vector_test.xml

1、问题 新建立的项目,华为手机运行起来提示如下 06-24 18:24:03.175 13314 13314 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appsinnova.android.booming/com.appsinnova.android.picper.MainActivity}: android.content…

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

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

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

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

WPF 基础控件之 TreeView 样式

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

CSS文本样式

装饰&#xff1a; text-decoration&#xff1a;line-through&#xff08;贯穿线&#xff09;&#xff0c;underline&#xff08;下划线&#xff09;&#xff0c;overline&#xff08;上划线&#xff09; 对齐&#xff1a; text-align&#xff1a;center&#xff08;居中&#x…

利用系统错误日志监控磁盘健康状况

一、故障现象 这个星期出现了两块磁盘不能读写&#xff0c;后面通过系统日志查看&#xff0c;关键字“EXT4-fs error对应某个磁盘”&#xff0c;因此利用zabbix&#xff0c;把系统日志抓取出来&#xff0c;作告警&#xff01; 二、步聚 1.机器太多&#xff0c;用到ansible的pla…

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

文章目录 1. 读取数据,并进行标准化变换2. 进行模糊C均值聚类3. 查看聚类结果4. K均值聚类分析结果1. 读取数据,并进行标准化变换 % 从文件examp09_05.xls中读取数据 [xdata,textdata] = xlsread(examp09_05.xls); % 提取元胞数组textdata第1列的第4行至最后一行,即城市名称…

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

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 一、Animation 基础 使用 Animation 可以设置帧动画&#xff0c;与 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&#xff0c;我们可以为任意类型自定义 Json 序列化。例如&#xff1a;[JsonConverter(typeof(UserJsonConverter))] public class User {public string Name { get; set; }public override string ToString(){return Name;} }public class User…