我是靠谱客的博主 鳗鱼香菇,最近开发中收集的这篇文章主要介绍大数据学习笔记-HDFS(五)——数据安全与隐私保护1、HDFS Trash 垃圾桶2、HDFS Snapshot快照3、HDFS权限管理4、HDFS Proxy user代理用户5、HDFS透明加密,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、HDFS Trash 垃圾桶

1.1 垃圾桶概述

回收站(垃圾桶)是微软Windows操作系统里的系统文件夹。主要用来存储用户临时删除的文件
在这里插入图片描述

HDFS文件系统,有没有垃圾桶。默认情况下是没有的,删除之后,直接删除。
执行删除命令

[root@node1 ~]# hadoop fs -rm /tmp/12.tbt
Deleted /tmp/12.tbt
[root@node1 ~]# 

垃圾桶功能:HDFS trash,目的是防止无意中删除某些东西,默认不开启,文件不会立即被删除,将文件移动到current目录中(/user/${username}/.Trash/current)
.Trash中的文件在用户可配置的时间延后删除。
Trash checkpoint:检查点是用户垃圾桶下的一个目录,用于存储在创建检查点之前删除的所有文件和目录。目录(/user/${username}/.Trash/timestap_of_checkpoint_creation)文件在垃圾桶下按照时间进行管理

1.2垃圾桶使用

第一步:关闭集群

stop-dfs.sh

第二步:修改配置文件,
在core-site.xml中配置,fs.trash.interval 单位分钟在这里插入图片描述
fs.trash.checkpoint.interval前后两次检查点创建的时间间隔(分钟),配置为0,新检查点创建之后,随之就的检查点就会被删除

<property>
	<name>fs.trash.interval</name>
	<value>1440</value>
</property>
<property>
	<name>fs.trash.checkpoint.interval</name>
	<value>0</value>
</property>

在这里插入图片描述

第三步:配置文件同步到其他节点

scp -r core-site.xml root@node3:$PWD 
scp -r core-site.xml root@node2:$PWD

第四步:启动hdfs

start-dfs.sh

功能更使用,删除文件

[root@node1 hadoop]# hadoop fs -rm /tmp/small/1.txt
2022-11-27 12:40:17,369 INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/tmp/small/1.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/tmp/small/1.txt

查看回收站中的数据

[root@node1 hadoop]# hadoop fs -ls /user/root/.Trash/Current/tmp/small/
Found 1 items
-rw-r--r--   3 root supergroup         14 2022-11-21 18:01 /user/root/.Trash/Current/tmp/small/1.txt

恢复

[root@node1 hadoop]# hadoop fs -mv /user/root/.Trash/Current/tmp/small/ /tmp/small
[root@node1 hadoop]# hadoop fs -ls /user/root/.Trash/Current/tmp/small/
ls: `/user/root/.Trash/Current/tmp/small/': No such file or directory
[root@node1 hadoop]# hadoop fs -ls /tmp/small
Found 3 items
-rw-r--r--   3 root supergroup          7 2022-11-21 17:41 /tmp/small/2.txt
-rw-r--r--   3 root supergroup          7 2022-11-21 17:41 /tmp/small/3.txt
drwx------   - root supergroup          0 2022-11-27 12:40 /tmp/small/small

直接删除

[root@node1 hadoop]# hadoop fs -rm -skipTrash /tmp/small/small
rm: `/tmp/small/small': Is a directory
[root@node1 hadoop]# 

清空回收站
除了fs.trash.interval参数控制到期自动删除之外。可以手动删除垃圾桶中的文件

[root@node1 hadoop]# hadoop fs -rm  /tmp/small/2.txt
2022-11-27 12:48:50,600 INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/tmp/small/2.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/tmp/small/2.txt
[root@node1 hadoop]# hadoop fs -ls /user/root/.Trash/Current/tmp/small/
Found 1 items
-rw-r--r--   3 root supergroup          7 2022-11-21 17:41 /user/root/.Trash/Current/tmp/small/2.txt
[root@node1 hadoop]# hadoop fs -rm /user/root/.Trash/Current/tmp/small/2.txt
Deleted /user/root/.Trash/Current/tmp/small/2.txt
[root@node1 hadoop]# hadoop fs -ls /user/root/.Trash/Current/tmp/small/
[root@node1 hadoop]# 

2、HDFS Snapshot快照

2.1 快照介绍

可以理解为瞬间的投影,是数据存储在某一时刻的状态记录,与备份区别,备份数据存储的某一时刻的副本
HDFS Snapshot快照是整个文件系统或某个目录在某个时刻的镜像,该镜像不会随着源目录的改变而动态变化。
快照作用:数据恢复,对重要目录进行创建snapshot的操作;数据备份,整个集群、某些目录、文件备份不同备份之间差异性,增量备份。
数据测试:某些重要数据进行测试或者实验在快照上进行。

2.2HDFS快照功能的实现

HDFS快照不是数据的简单拷贝,只是差异的记录。对于大多不变的数据,你所看到的数据其实是当前物理路径所指的内容,而发生变更的inode数据才会被快照额外拷贝,也就是差异拷贝

inode指索引节点,用来存放文件及目录的基本信息,包含时间、名称、所有者、所在组。

hdfs快照不会复制datanode中的块,只记录块列表和文件大小,HDFS快照不会对常规HDFS操作产生不利影响,修改记录按照逆时针顺序进行,因此可以直接访问当前数据,通过从当前数据中减去来修改快照计算数据

2.3快照命令

HDFS可以针对整个文件系统或者某个目录创建快照,创建快照的前提是相应的目录开启快照功能

开启快照

hdfs dfsadmin -allowSnapshot /allenwoon

禁用快照(禁用快照的前提是该目录所有的快照已经删除

hdfs dfsadmin -disallowSnapshot  /allenwoon```

快照操作

  • 创建快照 createSnapshot
  • 删除快照 deleteSnapshot
  • 重命名快照 renameSnapshot
  • 列出可以快照目录列表 lsSnapshottableDir
  • 获取快照差异报告 snapshotDiff

案例
第一步:创建一个目录

 hadoop fs -mkdir /allenwoon

测试:直接创建快照(提示这个目录不是一个快照目录)

[root@node1 ~]# hdfs dfs -createSnapshot /allenwoon
createSnapshot: Directory is not a snapshottable directory: /allenwoon

在这里插入图片描述

第二步:准备数据

```bash
[root@node1 ~]# echo "hello hadoop" >> 1.txt
[root@node1 ~]# cat 1.txt 
hello hadoop
[root@node1 ~]# hadoop fs -put 1.txt /allenwoon
[root@node1 ~]# hadoop fs -ls /allenwoon
Found 1 items
-rw-r--r--   3 root supergroup         13 2022-11-27 14:36 /allenwoon/1.txt

第三步:启用快照

hdfs dfsadmin -allowSnapshot /allenwoon

在这里插入图片描述

第四步:创建快照

# 不指定名字
 hdfs dfs -createSnapshot /allenwoon
 # 指定名字
 hdfs dfs -createSnapshot /allenwoon mysnaps

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

快照重命名

hdfs dfs -renameSnapshot /allenwoon mysnaps mysnap2

列出所有快照开启的目录

hdfs lsSnapshottableDir

在这里插入图片描述
第五步:快照差异比较
准备

# 创建文件
echo 222 > 2.txt
# 追加到原来文件
hadoop fs -appendToFile 2.txt /allenwoon/1.txt
# 创建快照
hdfs dfs -createSnapshot /allenwoon mysnap3
# Created snapshot /allenwoon/.snapshot/mysnap3
# 上传任意文件
# hadoop fs -put anaconda-ks.cfg /allenwoon
# 创建快照
hdfs dfs -createSnapshot /allenwoon mysnap4
# Created snapshot /allenwoon/.snapshot/mysnap4

快照差异比较

hdfs snapshotDiff /allenwoon mysnap2 mysnap3
#Difference between snapshot mysnap2 and snapshot mysnap3 under directory /allenwoon:
# M       ./1.txt

hdfs snapshotDiff /allenwoon mysnap2 mysnap4
#Difference between snapshot mysnap2 and snapshot mysnap4 under directory /allenwoon:
#M       .
#+       ./anaconda-ks.cfg
#M       ./1.txt

快照差异释义

+ The file/directory has been created.
- The file/directory has been deleted.
M The file/directory has been modified.
R The file/directory has been renamed.

第六步:删除快照文件夹路径
如果有快照存在,不让删除

hadoop fs -rm -r /allenwoon
# rm: Failed to move to trash: hdfs://node1:8020/allenwoon: The directory /allenwoon cannot be deleted since /allenwoon is snapshottable and already has snapshots

第七步:从快照拷贝文件

hadoop fs -cp -f /allenwoon/.snapshot/mysnap2/1.txt  /allenwoon

在这里插入图片描述

第八步:删除快照

hdfs dfs -deleteSnapshot /allenwoon mysnap4

3、HDFS权限管理

3.1 权限管理概述(3A)

认证(Authentication)、授权(Authorization)、审计(Accounting)是计算机安全领域的一个架构模式。缩写为3A。用书先证明自己是谁;然后授予权限,你能干什么;同时操作被记录,你干了什么。
身份:如何通过一个标识区分实体、用户和服务。
案例分析:使用普通用户登录Linux(认证),提示输入密码。
使用sudo命令执行某些管理员权限命令(授权,发现没有权限),使用root授予相应的权限,发先可以访问
通过secure日志查看操作记录(审计)
HDFS权限管理概述:客户端的操作首先通过用户身份验证机制获得“凭证”,HDFS根据此“凭证”分辨出合法用户,然后HDFS查看用户是否已经授权。

3.2HDFS UGO权限管理

每个文件和目录都与一个拥有者和组相关联
USER(文件所有者):一般是创建该文件的用户,对该文件具有完全的权限
Group(拥有者所在的组):和文件所有者同一组的用户。
OTHER:其他用户组的用户
权限:读权限(r)、写权限(w)、执行权限(x)
HDFS中,对于文件需要r权限才能读取文件,而w权限才能写入或者追加文件,没有x权限的概念
对于目录:需要r权限才能列出目录,需要w权限才能创建或删除文件或目录,需要x权限才能访问目录的子集。

读——4,写——2,执行——1,每一个用户对文件或文件夹的权限可以用数字表示。

权限掩码:与Linux系统类似,用于设置在HDFS中默认新建的文件和目录权限限位。默认umask值有属性fs.permissions.umask-mode指定,默认值022。
创建文件和目录的时候使用umask,默认权限就是
目录:777-022=755,
文件:777-022=755,因为HDFS中没有x的概念,所以是-rw-r–r–
UGO权限相关命令

#变更目录或文件的权限 可以使用数字 也可以使用字母 u g o a + - r w x
# [-R]递归其下所有文件夹和文件
hadoop fs -chmod [-R] 777 /user/itcast/foo
hadoop fs -chmod [-R] u+x,o-x /user/itcast/foo
#变更目录或文件的属主或用户组
hadoop fs -chown [-R] itcast /user/itcast/foo
hadoop fs -chown [-R] itcast:ogroup /user/itcast/foo
#变更用户组
hadoop fs -chgrp [-R] group1 /user/itcast/foo

在这里插入图片描述
在这里插入图片描述
hadoop3.0 提供了WebUI页面的UGO权限修改。
在这里插入图片描述

3.3 用户身份认证

在HDFS中,用户身份认证独立于HDFS项目之外,也就是说HDFS不负责用户身份合法性检查,但HDFS汇通过获取相关用户身份,然后用于后续权限管理,
用户是否合法,完全取决于集群使用认证体系,目前社区支持两种身份认证,即简单认证(Simple)和(Kerberos)

Simple认证:
基于HDFS客户端所在的Linux系统登录的用户名来进行认证,只要用户能登录就认证成功,客户端与NN交互时会将用户的登录账号(通过类似whoami的命令来获取)作为合法用户名传递至NN。
弊端:
在多租户条件这种认证会导致权限混淆;
同时恶意用户也可以伪造其他人的用户名非法获得相应的权限,对数据安全造成极大的隐患。
线上生产环境一般不会使用。
Simple认证时,HDFS想法时:防止好人误做坏事,不防止坏人做坏事,当客户端提交给Hadoop一个用户名时,Hadoop会相信客户端所说的一切,并保证整个集群的所有机器也相信。
Kerberos介绍
kerberos源于希腊语,是一只守护地狱的三头巨犬,麻绳理工学院开发的一种网络身份认证协议,通过密钥加密技术为服务端、服务器应用程序提供身份强认证。https://kerberos.org/
角色:
访问服务的clinet
提供服务的server
KDC(Key DIStribution Center) 密钥分发中心。
域概念:client、server、kdc都位于一个域中,为域内的用户提供服务client 是否有权限访问server由kdc发放的票据判定。
域:
票据:合法、权限,
Kerberos-KDC

  • Authentication Server:验证Client端的身份
  • Ticket Granting Server: 通过AS发送给Client的票(TGT)换取访问Server端的票。
    组映射:用户组映射服务获取该用户对应的用户组列表。使用系统自带的方案,NameNode上的,利用Linux系统上的组
    Linux用户和用户组保存在/etc/passwd和/etc/group,HDFS通过外部调用shell命令获取用户的所有组列表。

/etc/passwd 一行记录对应一个用户,每行七个字段,冒号分隔
用户名:口令:用户标识号:组标时号:注释性描述:主目录:登录shell
/etc/group一行记录对应一个用户,每行四个字段,冒号分隔
组名:密码:GID:该用户组中的用户列表

优点:服务稳定,不易受外部服务影响
缺点:用户和用户组管理需要root权限,在服务器上生成大量用户组,后续管理(自动化运维)压力较大

HDFS ACL权限管理
ACL(Access Control List)访问控制列表,为特定的用户或组设置不同的权限,而不是文件的所有者和文件的所有组。
ACL Shell命令

#显示文件和目录的访问控制列表(ACL)。如果目录具有默认ACL,则getfacl还将显示默认ACL。
hadoop fs -getfacl [-R] <path>

#设置文件和目录的访问控制列表(ACL)。
hadoop fs [generic options] -setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]

#ls的输出将在带有ACL的任何文件或目录的权限字符串后附加一个'+'字符。
hadoop fs -ls <args>

操作案例
使用root在HDFS创建一个文件夹

hadoop fs -mkdir /itheima

创建完成,权限是755
在这里插入图片描述
普通用户登录,上传文件,发现没有权限

ssh zkw@node1
#zkw@node1's password: 
echo 1>>1.txt
hadoop fs -put 1.txt /itheima
# put: Permission denied: user=zkw, access=WRITE, inode="/itheima":root:supergroup:drwxr-xr-x

在这里插入图片描述
为了让zkw用户上传,可以为文件开发其他用户组的写权限

hadoop fs -chmod o+w /itheima

自己不能给自己添加权限
在这里插入图片描述
用root用户添加权限
在这里插入图片描述
但是所有其他用户都有了写的权限,很恐怖,root现在立刻删除其他用户组的写权限,十分繁琐

在这里插入图片描述
使用ACL给allenwoon用户单独添加权限 而/itheima文件夹本身权限不变

 hadoop fs -setfacl -m user:zkw:rwx /itheima
# setfacl: The ACL operation has been rejected.  Support for ACLs has been disabled by setting dfs.namenode.acls.enabled to false.

关闭hdfs

stop-dfs.sh

需要在hdfs-site.xml中开启相应配置

 <property>
      <name>dfs.namenode.acls.enabled</name>
      <value>true</value>
  </property>

在这里插入图片描述
复制到其他节点

scp hdfs-site.xml root@node2:$PWD

启动hdfs

start-dfs.sh

查看acl权限

hadoop fs -getfacl /itheima
# file: /itheima
# owner: root
# group: supergroup
#user::rwx
#group::r-x
#other::r-x

设置zkw的acl

hadoop fs -setfacl -m user:zkw:rwx /itheima

再次查看


 hadoop fs -getfacl /itheima
# file: /itheima
# owner: root
# group: supergroup
#user::rwx
#user:zkw:rwx
#group::r-x
#mask::rwx
#other::r-x

在这里插入图片描述

上传文件

 hadoop fs -put 1.txt /itheima

在这里插入图片描述

删除用户权限

 hadoop fs -setfacl -x user:zkw /itheima

删除不干净
在这里插入图片描述
完全删除
在这里插入图片描述

4、HDFS Proxy user代理用户

Proxy 代理、委托用来进行事务不想或不能进行的其他操作。

HDFS Proxy user:一个用户如何代表另一个用户进行HDFS操作
常用场景:第三方软件与Hadoop集成的时候用
配置参数:hadoop.proxyuser.$superuser.hosts
hadoop.proxyuser.$superuser.groups
例如:名为super的超级用户只能从host1和host2连接来模拟属于group1和group2的用户。

<!--在core-site中配置-->
<property>
    <name>hadoop.proxyuser.super.hosts</name>
       <value>host1,host2</value>
       </property>
<property>
       <name>hadoop.proxyuser.super.groups</name>
       <value>group1,group2</value>
</property>
<!--super是代理用户的名-->

宽松配置,使用* 代表任何主机、任何组。

5、HDFS透明加密

HDFS明文存储的弊端

HDFS中的数据以Block的形式存放在数据的本地磁盘上,但是Block都是明文的,对于单个小文件,一个文件为一个block,相对容易字节从linux系统中找到相应数据块。
实验:
文件上传
在这里插入图片描述
在这里插入图片描述
根据block编号和信息直接通过linux找数据。
在这里插入图片描述
明文存储,直接可以查看到了数据。
在这里插入图片描述
加密技术:加密算法 加密密钥,通过解密算法和密钥解密查看
常见的加密层级 应用层加密,数据库层加密,文件系统加密,磁盘层加密。
HDFS透明加密 端到端的加密和接密只能通过客户端打开。
HDFS保存的是加密后的文件,文件加密的密钥也是加密的。让非法用户从操作系统拷贝文件,看到的是密文,无法解读。

透明加密
只有HDFS客户端可以加密和解密,密钥管理在HDFS外部,HDFS无法访问未加密的数据或加密密钥。数据块以加密形式存储,
加密区域:加密区域就是HDFS上的一个目录,只不过该目录比其他目录特殊。加密区域里写入文件的时候会被透明加密,读取文件的时候又会被透明解密。
密钥:加密区域的密钥(EZK,encryption zone key),数据加密密钥(DEK,data encryption key)
DEK会使用各自的加密区域的EZK密钥进行加密。加密密钥的密钥(EDEK,encryption data encryption key)。
密钥库,存储密钥的叫密钥库,将HDFS与外部企业级密钥库集成是部署透明加密的第一步。
KMS(密钥管理服务为,Key Management Server),

透明加密的过程:
写数据:
提前动作:创建加密区,设置加密区密钥

  1. Client向NN请求在HDFS某个加密区新建文件;
  2. NN从缓存中取出一个新的EDEK(后台不断从KMS拉取新的EDEK到缓存中);
  3. 获取到EDEK会被NN保存到文件的元数据中;
  4. 然后NN将EDEK发送给Client;
  5. Client发送EDEK给KMS,KMS用对应的EZ key将EDEK解密出DEK发送给Client;
  6. Client用DEK加密文件内容发送给datanode进行存储。

在这里插入图片描述
读数据:

读流程与写流程类型,区别就是NN直接读取加密文件元数据里的EDEK返回给客户端,客户端一样把EDEK发送给KMS获取DEK。再对加密内容解密读取。
EDEK的加密和解密完全在KMS上进行。更重要的是,请求创建或解密EDEK的客户端永远不会处理EZ密钥。仅KMS可以根据要求使用EZ密钥创建和解密EDEK。

Hodoop KMS 配置
第一步:关闭集群

stop-dfs.sh

第二部:keystone密钥库,此处使用JavaKeyStoreProvider作为keystore,其他参考密钥库参考地址

keytool -genkey  -alias 'itcast_keystore' 

在这里插入图片描述

在这里插入图片描述
第三步:修改kms配置文件

 cd /export/servers/hadoop-3.1.4/etc/hadoop/
# 创建密码文件
vim kms.keystore.password
[root@node1 hadoop]# cat kms.keystore.password
123456
# 修改配置文件
[root@node1 hadoop]# vim kms-site.xml 
[root@node1 hadoop]# vim kms-env.sh 
[root@node1 hadoop]# vim core-site.xml 
[root@node1 hadoop]# vim hdfs-site.xml 

<!-- kms-site.xml-->
<configuration>
	<property>
		<name>hadoop.kms.key.provider.uri</name>
		<value>jceks://file@/${user.home}/kms.jks</value>
	</property>
	<property>
		<name>hadoop.security.keystore.java-keystore-provider.password-file</name>
		<value>kms.keystore.password</value>
	</property>
	<property>
		 <name>dfs.encryption.key.provider.uri</name>
		 <value>kms://http@node1:16000/kms</value>
	</property>
	<property>
		<name>hadoop.kms.authentication.type</name>
		<value>simple</value>
	</property>
</configuration>
<!-- core-site.xml -->
<property>
    <name>hadoop.security.key.provider.path</name>
    <value>kms://http@node1:16000/kms</value>
</property>
<!-- hdfs-site.xml -->
<property>
    <name>hadoop.security.key.provider.path</name>
    <value>kms://http@node1:16000/kms</value>
</property>
# kms-env.sh
export KMS_HOME=/export/servers/hadoop-3.1.4
export KMS_LOG=${KMS_HOME}/logs/kms
export KMS_HTTP_PORT=16000
export KMS_ADMIN_PORT=16001

同步到其他节点

scp kms-site.xml kms-env.sh core-site.xml hdfs-site.xml root@node2:$PWD
scp kms-site.xml kms-env.sh core-site.xml hdfs-site.xml root@node3:$PWD

启动HDFS集群

start-dfs.sh

启动kms

hadoop --daemon start kms

关闭

hadoop --daemon stop kms

透明加密使用
第一步:创建与查看key

 hadoop key create ezk
 hadoop key list -metadata

在这里插入图片描述

第二步:创建加密区,一个目录,
普通文件夹创建

hadoop fs -mkdir /zone

设置为加密区

hdfs crypto -createZone -keyName ezk -path /zone

在这里插入图片描述
文件创建与上传

 echo hello,hadoop >>1.txt
 cat 1.txt 
# hello,hadoop
 hadoop fs -put 1.txt /zone
 hadoop fs -ls /zone
#Found 2 items
#drwxrwxrwt   - root supergroup          0 2022-11-28 01:22 /zone/.Trash
#-rw-r--r--   3 root supergroup         13 2022-11-28 01:24 /zone/1.txt

在这里插入图片描述
验证
客户端查看
在这里插入图片描述
在这里插入图片描述

linux文件系统直接打开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最后

以上就是鳗鱼香菇为你收集整理的大数据学习笔记-HDFS(五)——数据安全与隐私保护1、HDFS Trash 垃圾桶2、HDFS Snapshot快照3、HDFS权限管理4、HDFS Proxy user代理用户5、HDFS透明加密的全部内容,希望文章能够帮你解决大数据学习笔记-HDFS(五)——数据安全与隐私保护1、HDFS Trash 垃圾桶2、HDFS Snapshot快照3、HDFS权限管理4、HDFS Proxy user代理用户5、HDFS透明加密所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部