Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 如何在HDFS NFSGateway中避免潜在的用户模拟?_Hadoop_Hdfs - Fatal编程技术网

Hadoop 如何在HDFS NFSGateway中避免潜在的用户模拟?

Hadoop 如何在HDFS NFSGateway中避免潜在的用户模拟?,hadoop,hdfs,Hadoop,Hdfs,使用HDFS NFSGateway(我正在使用)似乎存在安全缺陷,我不确定如何解决它(不太熟悉网络或安全性等)。以下是一个示例情况: 一些在自己的机器上具有root访问权限的用户可以通过(即,将其安装到自己的机器上)访问HDFS 然后,它们使用想要模拟的用户在hadoop集群节点上拥有的相同uid创建用户 他们将su发送给该用户,并访问该用户安装的hdfs:///user/该计算机上的文件夹(用户不必以root用户身份在客户端计算机上访问) 例如 [root@HW006用户]##这里是一个挂载的

使用HDFS NFSGateway(我正在使用)似乎存在安全缺陷,我不确定如何解决它(不太熟悉网络或安全性等)。以下是一个示例情况:

  • 一些在自己的机器上具有root访问权限的用户可以通过(即,将其安装到自己的机器上)访问HDFS
  • 然后,它们使用想要模拟的用户在hadoop集群节点上拥有的相同uid创建用户
  • 他们将
    su
    发送给该用户,并访问该用户安装的
    hdfs:///user/
    该计算机上的文件夹(用户不必以root用户身份在客户端计算机上访问)
  • 例如

    [root@HW006用户]##这里是一个挂载的HDFS NFSGateway
    [root@HW006用户]#ls-lh/hdpnfs/user/
    总计5.0K
    drwx------。3 1008 1004 96 Sep 11 14:53 accumulo
    drwxrwx----。9 1019 1004 288 9月11日15:17安巴里qa
    drwxr-xr-x。3 1018 1006 96 Sep 11 14:54德鲁伊
    drwxr-xr-x。2 1010 1004 64 Sep 11 14:53 hbase
    drwxr-xr-x。2 1000 1004 64 Sep 11 14:52蜂巢
    drwxrwxr-x。3 1013 1004 96年9月11日15:00 oozie
    drwxrwxr-x。2 1009 1004 64 Sep 11 15:07 spark
    drwxr-xr-x。3 testuser001 hdptestusers 96 Sep 12 13:44 testuser001
    drwxrwx----。4 1001 1006 128 Sep 11 14:50纱线ats
    drwxr-xr-x。5 1015 1004 160 Sep 11 14:51齐柏林飞艇
    [root@HW006用户]#
    [root@HW006用户]#
    [root@HW006用户]#
    [root@HW006用户]##现在我将创建一个用户来模拟oozie用户
    [root@HW006user]#useradd--uid 1015--no create home imposteruser
    [root@HW006用户]#ls-左侧
    总计5.0K
    drwx------。3 1008 1004 96 Sep 11 14:53 accumulo
    drwxrwx----。9 1019 1004 288 9月11日15:17安巴里qa
    drwxr-xr-x。3 1018 1006 96 Sep 11 14:54德鲁伊
    drwxr-xr-x。2 1010 1004 64 Sep 11 14:53 hbase
    drwxr-xr-x。2 1000 1004 64 Sep 11 14:52蜂巢
    drwxrwxr-x。3 1013 1004 96年9月11日15:00 oozie
    drwxrwxr-x。2 1009 1004 64 Sep 11 15:07 spark
    drwxr-xr-x。3 testuser001 hdptestusers 96 Sep 12 13:44 testuser001
    drwxrwx----。4 1001 1006 128 Sep 11 14:50纱线ats
    drwxr-xr-x。5冒名顶替者1004 160 9月11日14:51齐柏林飞艇
    [root@HW006用户]#
    [root@HW006用户]#
    [root@HW006用户]#
    [root@HW006用户]##现在让我们看看冒名顶替用户是否能够向hdfs:///user/zeppelin 目录
    [root@HW006用户]#su imposteruser
    bash-4.2$pwd
    /hdpnfs/用户
    bash-4.2$cd齐柏林飞艇/
    bash-4.2$pwd
    /hdpnfs/用户/齐柏林飞艇
    bash-4.2$ls
    conf笔记本测试
    bash-4.2$touch tmp.txt
    bash-4.2$ls-左侧
    总共1.5公里
    drwxr-xr-x。3冒名顶替者1004 96 Sep 12 11:50形态
    drwxr-xr-x。4冒名顶替者1004 128 Sep 11 14:51笔记本
    drwxr-xr-x。2冒名顶替者1004 64 Sep 11 14:51测试
    -rw-r--r--。1冒名顶替用户1004 0 Sep 13 12:12 tmp.txt
    bash-4.2$exit
    出口
    [root@HW006用户]#
    [root@HW006用户]#
    [root@HW006用户]#
    [root@HW006用户]##让我们转到一个集群节点,看看它从那里看起来如何
    [root@HW006用户]#ssh hw001
    root@hw001的密码:
    [root@HW001~]#hadoop fs-ls/user/zeppelin
    找到4项
    drwxr-xr-x-齐柏林飞艇hdfs 0 2019-09-12 11:50/user/zeppelin/conf
    drwxr-xr-x-齐柏林飞艇hdfs 0 2019-09-11 14:51/用户/齐柏林飞艇/笔记本
    drwxr-xr-x-齐柏林飞艇hdfs 0 2019-09-11 14:51/用户/齐柏林飞艇/测试
    -rw-r--r--3齐柏林飞艇hdfs 0 2019-09-13 12:12/user/zeppelin/tmp.txt
    [root@HW006用户]#
    [root@HW006用户]#
    [root@HW006用户]###因此您可以看到,它看起来就像是用户齐柏林创建的tmp.txt文件,而实际上它是NFSGateway访问服务器上的冒名顶替用户。
    

    是否有任何建议的/最佳实践方法来阻止这种情况(尽管仍然允许该客户端计算机上的用户访问他们需要访问的HDFS文件夹)

    看起来您的Hadoop群集没有使用Kerberos身份验证—这意味着任何主机上的任何Linux用户都可以模拟任何Hadoop用户,而无需root权限。Cf.因此,您的NFS问题有点小,毕竟…@SamsonScharfrichter有趣。在生产中,我曾计划在集群节点上使用SSSD链接到我们的activedirectory配置文件以验证用户,并让他们在集群中传播。这是否足以代替使用Kerberos(因为您希望使用AD上存在的现有配置文件)?您没有抓住要点。SSSD将AD帐户和组映射到本地Linux帐户和组=>identity management。或者,SSSD将允许AD帐户使用其AD密码登录Linux(使用Kerberos或带有SSL加密的普通LDAP验证)=>可选Linux身份验证。但它不会管理Hadoop身份验证。默认情况下,Hadoop身份验证是纯声明性的,即“我的名字是蜘蛛侠,相信我”,没有任何控制。您可以切换到Kerberos身份验证,然后您的客户机将使用定制的Hadoop LIB来覆盖Kerberos的Java实现,因为该实现是JDK特定的,并且非常脆弱,参见。这也可以在Windows上工作(即使没有正式的Apache构建,Hadoop代码库也可以为Windows编译)。默认情况下,Hadoop授权将Hadoop帐户映射到本地帐户以获取其本地组,并将这些组映射到HDFS组。这就是SSSD发挥作用的地方。