HDFS 特殊权限位

标签(空格分隔): Hadoop


之前对HDFS更或者说是对Linux中文件的权限没有进行一个完整的学习,只是知道有所有者、所属组和其它权限,具体到某个人的权限有读(r)、写(w)和可执行(x)。

HDFS基于Linux的POSIX model

HDFS的权限虽然是基于Linux的POSIX model,但是HDFS中其实并没有真正的用户和组的概念,只是从主机上拿到用户的信息然后对其存储的文件权限进行检查。

HDFS中每个文件和目录都有一个owner和group,并对owner、owner同一个组的user和其它user的权限进行了分离,权限分为rwx。对于文件来说,有r权限则可对此文件可读,有w权限则可对文件进行写和追加,x权限对文件来说没有实际的意义。对于目录来说,拥有r权限可以查看目录中内容,比如此目录下的文件或者子目录,拥有w权限可以在此目录中新建或者删除文件和子目录,但不可以改变此目录的名字,因为改变此目录的信息是需要其上层目录的写权限,对于目录来说,个人感觉最重要的应该是x权限,拥有x权限,才可以进入当前目录进行其它操作。

如果没有目录的x权限,你拥有的其它权限并不能发挥相应的作用,因为rw权限都是针对目录中的内容的,当你没有进入目录的权限时,其它权限都是虚无。

sticky bit

HDFS中还有一个sticky bit,此功能只针对目录有效,是一个防删除位。防止除管理员、目录或者文件的所有者之外的其它人(即使其它用户对该文件夹有rwx权限)对当前加了 sticky 位的目录或者当前加了 sticky 位的目录下的文件或者目录进行删除。

命令如下:

#即在第一位添加数字1
hdfs dfs -chmod 1777 /tmp
hdfs dfs -chmod 1777 /user/hive/warehouse
# 也可以
hdfs dfs -chmod +t /tmp
hdfs dfs -chmod +t /user/hive/warehouse
sticky bit
不同于suid, guid,对于others的execute权限位,则可以设置sticky bit标志,
用t来表示,如果该位置本来就有可执行权限位,即x,则t和x叠加后用大写的T来表示。 sticky bit只对目录起作用,如果一个目录设置了sticky bit,则该目录下的文件只能被
该文件的owner或者root删除,其他用户即使有删除权限也无法删除该文件。 例如,/tmp目录,它的权限为d rwx rwx rwt,该目录中的文件(或目录)只能被owner
或root删除,这样大家都可以把自己的临时文件往该目录里面放,但是你的文件别人是无法
删除的。

注意:suid, sgid只对文件起作用,而sticky bit只对目录起作用。

HDFS ACL

HDFS ACL(Access Control Lists)是对POSIX permissions model的一个补充。传统的权限是针对用户和组的组织架构来设置的,但当你只想给特定的用户或者组(而不是只针对文件的所有者和所属组)来开权限时,我们就可以使用ACL来控制。

默认情况下,HDFS ACL功能是关闭的,因为开启ACL之后,NN中会对开启ACL的inode存储一份额外的数据,会带来额外的内存开销,如果有需要可以在hdfs-site.xml中设置dfs.namenode.acls.enabled为true。

新建一个文件或者目录时,会继承父目录的ACL,但改变父目录的ACL时,在此目录中已经存在的内容不会发生改变。

一个文件或者目录的ACL由一组ACL entry组成。每个Entry标识一个用户或者组的rwx权限,如下一个文件的一个ACL:

user::rw-
user:bruce:rwx #effective:r--
group::r-x #effective:r--
group:sales:rwx #effective:r--
mask::r--
other::r--

文件的所有者具有rw权限,所属组具有rx权限,其它用户具有r权限,但是用户bruce具有该文件的rwx权限,sales组也具有该文件的rwx权限。但是bruce和sales就真的具有rwx权限了?这里还有最后一道防线mask,mask决定了一个用户或者组能够得到的最大的权限。上面的例子中,bruce和sales的权限会与mask的权限进行与运算,最终的结果才是bruce和sales的权限,也就是注释中的内容。

权限检查流程

当一个文件有ACL时,权限检查的流程为:

一,判断该用户是否为owner

二,判断该用户是否包含在ACL entry的user中,如果在,则通过mask过滤权限

三,判断该用户的所属组是否包含在组中,包含则也要通过mask来过滤权限(因为在使用了ACL的情况下,group的权限显示的就是当前的mask)

四,判断该用户的所属组是否包含在ACL entry的group中,如果在,则通过mask来过滤权限

ACL命令

# 添加用户acl
hdfs dfs -setfacl -m user:xx:rwx path
# 删除一个用户的acl
hdfs dfs -setfacl -x user:xx path
# 删除所有的acl
hdfs dfs -setfacl -d path
# 查看acl
hdfs dfs -getfacl path

目录或者文件添加了ACL之后,ll命令查看,会有一个+标识

umask

一个文件或者目录新建之后就有一个默认的权限,这个默认的权限是怎么控制的呢?是由umask控制的。

文件创建之后的默认权限是0666 & ^umask,目录创建之后的默认权限是0777 & ^umask,umask在core-site.xml中由fs.permissions.umask-mode设置,默认是022。

HDFS 开启权限

core-site.xml

core-site中主要是设置umask,由fs.permissions.umask-mode控制,默认是022

hdfs-site.xml

hfds-site中控制着权限的开启,参数如下:

dfs.permissions.enabled = true

是否开启权限检查,默认是true

dfs.permissions.superusergroup = supergroup

设置hdfs管理员的组名称,模式名字是supergroup,一般改为与管理员相同的名字,如管理员是hdfs,则改为hdfs

dfs.namenode.acls.enabled = true

控制ACL是否开启,默认为false。

Tips:HDFS权限设置最好是以传统的权限进行控制,只针对个别权限要求高的文件进行ACL控制。

HDFS 特殊权限位的更多相关文章

  1. linux文件权限位SUID,SGID,sticky的设置理解

    SUID含义:文件的该位被设置为1,在该文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来           执行这个文件,他都有文件所有者的特权,如果所有者是root的话,那么执行人就有超 ...

  2. Linux 特殊权限位

    特殊权限位 LINUX 基本权限有9位但是还有三位特殊权限. suid s(有x权限) S(没有x权限) 4 在用户权限的第三位 sgid s(有x权限) S(没有x权限) 2 在用户组权限的第三位 ...

  3. Linux 权限位详解

    1. Linux 权限位 对于权限,有点绕,因为文件的权限和目录的权限是有一些区别的. 在Linux中,有5种权限,分别是,r.w.x.s.t. 可读权限:r 可写权限:w 可执行权限:x Setui ...

  4. 【大数据系列】HDFS文件权限和安全模式、安装

    HDFS文件权限 1.与linux文件权限类型 r:read w:write x:execute权限x对于文件忽略,对于文件夹表示是否允许访问其内容 2.如果linux系统用户sanglp使用hado ...

  5. linux特殊权限位suid

    特殊权限位基本说明(了解): linux系统基本权限位为9位权限,但还有额外3位权限位,共12位权限: suid       s(x)     S     4     用户对应的权限位(用户对应的3位 ...

  6. Linux特殊权限位suid、sgid深度详细及实践

    特殊权限位基本说明: Linux系统基本权限位为9位权限,但还有额外3位权限位,共12位权限: suid    s(有x)     S    4   用户对应的权限位(用户对应的3位上) sgid  ...

  7. 特殊权限位:suid、sgid、sticky

    linux系统特殊权限位 suid.sgid.stickysuid 使任意用户获得用文件属主相同的权限,sgid使用户获得与文件属组相同的权限(通过sgid获得的权限等同于同一用户组的权限) 表示方法 ...

  8. linux系统特殊权限位 suid、sgid、sticky

    linux系统特殊权限位 suid.sgid.stickysuid 使任意用户获得用文件属主相同的权限,sgid使用户获得与文件属组相同的权限(通过sgid获得的权限等同于同一用户组的权限) 表示方法 ...

  9. hadoop学习笔记(四):HDFS文件权限,安全模式,以及整体注意点总结

    本文原创,转载注明作者和原文链接! 一:总结注意点: 到现在为止学习到的角色:三个NameNode.SecondaryNameNode.DataNode 1.存储的是每一个文件分割存储之后的元数据信息 ...

随机推荐

  1. c# 自定义解析JSON字符串数据

    解析json字符串有很多方式, 1 : 在网上下载json解析的dll类库并添加引用, 调用相关方法; 2 : 使用自带类库JavaScriptSerializer的序列号和反序列化; 对于以上两个方 ...

  2. 【QT学习笔记】二、信号槽和自定义信号槽

    1. 信号槽 int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton button("Qui ...

  3. 捕捉Promise reject 错误

    var sleep = function (time) { return new Promise(function (resolve, reject) { setTimeout(function () ...

  4. Spring中事务的传播行为,7种事务的传播行为,数据库事务的隔离级别

    Propagation.REQUIRED 代表当前方法支持当前的事务,且与调用者处于同一事务上下文中,回滚统一回滚(如果当前方法是被其他方法调用的时候,且调用者本身即有事务),如果没有事务,则自己新建 ...

  5. 自己整理的的数据操作DbHelper

    using System.Data; using System.Data.SqlClient; using System.Configuration; namespace WindowsFormsAp ...

  6. 【Log4J】

    学习mybatis中用到了Log4J 在此记录下 引入 引入Maven配置 <!-- https://mvnrepository.com/artifact/log4j/log4j --> ...

  7. Flutter——ListView组件(平铺列表组件)

    ListView的常见参数: 名称 类型 说明 scrollDirection Axis Axis.horizontal 水平列表 Axis.vertical 垂直列表 padding EdgeIns ...

  8. MySQL开启binlog无法启动ct 10 21:27:31 postfix/pickup[4801]: warning: 6BD991A0039: message has been queue

    1 详细异常 ct 10 21:27:31 postfix/pickup[4801]: warning: 6BD991A0039: message has been queue Oct 10 21:2 ...

  9. 网络编程基础之TCP学习(二)编程案例

    TCP网络编程流程如下: 实现功能:服务器端与客户端成功通讯后返回get! 服务器端程序 #include <netdb.h> #include <sys/socket.h> ...

  10. 2.PAT 1001 害死人不偿命的(3 n + 1 )猜想

    题目: 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...