ACL权限设置

ACL是Access Control List 的缩写,主要用于在提供传统的owner、group、others的read、write、execute权限之外进行细部权限设置。

启动ACL

让/目录支持ACL

#mount –o remount ,acl /

#mount |grep /                  //查看是否有挂载

开机启动ACL

将要启动ACL的分区写入/etc/fstab中:

#vi /etc/fstab

/dev/hda5       /                ext3         default,acl       1      2

ACL相关命令

Getfacl :取得某个文件/目录的ACL权限;

Setfacl :设置某个文件/目录的ACL权限;

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...

setfacl --restore=file

描述

setfacl用来在命令行里设置ACL。在命令行里,一系列的命令跟随以一系列的文件名。

选项-m和-x后边跟以acl规则。多条acl规则以逗号(,)隔开。选项-M和-X用来从文件或标准输入读取acl规则。

选项--set和--set-file用来设置文件或目录的acl规则,先前的设定将被覆盖。

选项-m(--modify)和-M(--modify-file)选项修改文件或目录的acl规则。

选项-x(--remove)和-X(--remove-file)选项删除acl规则。

当使用-M,-X选项从文件中读取规则时,setfacl接受getfacl命令输出的格式。每行至少一条规则,以#开始的行将被视为注释。

当在不支持ACLs的文件系统上使用setfacl命令时,setfacl将修改文件权限位。如果acl规则并不完全匹配文件权限位,setfacl将会修改文件权限位使其尽可能的反应acl规则,并会向standard error发送错误消息,以大于0的状态返回。

权限

文件的所有者以及有CAP_FOWNER的用户进程可以设置一个文件的acl。(在目前的linux系统上,root用户是唯一有CAP_FOWNER能力的用户)

选项

-b,--remove-all

  删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。

-k,--remove-default

  删除缺省的acl规则。如果没有缺省规则,将不提示。

-n,--no-mask

  不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定。

--mask

  重新计算有效权限,即使ACL mask被明确指定。

-d,--default

  设定默认的acl规则。

--restore=file

  从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行。

--test

  测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。

-R,--recursive

  递归的对所有文件及目录进行操作。

-L,--logical

  跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。

-P,--physical

  跳过所有符号链接,包括符号链接文件。

--version

  输出setfacl的版本号并退出。

--help

  输出帮助信息。

--

  标识命令行参数结束,其后的所有参数都将被认为是文件名

-

  如果文件名是-,则setfacl将从标准输入读取文件名。

ACL规则

setfacl命令可以识别以下的规则格式。

[d[efault]:] [u[ser]:]uid [:perms]

  指定用户的权限,文件所有者的权限(如果uid没有指定)。

[d[efault]:] g[roup]:gid [:perms]

  指定群组的权限,文件所有群组的权限(如果gid未指定)

[d[efault]:] m[ask][:] [:perms]

  有效权限掩码

[d[efault]:] o[ther] [:perms]

  其他的权限

恰当的acl规则被用在修改和设定的操作中。

对于uid和gid,可以指定一个数字,也可指定一个名字。

perms域是一个代表各种权限的字母的组合:读-r 写-w 执行-x,执行只适合目录和一些可执行的文件。pers域也可设置为八进制格式。

自动创建的规则

最初的,文件目录仅包含3个基本的acl规则。为了使规则能正常执行,需要满足以下规则。

*3个基本规则不能被删除。

*任何一条包含指定的用户名或群组名的规则必须包含有效的权限组合。

*任何一条包含缺省规则的规则在使用时,缺省规则必须存在。

用法举例如下:

acl 全称 Access Control Lists 翻译成中文叫"访问控制列表",

传统的 Linux 文件系统的权限控制是通过 user、group、other 与 r(读)、w(写)、x(执行) 的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求。 例如,目录 /data 的权限为:drwxr-x---,所有者与所属组均为 root,在不改变所有者的前提下,要求用户 tom 对该目录有完全访问权限 (rwx).考虑以下2种办法 (这里假设 tom 不属于 root group)

(1) 给 /data 的 other 类别增加 rwx permission,这样由于 tom 会被归为 other 类别,那么他也将拥有 rwx 权限。

(2) 将 tom 加入到 root group,为 root group 分配 rwx 权限,那么他也将拥有 rwx 权限。

以上 2 种方法其实都不合适,所以传统的权限管理设置起来就力不从心了。

为了解决这些问题,Linux 开发出了一套新的文件系统权限管理方法,叫文件访问控制列表 (Access Control Lists, ACL)。简单地来说,ACL 就是可以设置特定用户或者用户组对于一个文件的操作权限。

ACL 有两种,一种是存取 ACL (access ACLs),针对文件和目录设置访问控制列表。一种是默认 ACL (default ACLs),只能针对目录设置。如果目录中的文件没有设置 ACL,它就会使用该目录的默认 ACL.

首先我来讲一下getfacl ( 显示文件或目录的 ACL)

在我的电脑里首先有一个用户叫NEU.我们学校的简称.同时还有一个用户,software,我的专业名称.

我以neu用户进行操作,在其目录下建立一个文件fileofneu.

可以看到它的初始权限为-rw-rw-r--然后我把这个文件权限进行下修改.使用的命令为chmod,修改后的文件权限为-rw-rw----现在这个文件的权限就不允许其它用户访问了.

然后切换到sofeware用户,来证实这个文件的不可访问性.

下面我们就通过getfacl命令来查看.这时候得进入neu用户下操作了.其命令格式很简单:getfacl fileofneu

权限一目了然.不多介绍了,下面就要用Setfacl来进行修改了.使其在对于其它用户的权限里,只对software用户只读只写.

setfacl -m u:softeware:rw- fileofneu

setfacl -R -m u:softeware:rw- fileofneu (-R一定要在-m前面,表示目录下所有文件)

setfacl -x u:softeware fileofneu   (去掉单个权限)

setfacl -b (去掉所有acl权限)

如果我们希望在一个目录中新建的文件和目录都使用同一个预定的ACL,那么我们可以使用默认(Default) ACL。在对一个目录设置了默认的ACL以后,每个在目录中创建的文件都会自动继承目录的默认ACL作为自己的ACL。用setfacl的-d选项就可以做到这一点:

[root@FC3-vm mnt]# setfacl -d --set g:testg1:rwx dir1

[root@FC3-vm mnt]# getfacl dir1

然后用getfacl命令来进行查看.我们就可以看到多了一行user:software:rw- 这说明其对用户software开放了读写的权限.

为了证实其可用性,再切换到software用户下访问这个文件,发现与前面不同的是,这回可以读写了.

今天就讲这一个吧,讲多了,大家也记不住.

对了,刚才我进行了一下这个操作,发现进不去,原来是我没有给software用户授与访问/home/neu这个目录的进入的权力,所以,我们还得应用 setfacl命令来使得software用户拥有进入这个目录的权力.其操作与上面基本一致。

posted @ 2019-06-30 09:11  樊伟胜  阅读(753)  评论(0编辑  收藏  举报