hadoop安全认证服务
   cdh版本的hadoop在对数据安全上的处理采用了Kerberos+Sentry的结构。
  
 
  
   kerberos主要负责平台用户的权限管理,sentry则负责数据的权限管理。
  
 
  
   下面我们来依次了解一下:
  
 
  
    Kerberos包含一个中心节点和若干从节点,所有节点的Kerberos认证信息都要与中心节点的规则配置文件/etc/krb5.conf保持一致。安全认证均需通过中心节点,配置了安全认证的用户可以登录到集群内的 机器。
  
 
  
   Kerberos的配置文件有两个:
  
 
  
   1、/var/kerberos/krb5kdc/kdc.conf:包括KDC的配置信息。默认放在 /usr/local/var/krb5kdc。或者通过覆盖KRB5_KDC_PROFILE环境变量修改配置文件位置。
  
 
  
   2、/etc/krb5.conf:包含Kerberos的配置信息
  
 
  
   Kerberos的管理对象称为principal(规则), 与HDFS中的用户一一对应。一般我们将hdfs设置为principal的管理员,它可以创建删除其他的principal,还可以生成其他成员的keytab。keytab是每个principal对应的密钥文件,当kerberos认证使用keytab时,可以不需要输入密码,类似于SSH的信任机制。
  
 
  
    当我们配置Kerberos的时候,系统会默认生成用户,格式一般为【用户名/hostname@domain_name】,一般情况下我们使用自己定义的用户,不要对系统生成的用户加以修改。
  
 
  
   输入kadmin.local 进入Kerberos的交互命令行。
  
 
  
   生成keytab: xst –k testuser.keytab testuser@HTHADOOP.COM,将对应的keytab拷贝至其他位置或服务器,则相应的节点则可以通过testuser的principal连接进HDFS.
  
 
  
   登录到管理员账户: 如果在本机上,可以通过kadmin.local直接登录。其它机器的,先使用kinit进行验证。
  
 
  
   kadmin.local  
   kinit admin/adminkadmin
   
 
  
    增删改查账户:在管理员的状态下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。
  
 
  
   kamdin:addprinc -randkey hdfs/hadoop1kamdin:delprinc hdfs/hadoop1kamdin:listprincs命令
  
 
  
   生成keytab:使用xst命令或者ktadd命令
  
 
  
   kadmin:xst -k /xxx/xxx/kerberos.keytab hdfs/hadoop1
  
 
  
   创建一个新的principal: addprinc testuser@HADOOP.COM,并输入密码
  
 
  
   用户操作
  
 
  
   查看当前的认证用户:klist
  
 
  
   认证用户:kinit -kt /xx/xx/kerberos.keytab hdfs/hadoop1
  
 
  
   删除当前的认证的缓存: kdestroy
  
 
  
   Apache Sentry的目标是实现授权管理,它是一个策略引擎,被数据处理工具用来验证访问权限。它也是一个高度扩展的模块,可以支持任何的数据模型。当前,它支持Apache Hive和Cloudera Impala的关系数据模型,对hue的数据权限控制也有应用。
  
 
  
    Sentry的管理对象有三个,数据库,角色,和组。数据库是在hive中创建的数据库,角色在impala中创建,而组是操作系统的用户组。
  
 
  
    Sentry的权限管理操作,都通过impala语句完成。只有启动了sentry服务,impala服务才能正常运行。
  
 
  
   使用impala-shell进入交互终端:
  
 
  
   show roles列出所有的角色
  
 
  
   show databases列出所有的数据库
  
 
  
   create role test_role创建角色
  
 
  
   drop role test_role删除角色
  
 
  
   可以直接输入show命令会提示可以跟接的关键字
  
 
  
   grant all on database ana_clientact to role admin_role 将一个数据库赋权给一个角色
  
 
  
   revoke all on database from role admin_role取消权限
  
 
  
   如果数据库中的是外部表,需要同时给角色赋予uri权限:
  
 
  
   grant all on uri 'hdfs://192.168.2.121:8020/mydata' to role admin_role
  
 
  
   列出某角色的权限:show grant role admin_role
  
 
  
   将角色赋给一个组:grant role admin_role to group hive
  
 
  
   完成以上操作以后,用户组即具有了相应数据库的操作权限。此时需要执行invalidate metadata操作,才会生效。
  
 
  
    当一个新的操作系统用户加入这个用户组,用户即具有对应的数据库权限。反之,将用户从这个组中去掉,用户对数据库的操作权限即消失。
  
 
  
   新建用户组时要保证集群内组和用户保持一致。
  
 
  
   在HUE中配置权限
  
 
  在HUE中,用户的权限是分为两个层次实现的,一个层次是HUE平台各模块的权限,这个通过HUE中组和权限实现的,另一个层次是HUE访问hive,impala数据库的权限,这个和sentry是统一的,HUE中的用户和操作系统中的用户一一映射,HUE通过寻找相同用户名的操作系统用户来确定对应的sentry权限。
这里需要注意一点,HUE中的组和操作系统的组没有关系,HUE中的组只绑定HUE平台自己的权限。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号