`

权限管理的一个简单后台

 
阅读更多

在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








2
5
分享到:
评论
4 楼 hsluoyz 2019-05-22  
PyCasbin是一个用Python语言打造的轻量级开源访问控制框架( https://github.com/casbin/pycasbin ),支持ACL、RBAC、ABAC、Restful等权限模型,目前在 GitHub 开源。针对Flask可以采用Flask-Casbin权限插件:https://github.com/pycasbin/flask-casbin
3 楼 jinnianshilongnian 2013-06-24  
huangyunbin 写道
jinnianshilongnian 写道
建议把 target .classpath  .project  .settings 等这些自动生成的不要上传。 ignore掉



呵呵 其实这个也可以方便别人的

哈哈  倒无所谓;
2 楼 huangyunbin 2013-06-24  
jinnianshilongnian 写道
建议把 target .classpath  .project  .settings 等这些自动生成的不要上传。 ignore掉



呵呵 其实这个也可以方便别人的
1 楼 jinnianshilongnian 2013-06-24  
建议把 target .classpath  .project  .settings 等这些自动生成的不要上传。 ignore掉

相关推荐

Global site tag (gtag.js) - Google Analytics