FACL(file access control list)
利用文件扩展属性保存额外的访问控制权限facl
正常访问文件访问时,访问文件时是以进程的用户的权限进行访问,先以属主进行判断,进程的属主是否与文件的属主相同,如果不同,接着判断用户是否属于文件的属组,如都不是,则以其他身份执行。
Owner-Group-Other
使用了facl,访问文件时,先以属主进行判断,进程的属主是否与文件的属主相同,然后判断facl,user,如果不同,接着判断用户是否属于文件的属组,然后判断facl,group,如都不是,则以其他身份执行。
Owner->facl,user->Group,facl,group->other
命令:
setfacl
-m:设定
u:UID perm
g:GID perm
为目录设定facl,目录下的所有文件会继承此目录的访问控制列表(facl)
d:u:UID perm
d:g:GID perm
-x:取消
getfacl 获取facl权限
例子:
#------------/backup/inittab文件没有添加facl,user写权限,执行添加数据会报错
#创建一个目录
[root@localhost project]# mkdir /backup
[root@localhost project]# cd /backup
[root@localhost backup]# ll -d /backup
drwxr-xr-x. 2 root root 4096 Jan 31 16:56 /backup
[root@localhost backup]# cp /etc/inittab .
[root@localhost ~]# su - water
[water@localhost ~]$ cd /backup
[water@localhost backup]$ ll /backup/inittab
-rw-r--r--. 1 root root 884 Jan 31 17:07 /backup/inittab
[root@localhost backup]# getfacl inittab
#数据前面带有[#]表示文件的默认属性,包含文件名,属主,属组
# file: inittab
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[water@localhost backup]$ echo 123 >>inittab
-bash: inittab: Permission denied
#----------------给/backup目录下的inittab文件添加facl,user读写权限
[root@localhost backup]# setfacl -m u:water:rw inittab
[root@localhost backup]# getfacl inittab
# file: inittab
# owner: root
# group: root
user::rw-
user:water:rw-
group::r--
mask::rw-
other::r--
#添加完acl权限后,文件权限属性后面多了一个+
[root@localhost backup]# ll
total 8
-rw-rw-r--+ 1 root root 906 Jan 31 17:15 inittab
#执行添加数据,数据添加成功
[water@localhost backup]$ echo 123 >>inittab
[water@localhost backup]$ tail -3 inittab
#
id:3:initdefault:
123
#取消用户权限
[root@localhost backup]# setfacl -x u:water inittab
#------------------对/backup/initab文件添加facl,group权限rw权限,组内的所有成员都可以修改此文件
#project组中有三个用户,分别是water,edison,dizzy
[root@localhost backup]# setfacl -m g:project:rw inittab
[root@localhost backup]# getfacl inittab
# file: inittab
# owner: root
# group: root
user::rw-
group::r--
group:project:rw-
mask::rw-
other::r--
[root@localhost ~]# su - edison
[edison@localhost ~]$ cd /backup
[edison@localhost backup]$ echo edisoneditinittab >> inittab
[edison@localhost backup]$ tail -3 inittab
id:3:initdefault:
123
edisoneditinittab
#设置目录的facl权限,在目录下创建的文件都继承此目录的facl权限
[root@localhost backup]# setfacl -m d:g:project:rw project
[root@localhost backup]# getfacl project
# file: project
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:project:rw-
default:mask::rwx
default:other::r-x
[root@localhost backup]# cd project
[root@localhost project]# touch rootfile
[root@localhost project]# getfacl rootfile
# file: rootfile
# owner: root
# group: root
user::rw-
group::r-x #effective:r--
group:project:rw-
mask::rw-
other::r--
[root@localhost project]# su - water
[water@localhost ~]$ cd /backup/project
[water@localhost project]$ ls
rootfile
#在project中的用户可以修改文件内容
[water@localhost project]$ echo abc>>rootfile
[water@localhost project]$ tail -3 rootfile
abc