Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

一、ACL技术

1.概念

  • ACL称为访问控制列表

2.作用

  • 可以针对一个文件/目录来制定其相对于某一单一用户、单一用户组的权限

二、setfacl命令

1.功能

  • 设置文件/目录的ACL属性

2.命令格式

  • getfacl   [选项]   [{-m|-x}  ACL参数]   文件/目录名

相关参数与选项

  • -m:设置后续的ACL参数给文件/目录使用,不可与-x合用
  • -x:删除后续的ACL参数,不可与-m合用
  • -b:删除【所有的】ACL参数,包括子目录/文件的
  • -k:删除【默认的】ACL参数,就是mask选项
  • -R:递归设置ACL,包括子目录/文件的都一起设置
  • -d:设置【默认ACL参数】,只针对目录有效,在该目录新建的数据会引用默认值

3.注意事项

  • 如果一个账号或用户对一个文件的ACL属性为-,说明对此文件无任何权限

setfacl  -m  u:dongshao:-  file

三、设置指定账号对某一文件/目录的ACL属性(格式:u:账号名:账号权限)

先使用root身份建立一个ACL_test文件,查看其属性

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

1.设置其他账号对文件的ACL属性

  • 设置dongshao对此文件只有rx权限,使用ll查看时,第一栏最后会显示一个+号,代表此文件带有ACL属性
  • 但是ll不可以看出dongshao对这个文件有什么权限,因为dongshao不能代表相对于此文件的其他人,后面会介绍使用getfacl查看

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

2.设置文件拥有者对文件的ACL属性

  • 当::中间没有指定账号名时,默认是修改该文件拥有者的属性
  • 这个文件时root的,因此这样设置,是设置root对此文件的ACL属性
  • 使用ll查看,该拥有者的属性为rwx

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

四、错误事例

  • 如果我们设置文件自己拥有者的ACL属性,::两个冒号之间一定不要加上拥有者的名字,如果加上了,不仅不会生效,并且getfacl查看时还会多一份垃圾数据
  • 例如我们设置时加上了root的名称,第二次又更改了root为rw

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

  • 但是getfacl查看时那份user:root:rwx数据不会消失

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

  • 因为产生了垃圾数据,所以我们要使用下面的方法清除

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

五、设置指定用户组对某一文件的ACL属性(格式:g:用户组名:用户组权限)

1.接着上面的那个ACL_test文件,我们设置tty这个用户组对此文件有rx的权限

  • 设置之后,尽管ACL_test不属于tty这个用户组,但是tty这个用户组也可以对ACL_test文件有rx的权限

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

六、setfacl设置目录的子目录/文件的ACL属性(继承)

1.概念

  • 我们为一个目录设置了ACL属性,但是这些ACL属性对于此目录的子目录与文件不会生效

2.注意事项

  • 设置了这种继承之后,只有在此目录下建立新文件/子目录时,文件/子目录才会生效。设置ACL属性之前建立的文件/子目录不会生效
  • 设置了之后就会多出来这些属性

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

3.如何设置子目录与文件也拥有该ACL属性

  • 案例:设置子目录/文件都支持指定用户的ACL属性

setfacl -m  d:u:dongshao:rx  dir  //设置dongshao这个用户对于dir目录的子目录/文件都是rx权限

  • 案例:设置子目录/文件都支持指定用户组的ACL属性

setfacl -m d:g:tty:rx  dir  //设置tty这个用户组对于dir目录的子目录/文件都是rx权限

四、一次只取消一个文件的ACL属性(不包括子目录的文件)

1.取消指定用户对某一文件的ACL属性(格式:u:用户名)

  • 将dongshao对于ACL_test文件的ACL属性取消,使dongshao对此文件拥有的是其他人的属性
  • u:用户名  后面什么都不接就是取消这个账户对这个文件的ACL属性(如果ACL_test是个目录,则目录下的文件对于dongshao的ACL属性还没有取消)

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

2.取消指定用户组对某一文件的ACL属性(格式:g:用户组名)

  • 将tty用户组对于ACL_test文件的ACL属性取消,使tty用户组对此文件没有任何权限,因为ACL_test不属于这个用户组

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

五、一次只取消一个文件的子目录/文件ACL属性(不包括文件本身)

  • ①取消某一账号相对于此目录的子目录/文件的ACL:setfacl  -x  d:u:账号名  目录名
  • ②取消某一用户组相对于此目录的子目录/文件的ACL:setfacl  -x  d:g:账号名  目录名

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

六、设置ACL属性全部消失(包括子目录内的文件)

  • setfacl   -b  文件/目录名
  • 此命令会将文件/目录的所有ACL属性都取消,连ACL继承属性都取消了

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

七、getfacl命令

1.功能

  • 查看文件/目录的ACL属性

2.命令格式

  • get  文件/目录名

参数与选项

  • 选项几乎与setfacl相同,详情查看setfacl命令

3.查看的文件内容

  • 案例:查看上面那个ACL_test文件的ACL属性

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

  • #file:该文件的名称(名字前带#号代表该文件的默认属性)
  • #owner:该文件的拥有者
  • #group:该文件的用户组
  • user:该文件拥有者的权限
  • user:dongshao:r-x:指定dongshao这个用户对此文件的权限
  • group::r--:该文件用户组的权限
  • group:tty:r-x:指定tty这个用户组对这个文件的权限
  • mask:此文件默认的有效权限
  • other:该文件其他人的权限

八、mask权限

1.概念

  • mask代表该文件默认所能支持的所有属性

2.例如

  • 一个文件的mask为r-x。如果使用setfacl设置dongshao对文件的权限为rw,那么只有r可以生效,w不生效,因为该文件的mask为r-x,尽管设置了w,也不会生效

3.注意事项(重点)

  • 但是mask属性是会随着设置ACL的先后有不同的效果,详情见下面两个事例

4.案例:在一个还没有设定用户ACL属性之前设置mask(格式: m:mask权限)

  • 第一步:我们设置mask为rx

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

  • 第二步:我们设置dongshao对此文件有rw权限,发现mask改变了,变为dongshao的权限的设置值

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

5.案例:在一个已经设定了用户ACL属性之后设置mask(格式: m:mask权限)

  • 第一步:我们先设置dongshao对此文件的ACL属性为rw

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)

  • 第二步:我们再去设置mask为rx,发现mask变为rx,且dongshao的w属性失效了,只有r生效

Linux(入门基础):79---文件ACL技术(getfacl、setfacl)