HDFS权限设置 \ HDFS涉及ACLs的命令

本文主要参考:https://www.cnblogs.com/royfans/p/7326859.html
https://www.cppentry.com/bencandy.php?fid=115&id=206011

HDFS权限设置

1.

hdfs权限检查启用,需要在hdfs-site.xml中做如下配置:

<property>
    <name>dfs.permissions.enabled</name>
    <value>true</value>
</property>

1.1. 默认情况下,用户在HDFS上创建的文件和目录的权限是rwxr-xr-x,即732,x表示有ls权限

默认的权限可以通过如下配置属性在hdfs-site.xml中进行配置

<property>
    <name>fs.permissions.umask-mode</name>
    <value>032</value>
</property>

032表示屏蔽位,默认权限是777-屏蔽位对应的数字,因此,777-032=745, 745是权限位

r: 4
w:2
x:1

745表示rwx r-- r-x

2. /user/目录下的用户目录,通过设置为754,比如

drwxr-xr-x - yarn supergroup 0 2016-05-04 14:21 /user/yarn
drwxr-xr-x - spark supergroup 0 2016-05-17 19:09 /user/spark
drwxr-xr-x - hdfs supergroup 0 2016-06-07 14:53 /user/hive
drwx------ - hbase supergroup 0 2016-03-18 20:26 /user/hbase

表示只有所属用户具有写权限

3.启动NameNode进程的用户就是HDFS的超级用户,可以对其它用户创建的文件或者目录进行chmod

而普通用户是没有权限对其它用户的用户或者目录进行chmod
4.改变文件或者目录所属的用户名和密码

hdfs dfs -chown yuzt:yuzt /user/hdfs

5. 授权

hdfs dfs -setfacl

可以将某个文件或者目录的读写执行权限授权给任意named用户名或者组,这是更细力度的权限控制
首先在hdfs-site.xml中添加如下配置以启用HDFS acl功能

dfs.namenode.acls.enabled
hdfs dfs -setfacl -m user:hdfs:rwx /user/yuzt

将/user/yuzt的读写执行权限赋值给hdfs用户,user表示hdfs是一个用户,而不是group
通过上面的操作,用户hdfs可以在/user/yuzt创建文件后者目录了。

ACL

开启ACLs

默认情况下ACLs是关闭的,想要开启此功能需要在hdfs-site.xml的配置项里找到dfs.namenode.acls.enabled把属性设为true才可以。重要:Namenode节点必须要设定的用户或用户组

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

getfacl

getfacl用于查看一个文件/目录的ACL状态,例如:

[root@ecs1 tao]# hadoop dfs -getfacl /user/tao
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

# file: /user/tao
# owner: tao
# group: supergroup
user::rwx
group::rwx
other::rwx

setfacl

基本用法

假设,我们有一个HDFS目录/user/tao/xt-data,它目前的权限为drwxrwxr-x tao supergroup。我希望让另一个用户Hbase(不属于任何group)对该目录有rwx的权限,那么可以如下操作:

hdfs dfs -setfacl [-R] [-b|-k -m|-x <acl_spec> <path>]|[--set <acl_spec> <path>]
<br><!-- COMMAND OPTIONS
<path>: 路径
-R: 遍历路径里的所有文件。
-b: 撤销除了基本用户和组权限以外的所有权限。
-k: 撤销默认的ACL设置。
-m: 添加新的权限来使用此ACL。不影响现有权限。
-x: 只撤销指定的ACL。
<acl_spec>: 逗号分隔的ACL权限列表。
--set: 使用该选项指定的路径完全取代现有的ACL。
       之前的ACL将不再适用。
-->
[tao@ecs3 ~]$ hadoop dfs -setfacl -m user:hbase:rwx /user/tao/xt-data

[tao@ecs3 ~]$ hadoop dfs -getfacl /user/tao/xt-data
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

# file: /user/tao/xt-data
# owner: tao
# group: supergroup
user::rwx
user:hbase:rwx
group::r-x
mask::rwx
other::r-x

[tao@ecs3 ~]$ su

[root@ecs3 tao]# sudo -u hbase hadoop dfs -mkdir /user/tao/xt-data/testDir

[root@ecs3 tao]# sudo -u hbase hadoop dfs -ls /user/tao/xt-data
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

Found 1 items
drwxr-xr-x   - hbase supergroup          0 2015-05-22 16:33 /user/tao/xt-data/testDir
[root@ecs3 tao]#

可以看到,现在用户hbase可以在/user/tao/xt-data中新建一个目录testDir了。那么,这个新建的目录的权限是什么呢?

[root@ecs3 tao]# hadoop dfs -getfacl /user/tao/xt-data/testDir
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

# file: /user/tao/xt-data/testDir
# owner: hbase
# group: supergroup
user::rwx
group::r-x
other::r-x

可以看到,这个新建的目录与其他普通的目录在权限是一样的。如果想使得新建的目录/文件的ACL也满足我们的要求,可以使用default acl来实现。

关于权限标志位的顺序: 在命令hadoop dfs -setfacl -m user:hbase:rwx /user/tao/xt-data中,权限标志位rwx的顺序不能改变,否则会报错:-setfacl: Invalid permission in
正确的写法有: rwx, r-x, -r-, -rx等;
错误的写法有:wrx,w-x等。

Default ACL
可以为某个目录设置一个默认的ACL权限,使得以后在该目录中新建文件或者子目录时,新建的文件/目录的ACL权限都是之前设置的default ACLs。

例如,现在已经有了一个HDFS目录/user/tao,其当前的ACL状态为:

[root@ecs1 tao]# hadoop dfs -getfacl /user/tao
# file: /user/tao
# owner: tao
# group: supergroup
user::rwx
group::rwx
other::rwx

我们想将其default acl权限设置为user:hbase:rwx,用命令:

[root@ecs1 tao]# sudo -u tao hadoop dfs -setfacl -m default:user:hbase:rwx /user/tao

[root@ecs1 tao]# hadoop dfs -getfacl /user/tao
# file: /user/tao
# owner: tao
# group: supergroup
user::rwx
group::rwx
other::rwx
default:user::rwx
default:user:hbase:rwx
default:group::rwx
default:mask::rwx
default:other::rwx

检查是否生效:

[root@ecs1 tao]# sudo -u tao hadoop dfs -mkdir /user/tao/testDir

[root@ecs1 tao]# hadoop dfs -getfacl /user/tao/testDir
# file: /user/tao/testDir
# owner: tao
# group: supergroup
user::rwx
user:hbase:rwx  #effective:r-x
group::rwx  #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:user:hbase:rwx
default:group::rwx
default:mask::rwx
default:other::rwx

其它

如果要将以下权限的:

drwxr-xr-x   - hive   hdfs            0 2020-06-04 14:39 /tzqtoto_45

改成:

drwx------   - hive   hdfs            0 2020-06-04 14:39 /tzqtoto_45

所需要的命令是:

hdfs dfs -setfacl -R -m group::--- /tzqtoto_45
hdfs dfs -setfacl -R -m other::--- /tzqtoto_45

你可能感兴趣的:(#,hadoop(HDFS,YARN,MAPREDUCE))