首页 > 其他分享 >HDFS数据安全与隐私保护

HDFS数据安全与隐私保护

时间:2023-03-01 16:36:09浏览次数:39  
标签:HDFS fs 加密 文件 hadoop 隐私 数据安全 快照

一、HDFS Trash垃圾桶

1.文件系统垃圾桶背景

HDFS本身也是一个文件系统,那么就会涉及到文件数据的删除操作。
默认情况下,HDFS中是没有回收站垃圾桶概念的,删除操作的数据将会被直接删除,没有后悔药。

2.功能概述

1.HDFS Trash机制,叫做回收站或者垃圾桶。Trash就像Windows操作系统中的回收站一样。它的目的是防止你无意中删除某些东西。默认情况下是不开启的。
2.启用Trash功能后,从HDFS中删除某些内容时,文件或目录不会立即被清除,它们将被移动到回收站Current目录中(/user/${username}/.Trash/current)。
3.Trash中的文件在用户可配置的时间延迟后被永久删除。
4.也可以简单地将回收站里的文件移动到.Trash目录之外的位置来恢复回收站中的文件和目录。

Trash Checkpoint

检查点仅仅是用户回收站下的一个目录,用于存储在创建检查点之前删除的所有文件或目录。
回收站目录在/user/${username}/.Trash/{timestamp_of_checkpoint_creation}
最近删除的文件被移动到回收站Current目录,并且在可配置的时间间隔内,HDFS会为在Current回收站目录下的文件创建检查点/user/${username}/.Trash/<日期>,并在过期时删除旧的检查点。

3.开启Trash功能

修改core-site.xml文件,添加下面两个属性

fs.trash.interval:回收站中的文件多少分钟后会被系统永久删除。如果为零,Trash功能将被禁用。
fs.trash.checkpoint.interval:前后两次检查点的创建时间间隔(单位也是分钟),新的检查点被创建后,随之旧的检查点就会被系统永久删除。如果为零,则将该值设置为fs.trash.interval的值。

同步集群配置文件,重启HDFS

stop-dfs.sh
start-dfs.sh

4.Trash功能使用

4.1 删除文件到Trash

开启Trash功能后,正常执行删除操作,文件实际并不会被直接删除,而是被移动到了垃圾回收站。

 

删除文件跳过Trash、直接删除

有的时候,我们希望直接把文件删除,不需要再经过Trash回收站了。
可以在执行删除操作的时候添加一个参数:-skipTrash.

4.2 从Trash中恢复文件

回收站里面的文件,在到期被自动删除之前,都可以通过命令恢复出来。
使用mv、cp命令把数据文件从Trash目录下复制移动出来就可以了。

4.3 清空Trash

1.除了fs.trash.interval参数控制到期自动删除之外,用户还可以通过命令手动清空回收站,释放HDFS磁盘存储空间。
2.首先想到的是删除整个回收站目录,将会清空回收站,这是一个选择。
3.此外。HDFS提供了一个命令行工具来完成这个工作:hadoop fs -expunge。该命令立即从文件系统中删除过期的检查点。

二、HDFS Snapshot快照

1.快照概述及作用

1.1 概述

可以将快照理解为拍照片时的那一瞬间的投影。
快照(Snapshot)是数据存储的某一时刻的状态记录;备份(Backup)则是数据存储的某一个时刻的副本。
HDFS Snapshot快照是整个文件系统或某个目录在某个时刻的镜像。该镜像并不会随着源目录的改变而进行动态的更新。

1.2 快照作用

数据恢复
  对重要目录进行创建snapshot的操作,当用户误操作时,可以通过snapshot来进行相关的恢复操作。
数据备份
  使用snapshot来进行整个集群,或者某些目录、文件的备份。管理员以某个时刻的snapshot作为备份的起始结点,然后通过比较不同备份之间差异性,来进行增量备份。
数据测试
  在某些重要数据上进行测试或者实验,可能会直接将原始的数据破坏掉。可以临时的为用户针对要操作的数据来创建一个snapshot,然后让用户在对应的snapshot上进行相关的实验和测试,从而避免对原始数据的破坏。

2.快照功能实现

1 HDFS快照不是数据的简单拷贝,只做差异的记录。
2 对于大多不变的数据,你所看到的数据其实是当前物理路径所指的内容,而发生变更的inode数据才会被快照额外拷贝,也就是所说的差异拷贝。
3 inode指索引节点,用来存放文件及目录的基本信息,包含时间、名称、拥有者、所在组等。
4 HDFS快照不会复制datanode中的块,只记录了块列表和文件大小。
5 HDFS快照不会对常规HDFS操作产生不利影响,修改记录按逆时针顺序进行,因此可以直接访问当前数据。通过从当前数据中减去修改来计算快照数据。

3.快照相关命令

3.1 启用快照功能

1 HDFS中可以针对整个文件系统或者某个目录创建快照,但是创建快照的前提是相应的目录开启快照的功能。
2 如果针对没有启动快照功能的目录创建快照则会报错

3.2 禁用快照功能

gHDFS中可以针对已经开启快照功能的目录进行禁用快照功能的设置
禁用的前提是该目录的所有快照已经被删除

3.3 快照操作相关命令

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

4.快照使用示例

4.1 开启指定目录快照功能

4.2 创建快照

 

4.3 HDFS Web UI查询集群快照信息

4.4 Web页面浏览快照

4.5 重命名快照

#重命名快照hdfs dfs -renameSnapshot /allenwoon mysnap1 mysnap2

4.6 列出HDFS集群所有开启快照功能的目录

4.7 快照间差异比较

不同版本快照准备

[root@node1 ~]# echo 222 > 2.txt
[root@node1 ~]# hadoop fs -appendToFile 2.txt /allenwoon/1.txt
[root@node1 ~]# hadoop fs -cat /allenwoon/1.txt
1
222
[root@node1 ~]# hdfs dfs -createSnapshot /allenwoon mysnap3
Created snapshot /allenwoon/.snapshot/mysnap3
[root@node1 ~]# hadoop fs -put zookeeper.out /allenwoon
[root@node1 ~]# hdfs dfs -createSnapshot /allenwoon mysnap4
Created snapshot /allenwoon/.snapshot/mysnap4

快照间差异比较

#比较指定目录两个版本快照之间的差异hdfs snapshotDiff /allenwoon mysnap2 mysnap3

结果

5.删除快照

#删除指定快照
hdfs dfs -deleteSnapshot /allenwoon mysnap4

6.删除开启快照功能的目录

hadoop fs -rm -r /allenwoon #拥有快照的目录不允许被删除,某种程度上也保护了文件安全

三、HDFS 权限管理

1.HDFS权限管理概述

1 作为分布式文件系统,HDFS也集成了一套权限管理系统。
2 客户端在进行每次文件操时,系统会从用户身份认证和数据访问授权两个环节进行验证。
3 客户端的操作请求会首先通过用户身份验证机制来获得“凭证”(类似于身份证书),HDFS根据此“凭证”分辨出合法的用户名;
4 然后HDFS再据此查看该用户所访问的数据是否已经授权,或者说该身份凭证是否具有权限做这件事。
5 一旦这个流程中的某个环节出现异常,客户端的操作请求便会失败。

2.HDFS UGO权限管理

2.1 拥有者、所在组、其他用户组

HDFS文件权限与Linux/Unix系统的UGO模型类似,简单描述为:每个文件和目录都与一个拥有者和一个组相关联。
USER(文件的所有者):一般是创建该文件的用户,对该文件具有完全的权限。
GROUP(拥有者所在的组):和文件所有者属于同一组的用户。
OTHER(其他用户组):其他用户组的用户。

2.2 读、写、执行权限

1 HDFS文件权限也细分为:读权限(r)、写权限(w)、执行权限(x)。
2 在HDFS中,对于文件,需要r权限才能读取文件,而w权限才能写入或追加到文件。没有x可执行文件的概念。
3 在HDFS中,对于目录,需要r权限才能列出目录的内容,需要w权限才能创建或删除文件或目录,并且需要x权限才能访问目录的子级。

2.3 UGO权限相关命令

#变更目录或文件的权限 可以使用数字 也可以使用字母 u g o a + - r w 
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

Web页面修改UGO权限

3. HDFS用户身份认证

在HDFS中,用户身份认证独立于HDFS项目之外,也就说HDFS并不负责用户身份合法性检查。
但HDFS会通过相关接口来获取相关的用户身份,然后用于后续的权限管理。
用户是否合法,完全取决于集群使用认证体系。目前社区支持两种身份认证,即简单认证(Simple)和Kerberos。
由hadoop.security.authentication属性指定,默认simple。

3.1 Simple认证

基于HDFS客户端所在的Linux/Unix系统的登录用户名来进行认证。只要用户能正常登录就认证成功。
客户端与NN交互时,会将用户的登录账号(通过类似whoami的命令来获取)作为合法用户名传递至NN。

3.2 Kerberos

pass,自行百度

4.ACL权限管理

在实际工作中,使用UGO来控制权限可以满足大部分场景下的数据安全性要求,但是对于一些复杂的权限需求则无能为力。

4.1 ACL Shell 命令

hadoop fs -getfacl [-R] <path> #显示文件和目录的访问控制列表(ACL)。如果目录具有默认ACL,则getfacl还将显示默认ACL
hadoop fs [generic options] -setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>] #设置文件和目录的访问控制列表(ACL)
hadoop fs -ls <args> #ls的输出将在带有ACL的任何文件或目录的权限字符串后附加一个'+'字符

4.2 示例

1.使用root超级用户在HDFS上创建一个文件夹
hadoop fs -mkdir /itheima

2.使用普通用户allenwoon去操作/itheima  发现没有权限
[allenwoon@node1 ~]$ echo 1 >> 1.txt
[allenwoon@node1 ~]$ hadoop fs -put 1.txt /itheima
put: Permission denied: user=allenwoon, access=WRITE, inode="/itheima":root:supergroup:drwxr-xr-x

3.接下来使用ACL给allenwoon用户单独添加权限  而/itheima文件夹本身权限不变

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

4.发现报错  原因是ACL功能默认是关闭的。在hdfs-site.xml中设置dfs.namenode.acls.enabled=true 开启ACL,重启HDFS集群

5.设置成功之后查看ACL权限
hadoop fs -getfacl /itheima
[root@node1 ~]# hadoop fs -getfacl /itheima
# file: /itheima
# owner: root
# group: supergroup
user::rwx
user:allenwoon:rwx    # 发现allenwoon权限配置成功
group::r-x
mask::rwx
other::r-x

6.再使用普通用户allenwoon去操作,发现可以成功了.如果切换其他普通用户比如itcast  发现还是无法操作
[itcast@node2 ~]$ echo 2 >> 2.txt
[itcast@node2 ~]$ hadoop fs -put 2.txt /itheima
put: Permission denied: user=itcast, access=WRITE, inode="/itheima":root:supergroup:drwxrwxr-x

4.3 ACL其他操作命令

1.带有ACL的任何文件或目录的权限字符串后附加一个'+'字符
[root@node1 ~]# hadoop fs -ls /
Found 5 items
drwxr-xr-x   - root supergroup          0 2021-01-06 20:59 /data
drwxr-xr-x   - root supergroup          0 2020-12-31 11:59 /itcast
drwxrwxr-x+  - root supergroup          0 2021-01-07 19:38 /itheima
drwx------   - root supergroup          0 2020-12-31 11:56 /tmp
drwxr-xr-x   - root supergroup          0 2020-12-31 11:56 /user

2.删除指定的ACL条目
hadoop fs -setfacl -x user:allenwoon /itheima

3.删除基本ACL条目以外的所有条目。保留用户,组和其他条目以与权限位兼容。
hadoop fs -setfacl -b /itheima

4.设置默认的ACl权限,以后在该目录中新建文件或者子目录时,新建的文件/目录的ACL权限都是之前设置的default ACLs
[root@node1 ~]# hadoop fs -setfacl -m default:user:allenwoon:rwx /itheima
[root@node1 ~]# hadoop fs -getfacl /itheima
# file: /itheima
# owner: root
#group:supergroup
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:allenwoon:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

5.删除默认ACL权限
hadoop fs -setfacl -k /itheima

6.--set: 完全替换ACL,丢弃所有现有条目。acl_spec必须包含用户,组和其他条目,以便与权限位兼容。
hadoop fs -setfacl --set user::rw-,user:hadoop:rw-,group::r--,other::r-- /file

四、HDFS Proxy user代理用户

1.背景介绍

Proxy中文称之为代理、委托。用来进行事物不想或不能进行的其他操作。
HDFS Proxy user(代理用户)描述的是一个用户(比如超级用户)如何代表另一个用户提交作业或访问HDFS。
比如:用户名为“Admin”的超级用户代表用户Allen提交作业并访问HDFS。 因为超级用户Admin具有kerberos凭证,但Allen用户没有任何凭证。这些任务需要以用户Allen的身份运行,而对namenode的任何文件访问都必须以用户Allen的身份进行。
要求用户Allen可以在通过Admin的kerberos凭据进行身份验证的连接上连接到namenode。换句话说, Admin正在冒充用户Allen 。

2.使用示例

Admin的身份凭据用于登录,并为Allen创建了代理用户ugi对象。
在代理用户ugi对象的doAs方法内执行操作。

3.配置参数

可以通过在core-site.xml中使用下面属性来配置代理用户:
hadoop.proxyuser.$superuser.hosts
hadoop.proxyuser.$superuser.groups

通过通配符*可用于允许来自任何主机或任何用户的模拟

配置示例

例如:名为super的超级用户只能从host1和host2连接来模拟属于group1和group2的用户。
<property>
    <name>hadoop.proxyuser.super.hosts</name>    
    <value>host1,host2</value>
</property>
<property>
    <name>hadoop.proxyuser.super.groups</name>           
    <value>group1,group2</value>
</property>

# 从任何主机访问的名为oozie的用户都可以假冒属于任何组的任何用户 <property> <name>hadoop.proxyuser.oozie.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.oozie.groups</name> <value>*</value> </property>

五、HDFS 透明加密

1.HDFS明文存储弊端

HDFS中的数据会以block的形式保存在各台数据节点的本地磁盘中,但这些block都是明文的。
通过Web UI页面找到Block的ID和副本位于的机器信息

如果在操作系统下,直接访问block所在的目录,通过Linux的cat命令是可以直接查看里面的内容的,且是明文

2.HDFS透明加密介绍

HDFS透明加密(Transparent Encryption)支持端到端的透明加密,启用以后,对于一些需要加密的HDFS目录里的文件可以实现透明的加密和解密,
而不需要修改用户的业务代码。端到端是指加密和解密只能通过客户端。
对于加密区域里的文件,HDFS保存的即是加密后的文件,文件加密的秘钥也是加密的。让非法用户即使从操作系统层面拷走文件,也是密文,没法查看。 特点 1.HDFS集群管理和密钥的管理是互相独立的职责,由不同的用户角色(HDFS管理员,密钥管理员)承担 2.只有HDFS客户端可以加密或解密数据,密钥管理在HDFS外部,HDFS无法访问未加密的数据或加密密钥 3.block在操作系统是以加密的形式存储的,从而减轻了操作系统和文件系统级别的安全威胁 4.HDFS使用AES-CTR加密算法。AES-CTR支持128位加密密钥(默认)

3.HDFS透明加密关键概念和架构

3.1 加密区域

HDFS的透明加密有一个新的概念,加密区域(the encryption zone)。
加密区域就是HDFS上的一个目录,只不过该目录比其他目录特殊。
加密区域里写入文件的时候会被透明加密,读取文件的时候又会被透明解密。

3.2 秘钥

当加密区域被创建时,都会有一个加密区域秘钥(EZ密钥,encryption zone key)与之对应,EZ密钥存储在HDFS外部的密钥库中。
加密区域里的每个文件都有其自己加密密钥,叫做数据加密秘钥(DEK,data encryption key)。
DEK会使用其各自的加密区域的EZ密钥进行加密,以形成加密数据加密密钥(EDEK)。

3.3 密钥库(keystore)

存储密钥(key)的叫做密钥库(keystore),将HDFS与外部企业级密钥库(keystore)集成是部署透明加密的第一步。
这是因为密钥(key)管理员和HDFS管理员之间的职责分离是此功能的非常重要的方面。
但是,大多数密钥库都不是为Hadoop工作负载所见的加密/解密请求速率而设计的。

3.4 KMS(密钥管理服务)

Hadoop密钥管理服务(Key Management Server,简写KMS),用作HDFS客户端与密钥库之间的代理。
KMS主要有以下几个职责: 
    1.访问加密区域秘钥(EZ key)
    2.生成EDEK,EDEK存储在NameNode上
    3.为HDFS客户端解密EDEK

4.加密及解密文件过程

4.1 加密文件过程

提前动作:创建加密区,设置加密区密钥
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进行存储。


DEK是加解密一个文件的密匙,而KMS里存储的EZ key是用来加解密所有文件的密匙(DEK)的密匙。
所以,EZ Key是更为重要的数据,只在KMS内部使用(DEK的加解密只在KMS内存进行),不会被传递到外面使用;
而HDFS服务端只能接触到EDEK。

4.2 读取解密文件过程

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

5.KMS配置

5.1 keystore密钥库

存储密钥(key)的地方叫做密钥库(keystore)。
HDFS与keystore是互相独立的,两者之间通过KMS进行沟通。
KMS可以选择任何KeyProvider(密钥供应者)实现作为keystore 。
此处的示例使用JavaKeyStoreProvider来作为keystore。
https://hadoop.apache.org/docs/r3.1.4/hadoop-project-dist/hadoop-common/CredentialProviderAPI.html#Keystore_Passwords

5.2 创建keystore

#密钥库的名字叫做itcast,访问密钥库的密码是:123456。
keytool -genkey  -alias 'itcast_keystore' 

5.3 配置kms-site.xml

hadoop.kms.key.provider.uri 设置密钥库的提供者 这里设置jceks,表示就是java密钥库。

5.4 配置kms-site.xml

KMS访问java密钥库的密码文件需配置在Hadoop的配置目录下。

5.5 配置 kms-env.sh

export KMS_HOME=/export/server/hadoop-3.1.4
export KMS_LOG=${KMS_HOME}/logs/kms
export KMS_HTTP_PORT=16000
export KMS_ADMIN_PORT=16001

5.6 修改core|hdfs-site.xml

core-site.xml
<property>
    <name>hadoop.security.key.provider.path</name>
    <value>kms://http@node1:16000/kms</value>
</property>


hdfs-site.xml
<property>
    <name>dfs.encryption.key.provider.uri</name>
    <value>kms://http@node1:16000/kms</value>
</property>

5.7 同步配置

5.8  启动kms服务

6.HDFS透明加密使用

6.1 创建key

创建的key用于后面创建加密空间时,指定加密空间的EZ key。
hadoop key create ezk
hadoop key list -metadata

5.2 创建加密区

首先创建一个目录,然后把该目录设置为加密区
hadoop fs -mkdir /zone 
hdfs crypto -createZone -keyName ezk -path /zone

5.3 测试加密效果

上传文件到加密区,然后读取文件内容
echo helloitcast >> helloWorld
hadoop fs -put helloWorld /zone 
hadoop fs -cat /zone/helloWorld 

获取文件加密信息
hdfs crypto -getFileEncryptionInfo -path /zone/helloWorld 

切换不同用户进行文件读取操作只要具备read权限都可以读取文件的内容。也就是对客户端来说是透明的,感觉不到文件被加密。

如果直接从DataNode的机器的本地文件系统读取Block信息。发现是无法读取数据的。因为在存储数据的时候被加密了。

 

标签:HDFS,fs,加密,文件,hadoop,隐私,数据安全,快照
From: https://www.cnblogs.com/panwenbin-logs/p/17168677.html

相关文章

  • hdfs file system shell的简单使用
    1、背景此处我们通过命令行,简单的学习一下hdfsfilesystemshell的一些操作。2、hdfsfilesystemshell命令有哪些我们可以通过如下网址https://hadoop.apache.org/d......
  • hdfs file system shell的简单使用
    目录1、背景2、hdfsfilesystemshell命令有哪些3、确定shell操作的是哪个文件系统4、本地准备如下文件5、hdfsfilesystemshell5.1mkdir创建目录5.2put上传文件5.3l......
  • HDFS NameNode元数据管理
    一、什么是元数据在HDFS中,元数据主要指的是文件相关的元数据,由NameNode管理维护。从广义的角度来说,因为NameNode还需要管理众多DataNode节点,因此DataNode的位置和健康状......
  • 号码隐私保护服务:保障亿万消费者的隐私安全
    如何从繁杂的数据指标中精确识别出异常情况,是保障系统高可用的关键。一、引言近年来,针对电商的电信诈骗层出不穷。不法分子借助非法手段获取到消费者的个人信息,假冒电商......
  • 支持隐私计算应用研究,零数科技获感谢信和突出贡献奖
    近来,零数科技收到一封来自隐私计算联盟的感谢信,信中内容体现了联盟对公司一年以来在数据流通和隐私计算相关的科研成果的高度认可,同时,零数科技产品总监胡豫皖也收到了来自联......
  • Hive加载HDFS文件注意事项
      Flink读取kafka数据写入hdfs,生成了带下划线的文件名,创建hive表指定该路径,发现数据读取不出来。    查阅源码,原来是会忽悠带下划线和.的文件。   ......
  • HDFS web Interfaces功能解读
    HDFSWeb地址是http://nn_host:port/,2.x默认端口号50070 3.x默认端口号9870一、模块功能解读-OverviewOverview是HDFSweb默认的主页面。展示了HDFS一些最核心的信......
  • hdfs清空回收站
    hdfsdfs-du-h查看各个HDFS空间占用情况 hdfs dfs -rmr  /user/fughting/.Trash/Current 就可以清空fighting这个用户的回收站了(但是这种方式并不会删除文......
  • Hadoop3 HDFS HA 高可用搭建及测试
    1.什么是HAHA是HighAvailability的简写,即高可用,指当当前工作中的机器宕机后,会自动处理这个异常,并将工作无缝地转移到其他备用机器上,以保证服务的高可用。Hadoop的HA模......
  • 第一卷《社会工程学:信息的艺术》十二章:隐私保护
    这是最后一章,也是最重要的一章,保护自己。我们泄露信息其实就是自己没有把一些信息保护好,有什么照片啊,工作啊都发在各个平台,而且没有设置软件的隐私设置,比如QQ有个通讯录添......