在github上的地址是 https://github.com/huangyunbin/hadoopSecure
效果图可以看这里:https://github.com/huangyunbin/hadoopSecure/issues/1
零 为什么有这个项目
需求:有不同的部门使用同一个hadoop系统,不同部门之间不能访问彼此的数据,除非已经授权.
hadoop的权限控制是基于操作系统的.不同部门的用户在linux中不同组的,也就是other.都是other的话就是不能区分对待了.
当然我们我们可以设置linux的acl来区分不同的组的权限.但是acl的实现过程中不是很方便和灵活.
我们决定自己写一个权限控制的管理后台.我们的一个出发点是存取要很快速,所以决定使用redis来存储权限信息.
要让hadoop能够用上这个权限后台,必须把权限后台代码嵌入到hadoop的源码中去.
一 代码的说明:
项目基于springmvc。
controller.annotation包
是用于springmvc页面到后台的多个对象绑定。
主要用到修改权限页面,因为这个时候有两个对象,一个是就的权限对象和新的权限对象。
主要通过@FormModel这个注解来实现的。
controller包
这个很简单,就是两个controller,分别对应用户和用户组,提供了接受增删改查的请求的方法。
model包
这个是最简单的,只有一个权限对象。主要属性是文件路径和允许的操作。
persist包
主要是提供了redis对应的操作方法
RedisStore保存的是redis的配置信息,项目比较简单,就没有使用读取配置文件的形式了。
RedisStore负责从redis的连接池中获取redis的连接。
RedisDao就是主要的实现类了。
有点是要注意的,保存一个权限的时候,redis中是保存了两个对象的,一个key是用户名,一个key是路径名。也就是要满足能方便的找到一个用户有哪些路径的权限,一个路径上有哪个用户有权限。
jsp页面只是用到了jsp的一些标签。
二 嵌入到cdh4的代码中:
嵌入的代码直接读取redis中的数据。所以只用到上面说的源码的persist包。
嵌入到的类是hdfs包中的org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker类的checkPermission方法(110行)
在最后加了一行代码: SecurityCenter.check(inodes[inodes.length - 1], ugi, access);
SecurityCenter的源码地址:http://pan.baidu.com/s/1GaEsa
SecurityCenter是和hadoop的自己的代码FSPermissionChecker在同一个包中的.
SecurityCenter依赖的代码都在: http://pan.baidu.com/s/1yzIm6
这些代码是依赖jedis和msgpack的,所以在hdfs包中的pom文件需要增加这个
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.msgpack</groupId>
<artifactId>msgpack</artifactId>
<version>0.6.7</version>
</dependency>
三 kerberos的使用
kerberos主要是验证用户的。cdh4从kerberos中拿到用户名然后去redis的数据中查找权限。
kerberos的原理可以参照 http://huangyunbin.iteye.com/blog/1873916
kerberos的安装最好的还是官方的文档,网上写的基本不靠谱。官方安装文档:http://web.mit.edu/kerberos/krb5-current/doc/admin/install.html
其实主要是一些配置。kadmin和klist命令能正常使用的时候,基本就差不多了。
kerberos的一些配置和命令说明 http://web.mit.edu/kerberos/krb5-current/doc/user/index.html
注意的地方
1 host设置,可以参照:http://huangyunbin.iteye.com/blog/1895341
2 导出证书的时候要kadm5.acl中配置当前用户 可以参照:http://huangyunbin.iteye.com/blog/1900550
3 要设置证书的有效期,这样才能续约 可以参照http://huangyunbin.iteye.com/blog/1897338
分享到:
相关推荐
是一个简单高效的后台权限管理系统。项目基础框架采用全新的Java Web开发框架 —— Spring Boot2.0.4,消除了繁杂的XML配置,使得二次开发更为简单;数据访问层采用Mybatis,同时引入了通用Mapper和PageHelper插件,...
又来分享一款基于最新thinkphp5开源框架5.0.13版本开发的通用后台权限管理系统,这是一款基于ThinkPHP5.0.13 + layui2.2.45 + ECharts +Mysql开发的后台管理框架,PHP版本要求提升到5.5。集成了一般应用所必须的基础...
一个简单高效的后台权限管理系统。项目基础框架采用全新的Java Web开发框架 —— Spring Boot2.0.4,消除了繁杂的XML配置,使得二次开发更为简单;数据访问层采用Mybatis,同时引入了通用Mapper和PageHelper插件,可...
layui2.5.6 + thinkphp6.0.2 权限管理后台,简单的权限管理,thinkphp6的最新版本,多应用模式
一个简单的thinkphp php类通用的管理员后台 适合初学者学习使用。 主要是续写如何给thinkphp 增加管理权限、增加登录后台共呢个
基于SSM框架简单的后台权限管理系统
项目简介:Java开发的一个简约后台管理系统 1.需求定义:外包项目如雨后春笋,开发工期被迫压缩,为了开发人员专注开发项目业务,早点下班能陪老婆、孩子。 2.产品定位: 简约后台管理系统 3.项目特点:此项目代码...
一个简单的权限管理Dome,一般在后台管理中体现,系统管理
5、权限功能需要自己编写,按照数据库角色逻辑保存即可,非常简单; 6、新建页面,只需要复制页面、修改部分字段即可完成,节省时间 7、公司小软件、网站后台、OA平台等等都可使用该框架完成快速开发 8、简洁、...
一个基于SpringBoot 2 的管理后台系统,包含了用户管理,组织机构管理,角色管理,功能点管理,菜单管理,权限分配,数据权限分配 admin-core ,核心包,包含了缓存,数据权限,公用的JS和HTML页面。 admin-console, ...
Java开发的一个通用的后台管理系统,有完善的用户、菜单和权限管理。且提供了一套快速的表单管理的开发方案。简单业务可以通过[表单配置]快速生成,复杂业务通过代码生成,完成具体业务。zcurd能够大大提高开发效率...
RGP权限管理系统是由Nick.Yan开发的一套简单的RGP权限管理系统,完全开源,免费使用,节省了程序员编写相关代码的大量时间和精力.该模块体积小,加载迅速,性能稳定,信息加密强度高,适合于中小型管理软件的用户权限...
前段时间我们写一个简单的后台模板SpringBoot系列——Security + Layui实现一套权限管理后台模板,今天我们把它完善成一个简单通用的后台管理系统,我把它叫做:Base Admin 这套Base Admin是一套简单通用的后台...
一套简单通用的后台管理系统源码+项目说明(主要功能有:权限管理、菜单管理、用户管理,系统设置、实时日志,实时监控,API加密,以及登录用户修改密码、配置个性菜单等).zip 一套简单通用的后台管理系统源码+项目...
基于SpringBoot+vue的前后端分离权限管理系统,界面美观,代码简洁易读。 基于SpringBoot+vue的前后端分离权限管理系统,界面美观,代码简洁易读。 基于SpringBoot+vue的前后端分离权限管理系统,界面美观,代码...
Flask精美完整博客源码,含管理后台及个人中心,简单权限管理! 在终端运行如下几个命令创建虚拟环境并安装依赖,步骤是: 创建虚拟环境:python3 -m venv venv 激活虚拟环境:source venv/bin/activate 安转...
简单后台权限及应用管理,所用框架:Spring + Spring JDBC + Spring MVC ,Redis缓存 Maven项目管理,前台纯静态(AJAX + JSON)
简单个人后台管理系统模板基于jquery-1.6.min.js制作,黑色扁平风格,两种菜单切换效果(简单和完整),右侧内容自适应,有全局设置、权限管理、新闻管理、界面风格、系统工具等栏目菜单。
这套Base Admin是一套简单通用的后台管理系统,主要功能有:权限管理、菜单管理、用户管理,系统设置、实时日志,实时监控,API加密,以及登录用户修改密码、配置个性菜单等。 前端:layui java后端:SpringBoot + ...
laravel通用后台模板,带权限管理,简单规范,适合后台开发快速入手