linux ACL权限设置
##ACL权限
ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。如,某一个文件,不让单一的某个用户访问。
getfacl: 查看某个文件/目录的ACL权限
setfacl: 设置某个文件/目录的ACL权限
setfacl 参数
-m: 设置后续acl参数
-x: 删除后续acl参数
-b: 删除全部的acl参数
-k: 删除默认的acl参数
-R: 递归设置acl,包括子目录
-d: 设置默认acl
setfacl -m u:user1:rx /test ##添加用户acl权限 (rx即r-x)
setfacl -m g:group1:rx /test ##添加用户组acl权限
setfacl -m o:--x /test ##设置other权限;等价于chmod o+x /test
setfacl -m d:u:user1:rx /test ##设置默认用户acl权限(默认权限下新建子目录会继承父目录权限;即只有文件夹才能给默认权限)
setfacl -m d:g:user1:rx /test ##设置默认用户组acl权限
setfacl -m d:g:d:--x /test ##设置默认other权限
setfacl -m u:user1:rwx,u:user2:r-x,g:user3:x /test ##同时设置多个用户/用户组acl权限;以逗号分隔即可
ls -al /test ##如果某个目录或文件下有 + 标志,说明其具有 acl 权限
getfacl /test ##查看/test上的acl权限
setfacl -m m:r /test ##设置mask有效权限
##注意:
有效权限(mask) 即用户或组所设置的权限必须要存在于mask的权限设置范围内才会生效
setfacl -x u:用户名 文件名 ##删除用户ACL权限
setfacl -x g:组名 文件名 ##删除用户组ACL权限
setfacl -b 文件名 ##删除文件的所有ACL权限
-m参数表示:设置后续的acl参数给文件使用,不可与-x同时使用;
-x参数表示: 删除后续的acl参数,不可与-m同时使用;(后面需要指定用户或者用户组或者mask等)
-b参数表示: 删除所有的acl设置参数。(直接删除指定文件的所有用户/用户组的acl权限)
##egg:
setfacl -m u:code:r /test ##取消/test对用户code的权限
setfacl -R -m u:code:r /test
setfacl -x m /test ##取消mask权限
getfacl /test ##查看test文件acl权限
##另外补充:
dumpe2fs -h /dev/sda1|grep -i "Default mount options" ##查看分区是否支持acl权限
mount -o remount,acl / ##临时开启acl权限
vi /etc/fstab ##永久开启acl权限(default后加上acl;default一般情况默认也包括acl权限)
UUID=490ed737-f8cf-46a6-ac4b-b7735b79fc63 / ext4 defaults,acl 1 1
mount -o remount / ##重新挂载;使得修改生效
hdfs acl权限设置
##hdfs权限需要修改的几个参数:
vi hdfs-site.xml
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
//默认为true,即启用权限检查。如果为false则禁用
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
//默认为false,禁用ACL;设置为true则启用ACL。当ACL被禁用时,NameNode拒绝设置或者获取ACL的请求
</property>
vi core-site.xml ##设置默认umask权限;即此时hdfs上新建的文件夹和文件默认权限分别为755、644
<property>
<name>fs.permissions.umask-mode</name>
<value>022</value>
</property>
hdfs dfs -getfacl /test/acl ##查看acl权限
hdfs dfs -setfacl -R -m user:testUser:rw- /test/acl ##用户acl赋权;-R递归
hdfs dfs -setfacl [-R] [-b|-k |-x ]|[--set ] ##删除acl权限
-x 删除指定的acl权限
-k 删除所有默认的权限
-b 删除所有的权限
egg:
hdfs dfs -setfacl -R -x user:testUser /test/acl ##取消testUser用户权限
hdfs dfs -setfacl -R -b /test/acl ##取消所有的acl权限
##赋予所有其他用户都有rwx权限(other中间必须空着)
hadoop fs -setfacl -R -m other::rwx /test/acl
##赋予mask权限
hadoop fs -setfacl -m mask::rwx /tmp/11.txt
##注意:
##user::rwx表示文件属主权限;user:zhangsan 表示zhangsan用户权限.(同理:group::rwx表示文件属组权限;group:zhangsan 表示zhangsan用户组权限.)
##若文件属主为hadoop,权限设置rwx,acl赋权时user设置为hadoop,权限为000.最终权限还是以属主设置的777为准
egg:
hdfs dfs -setfacl -R -m user::rwx,user:zhangsan:rwx,group::rwx,other::--- /user/hive/warehouse/mydb.db
或者:
hdfs dfs -setfacl -R --set user::rwx,user:zhangsan:rwx,group::rwx,other::--- /user/hive/warehouse/mydb.db
or:
hdfs dfs -setfacl -R --set user:zhangsan:rwx,group::rwx,other::--- /user/hive/warehouse/mydb.db
##同时给多个指定用户acl权限(以逗号分隔即可)
hdfs dfs -setfacl -R --set user:zhangsan:rwx,user:lisi:rwx /user/hive/warehouse/mydb.db
hdfs dfs -setfacl -R -m user:zhangsan:rwx,user:lisi:rwx /user/hive/warehouse/mydb.db
##default权限:设置default之后,对新添加的文件和目录生效,对于现有的文件和目录不生效(不过可加-R递归使得都生效)
如:目录A拥有default:user:bruce:rwx权限,则在目录A下创建目录B,则目录B拥有user:bruce:rwx,default:user:bruce:rwx权限。
hadoop fs -setfacl -m -R default:user:bruce:rwx /test