权限管理的一个简单后台
程序员文章站
2022-07-13 17:06:30
...
在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
上一篇: JVM监控与调优
下一篇: Schema Registry
推荐阅读
-
EpiiAdmin 开源的php交互性管理后台框架, 让复杂的交互变得更简单!Phper快速搭建交互性平台的开发框架,基于Thinkphp5.1+Adminlte3.0+Require.js。
-
Android用MVP实现一个简单的类淘宝订单页面的示例
-
ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统之前端页面框架构建源码分享
-
自己写操作系统难吗(教你设计一个简单的系统)
-
用html5的canvas和JavaScript创建一个绘图程序的简单实例
-
一个简单的PHP验证码实现代码
-
使用Python的Tornado框架实现一个简单的WebQQ机器人
-
自建简单又实用的动态域名管理系统
-
python实现一个简单的udp通信的示例代码
-
Android中Root权限获取的简单代码