1.What is FACL?

FACL,文件系统访问控制列表,即Filesystem Access Control List。根据以前对LINUX权限模型的了解,大概如下:

wKioL1OfCQXjMb5aAADyJpA5D_Q227.jpg

假设有这么一个场景:

用户TOM创建的文件file,希望用户LUCY可以访问和编辑。

分析:

第一,可否TOM用户临时改变file的owner为LUCY,这样就可以达到目的。

显然,这并不可行。因为普通用户根本就没有chown的权限。


第二,可否设置LUCY在file的属组并属组权限有rw或者file的other权限有rw。

可实现,但是有明显的缺点。组里面的用户可不仅仅有LUCY这一个用户。我们需要实现的是细粒度的访问控制。


第三,可否利用suid特殊权限来实现。

的确,只要我们对file设置suid,那么不论是LUCY还是其他用户都可以访问和编辑。那么缺点和上面的也是显而易见的。


也就是说,我们希望实现用户和用户之间的资源共享,LINUX提供FACL来帮助我们实现。


2.How to use FACL?

#获取file的访问控制列表

getfacl file


#设置

setfacl -m u:USERNAME:permission file

setfacl -m g:GROUPNAME:permission file


#取消

setfacl -x u:USERNAME file

setfacl -x g:GROUPNAME file


3.Some examples about FACL

[root@localhost backup]# cp /etc/inittab inittab
[root@localhost backup]# ls -l
total 8
-rw-r--r-- 1 root root 1666 Jun 15 22:28 inittab



[tom@localhost backup]$ echo "Hello FACL" >> inittab 
-bash: inittab: Permission denied


[root@localhost backup]# setfacl -m u:tom:rw inittab 
[root@localhost backup]# getfacl inittab
# file: inittab
# owner: root
# group: root
user::rw-
user:tom:rw-
group::r--
mask::rw-
other::r--


[tom@localhost backup]$ echo "Hello FACL" >> inittab 
[tom@localhost backup]$ tail -2 inittab 
x:5:respawn:/etc/X11/prefdm -nodaemon
Hello FACL


4.分析与小结

A 注意一旦我们设置了访问权限控制列表,那么:

[root@localhost backup]# ls -l inittab 

-rw-rw-r--+ 1 root root 1677 Jun 15 22:30 inittab

也就是会多了个+,其实FACL就是通过文件的扩展属性来保存权限信息的。

B 复制具有FACL的FILE,会发生什么呢?

【可能会丢失FACL,需要通过一些选项或者命令来避免,以后再说吧~】


C 如果我们对目录设置FACL,那么目录下的文件将会继承FACL。

【实际应用不多,了解即可】

  对目录设置FACL,格式如下:

  setfacl -m d:u:USERNAME:permission file


D 用户访问文件图示如下:

wKiom1OfELKD2SDkAAEf9rsEd9Q273.jpg