FACL:Filesystem Acess Control List
Linux(和其他Unix等POSIX兼容的操作系统)有一种被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例 如,默认情况下你需要确认3个权限组:owner、group和other。而使用ACL,利用文件扩展属性保存额外的访问控制权限,你可以增加权限给其他用户或组别,而不单只是简单 的"other"或者是拥有者不存在的组别。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。
ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btfrs, 等。如果你不确定你的文件系统是否支持ACL,请参考文档。
场景:Tom,Jerry两个用户,Tom在一个公共目录创建一个文件,只希望Jerry也可以访问,并能够编辑修改保存。用户之间文件共享。
安装acl管理工具
CentOS/Fedora/RHEL 中:
yum install acl
Ubuntu/Debian 中:
sudo apt-get install acl
安装ACL完成后,需要激活我们磁盘分区的ACL功能,这样我们才能使用它。
首先,我们检查ACL功能是否已经开启。
vim /etc/fstab
查看到/ /boot均没有开启ACL功能,在需要开启ACL的分区的选项前增加acl标记。
eg.
基础ACL通过两条命令管理:setfacl用于增加或者修改ACL,getfacl用于显示分配完的ACL。
getfacl
[root@RedHat tmp]# cp /etc/inittab .
[root@RedHat tmp]# ls
inittab project test
[root@RedHat tmp]# getfacl inittab
# file: inittab
# owner: root
# group: root
user::rw-
group::r--
other::r--
setfacl
-m: 设定
u:UID:perm
g:GID:perm
d:u:UID:perm
d:g:GID:perm
为某一个目录设置默认的访问控制列表。意味着在这个目录下新建的文件将自动继承目录的访问控制列表权限。
setfacl -m u:hadoop:rw inittab
-x:取消
u:UID
g:GID
setfacl -x u:hadoop inittab
--mask:
在hadoop用户下
[hadoop@RedHat tmp]$ echo 123 >> inittab
-bash: inittab: Permission denied
在root用户下
[root@RedHat tmp]# setfacl -m u:hadoop:rw inittab
[root@RedHat tmp]# getfacl inittab
# file: inittab
# owner: root
# group: root
user::rw-
user:hadoop:rw-
group::r--
mask::rw-
other::r--
添加acl权限后
-rw-rw-r--+ 1 root root 495 7月 26 19:06 inittab
在hadoop用户下
[hadoop@RedHat tmp]$ echo 123 >> inittab
[hadoop@RedHat tmp]$ tail -3 inittab
# ln -sf /lib/systemd/system/<target name>.target /etc/systemd/system/default.target
#
123
让developteam组中的所有用户对testfile有读写权限
[root@RedHat tmp]# mkdir testfile
[root@RedHat tmp]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
[root@RedHat tmp]# setfacl -m g:developteam:rw testfile
[root@RedHat tmp]# getfacl testfile/
# file: testfile/
# owner: root
# group: root
user::rwx
group::r-x
group:developteam:rw-
mask::rwx
other::r-x
用户访问文件 权限应用次序 用户进程匹配如下:
owner --> group--> other
owner --> facl,user --> group --> facl,group --> other