Linux运维之Linux 的文件权限及acl列表

一、实验环境(rhel7.0版本)

主机环境:rhel7.0

各主机信息

主机名 IP
server 172.25.254.1

 

二、Linux文件属性

 

[root@server1 ~]# ls -l      #查看该目录下(/root)下的文件的详细信息
total 24 
-rw-------. 1 root root 1436 May 12 15:39 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 May 19 00:41 Desktop
drwxr-xr-x. 2 root root    6 May 12 15:42 Documents
drwxr-xr-x. 2 root root    6 May 12 15:42 Downloads
-rw-r--r--. 1 root root 8802 May 19 17:58 etc.newer.than.passwd
drwxr-xr-x. 2 root root   84 May 12 15:42 firstboot-screenshots
-rw-r--r--. 1 root root 1487 May 12 15:40 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 May 12 15:42 Music
drwxr-xr-x. 2 root root    6 May 17 23:10 Pictures
drwxr-xr-x. 2 root root    6 May 12 15:42 Public
drwxr-xr-x. 2 root root    6 May 12 15:42 Templates
drwxr-xr-x. 2 root root    6 May 12 15:42 Videos
[   1   ]  [2] [3]  [4]   [5] [    6    ] [   7  ]

[1]  表示文件类型权限
[2]  表示链接数
[3]  表示文件拥有者
[4]  表示文件所属用户组
[5]  表示文件容量
[6]  表示文件最后被修改日期
[7]  表示文件名

下面详细解释下每一栏的含义:

1、第一栏代表这个文件的类型与权限。共包含10个字符

  • 第一个字符代表这个文件是目录、文件或链接文件等:
  • 当为【d】则是目录,例如上表文件名为【Desktop】的那一行;
  • 当为【-】则是普通文件,例如上表文件名为【anaconda-ks.cfg】的那一行;
  • 若为【l】则表示为链接文件(link  file);
  • 若是【b】则表示块设备即为设备文件里面的可供存储的周边设备(可按块随机读写的设备);
  • 若是【c】则表示字符设备即设备文件里面的串行端口设备,例如键盘、鼠标(一次性读取设备)
  • 若是【s】则表示套接字文件
  • 若是【p】则表示管道
  • 接下来的字符中,以三个为一组,且均为【rwx】的三个参数的组合。其中【r】代表可读(read)、【w】代表可写(write)、【x】代表可执行(execute)。要注意的是这三个权限的位置不会改变,如果没有权限,就会出现减号【-】而已。
  • 第一组为文件拥有者可具备的权限
  • 第二组为加入此用户组之帐号的权限
  • 第三组为非本人且没有加入本用户组的其他帐号的权限

2、第二栏表示有多少文件名链接到此节点(inode)

  • 每个文件都会将它的权限与属性记录到文件系统的inode,不过,我们使用的目录树却是使用文件名来记录,因此每个文件名就会链接到一个inode,这个属性记录的就是有多少不同的文件名链接到相同的inode号码。

3、第三栏表示这个文件(或目录)的拥有者帐号

4、第四栏表示这个文件的所属用户组

5、第五栏表示这个文件的容量大小,默认单位是Bytes

6、第六栏为这个文件的创建日期或最近的修改日期

  • 这一栏的内容分别为日期(月/日)及时间,如果这个文件被修改的时间举例现在太久,那么时间部分会仅显示年份而已。
  • 如果想要显示完整的时间格式,可以利用ls的选项,亦即:【ls  -l   --full-time】就能够显示出完整的时间格式,包括年、月、日、时间。
  • 另外,如果你当初是以简体中文安装你的Linux系统,那么日期字段将会以中文来显示。可惜的是中文没有办法在纯命令行的终端模式中正确地显示,所以此栏会变成乱码。那你就得要使用【export  LC_ALL=en.US.utf8】来修改语系。
  • 如果想要让系统默认的语系变成英文的话,那么你可以修改系统配置文件【/etc/locale.conf】。

7、第七栏为这个文件名

  • 这个字段就是文件名,比较特殊的是:如果文件名之前多一个【.】,则代表这个文件为隐藏文件

 


值的注意的是:例如,/etc/shadow这一章好管理的文件,由于该文件记录了你系统中所有帐号的数据,因此是很重要的一个配置文件,当然不能让任何人读取(否则密码会被窃取),只有root才能够来读取,所以该文件的权限就会成为【----------】。噫,所有人都不能使用?没关系,root基本上是不受系统的权限所限制,所以无论文件权限是什么,默认root都可以读写。


 

针对第二栏的数据,提出的疑问:为什么在 新建的目录的链接数(第二栏的数据)会是2,而新建的文件的链接数(第二栏的数据)会是1呢?同时,在 A 目录下面创建新的目录后,用 ls  -l 看到 A 目录的链接数会加1,而在 A 目录下面创建新的文件后,用 ls  -l  看到 A 目录的链接数不会加1呢?

文件的链接数为本文件共有几个硬链接。因为新建的文件没有硬链接,所以链接数会显示为1;

目录的链接数为有多少个目录(而非文件)指向此目录。因为新建的目录内必定有 “.”  这个目录,该目录指示的就是自己,也必定有“..”  这个目录,该目录指示的就是本目录的上级目录,因此,即使一个空的目录,其链接数也是2;

为了简单起见,只要这样理解就可以了:(count -2 )等于本目录包含的直接子目录数(就是只包括儿子,不包括孙子啦!)。例如:如果一个目录 /abc 的  count  为5,那么  /abc 目录一顶包含3个子目录。同理,如果某个目录里的以及子目录(不算上 "."  和 ".." 的话)个数为  n,那么该目录的链接数为  n+2。

 

三、修改文件属性与权限

 

1、修改所属用户组——chgrp+修改文件拥有者——chown

值的一提的是:如果是普通用户执行“chgrp”和“chown”命令,则普通用户修改的文件/目录的所属组必须是该普通用户的附加组,普通用户修改的文件/目录的所属主必须是该普通用户本身。

 

chgrp [-R] dirname/filename ...

选项与参数:
-R:进行递归(recursive)修改,亦即连同子目录下的所有文件、目录都更新称为这个用户组之意,
    常常用在修改某一目录内的所由文件之情况

要注意的是:要被修改的组名必须要在/etc/group文件中存在才行,否则会显示错误。

 

chown [-R] 帐号名称 文件或目录
chown [-R] 帐号名称:用户组名称 文件或目录
或者chown [-R] 帐号名称.用户组名称 文件或目录

选项与参数:
-R:进行递归(recurisive)修改,亦即连同子目录下的所有文件都修改。

要注意的是:

  1. 用户必须是已经存在系统中的帐号,也就是/etc/passwd这个文件中有记录的用户名称才能修改
  2. 同时修改所属用户和所属组时,所属用户和所属组之间可以用【.】也可以用【:】。不过很多人在设置帐号时,喜欢在帐号当中加入小数点(例如vbird.tsai这样的帐号格式),这就会造成系统的误判,所以比较件一使用【:】来隔开拥有者和用户组。
  3. 此外,chown也能单纯的修改所属用户组,例如【chown  .student  xjjfile  或者  chown  :student  xjjfile】就是修改u用户组。

Linux运维之Linux 的文件权限及acl列表_第1张图片

 

环境准备:

 

(1)对文件来说

 

【1】、chown username file                                         更改文件的拥有者

Linux运维之Linux 的文件权限及acl列表_第2张图片

 

【2】、chgrp groupname file                                        更改文件的所属组

Linux运维之Linux 的文件权限及acl列表_第3张图片

 

【3】、chown username.groupname file                  更改文件的拥有者及所属组

Linux运维之Linux 的文件权限及acl列表_第4张图片

 

(2)对目录来说

 

【1】、chown   username  dir                                     更改目录本身的拥有者

Linux运维之Linux 的文件权限及acl列表_第5张图片

 

【2】、chown -R username dir                                    更该目录本身及其内部的拥有者 

Linux运维之Linux 的文件权限及acl列表_第6张图片

 

【3】、chgrp  groupname  dir                                  更改目录本身的所属组

Linux运维之Linux 的文件权限及acl列表_第7张图片

 

【4】、chgrp -R groupname dir                               更改目录本身及其内部的所属组

Linux运维之Linux 的文件权限及acl列表_第8张图片

 

【5】、chown  username:groupname dir                          更改目录本身的拥有者和所属组   

 Linux运维之Linux 的文件权限及acl列表_第9张图片

 

【6】、chown -R username:groupname dir                      更改目录本身及其内部的拥有者和所属组(-R表示递归)     

Linux运维之Linux 的文件权限及acl列表_第10张图片

 

2、修改文件或的权限——chmod

rw-|r--|r--   
  u   g   o
其中:u指拥有者;g指所属组;o指其他用户
1、r:可读                 对文件:可以查看文件的字符(内容); 对目录:可以查看目录中文件的信息
2、w:可写               对文件:可以更改文件内的字符;对目录:可以在目录中添加或者删除文件或目录
3、x:可执行            对文件:可以运行文件内记录的程序的动作;对目录:可以进入目录

 

(1)字符方式修改文件或目录的权限

 

chmod [-R]

u

g

o

a

+(加入)

-(移除)

=(设置)

r

w

x

文件或目录

 

【1】、对文件来说
 

1、chmod u+x filename         filename文件的拥有者增加可执行的权限

Linux运维之Linux 的文件权限及acl列表_第11张图片
 

2、chmod g+w,o+x filename       filename文件的所属组加上可写的权限,其他用户加上可执行的权限

Linux运维之Linux 的文件权限及acl列表_第12张图片

 

3、chmod ugo-r filename        filename文件的拥有者,所属组和其他用户,都去掉可读的权限

Linux运维之Linux 的文件权限及acl列表_第13张图片

 

4、chmod a+r filename      filename文件的拥有者,所属组和其他用户,都增加可读的权限

Linux运维之Linux 的文件权限及acl列表_第14张图片

 

5、chmod g=rx,o=rw filename      设置filename的权限为:所属组具有可读可执行的权限,其他人具有可读可写的权限

Linux运维之Linux 的文件权限及acl列表_第15张图片

 

【2】、对目录来说

 

1、chmod g+w  dir          dir目录的所属组加上可读的权限

Linux运维之Linux 的文件权限及acl列表_第16张图片

 

2、chmod u-r,o+w  dir        dir目录的拥有者去掉可读的权限,其他人加上可写的权限

Linux运维之Linux 的文件权限及acl列表_第17张图片

 

3、chmod  ugo=rwx   dir      dir目录的拥有者,所属组,其他用户的权限都设置为rwx

Linux运维之Linux 的文件权限及acl列表_第18张图片

 

4、chmod -R ugo=rwx dir     dir目录本身及其内部的拥有者,所属组,其他用户的权限都设置为rwx

Linux运维之Linux 的文件权限及acl列表_第19张图片

 

5、chmod -R a=rx dir       设置dir目录本身及其内部的所有者,所属组,其他人的权限为rx

Linux运维之Linux 的文件权限及acl列表_第20张图片

 

(2)数字方式修改文件或目录的权限

 

【1】、

Linux文件的基本权限就有9个,分别是拥有者(owner)、所属群组(group)、其他人(others)三种社分各有自己的读

(read)、写(write)、执行(execute)权限。其中,我们可以使用数字来代表各个权限,个权限的数字对照表如下:

r:4
w:2
x:1
-:0

7=rwx        6=rw-        5=r-x        4=r--        3=-wx       2=-w-        1=--x        0=---

注意:所以设定的权限单个数字不能超过7,同理umask值也是一样不能超过7。

 

【2】、文件权限数字表示

每种身份(owner、group、others)各自的三个权限(r、w、x)数字是需要累加的,例如当权限为:【-rwxrwx---】数字则是:

owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0

 

【3】、chmod 的语法:

chmod [-R] xyz 文件后目录

选项与参数:
xyz:就是刚刚提到的数字类型的权限属性,为rwx属性数值的相加
-R:进行递归(recursive)修改,亦即连同子目录下的所有文件都会修改

 

(1)对文件来说

 

1、chmod 776 file           修改文件的权限为776

Linux运维之Linux 的文件权限及acl列表_第21张图片

 

(2)对目录来说

 

1、chmod 666 dir               修改目录本身的权限为666   

Linux运维之Linux 的文件权限及acl列表_第22张图片

 

2、chmod -R 777 dir       修改目录本身及其内部的权限为777

Linux运维之Linux 的文件权限及acl列表_第23张图片


四、目录与文件的权限意义

 

这些文件权限对于一般文件与目录文件有何不同?有大大的不同,下面来具体讲解一般文件权限与目录文件权限的区别

 

(1)权限对文件的重要性

 

权限对于文件来说,它的意义是这样的:

  • r(read):可读取此文件的实际内容,如读取文本文件的文字内容等;
  • w(write):可以编辑、新增或是修改该文件的内容(但不含删除该文件);
  • x(execute):该文件具有可以被系统执行的权限。

至于w这个权限?当你对一个文件具有w权限时,你可以具有写入、编辑、新增、修改文件内容的权限,但不具备有删除该文件本身的权限。对于文件的rwx来说,主要是针对文件的内容而言,与文件名的存在与否没有关系,因为文件记录的是实际的数据嘛。

 

(2)权限对目录的重要性

 

目录主要的内容在记录文件名列表,文件名与目录有强烈的关联。所以如果针对目录时,那么r、w、x对目录是什么意义呢?

  • r(read):表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据,所以你就可以利用ls这个命令将该目录的内容列表显示出来。
  • w(write):这个可写入的权限对目录来说,是很了不起的,因为它表示你具有改动该目录结构列表的权限,也就是下面这些权限:
  1. 建立新的文件与目录;
  2. 删除已经存在的文件或目录(不论该文件的权限是什么);
  3. 将已存在的文件或目录进行更名;
  4. 移动该目录内的文件、目录位置;

总之,目录的w权限就与该目录下面的文件名的变动有关。

  • x(execute):目录的x代表的是用户能否进入该目录成为工作目录的用途,所谓的工作目录就是你目前所在的目录。

 

(3)总结

组件 内容 替代对象 r w x
文件 详细数据data 文件夹 读到文件内容 修改文件内容 执行文件内容
目录 文件名 可分类抽屉 读到文件名 修改文件名 进入该目录的权限(key)

 

(4)练习

 

【1】、练习题1

 

  • 先用root的身份建立所需要的文件与目录环境

我们用root的身份在所有人都可以工作的/tmp目录中建立一个名为testing的目录,该目录的权限为744且目录拥有者为root。另外,在testing目录下建立一个空文件,文件名亦为testing。

[root@server1 ~]# cd /tmp/                   <==切换工作目录到/tmp
[root@server1 tmp]# mkdir testing            <==建立新目录
[root@server1 tmp]# chmod 744 testing/       <==修改权限
[root@server1 tmp]# touch testing/testing    <==建立空文件
[root@server1 tmp]# chmod 600 testing/testing      <==修改权限
[root@server1 tmp]# ls -ld testing/ testing/testing 
drwxr--r--. 2 root root 20 May 21 12:11 testing/
-rw-------. 1 root root  0 May 21 12:11 testing/testing

#仔细一看,目录的权限为744,且所属用户组与使用者均是root。
#那么在这样的情况下面,一般身份使用者对这个目录/文件的权限是什么?

 

  • 一般用户的读写权限是什么?观察中

在上面的例子中,虽然目录是744的权限设置,一般用户应该能有r的权限,但这样的权限用户能做啥事?由于我的系统中的帐号,请再开一个终端,使用sudent登录来操作下面的任务。

[student@server1 ~]$ cd /tmp/
[student@server1 /tmp]$ ll testing/
ls: cannot access testing/testing: Permission denied
total 0
?????????? ? ? ? ?            ? testing
#虽然有告知权限不足,但因为具有r的权限可以查询文件名,由于权限不足(没有x),所以会有一堆问号。

[student@server1 /tmp]$ cd testing/
testing/: Permission denied.
#因为不具有x,所以当然没有进入的权限。

 

  • 如果该目录属于用户本身,会有什么状况?

上面的练习,我们知道了只有r确实可以让用户读取目录的文件名列表,不过详细的信息却还是读不到,同时也不能将该目录变成工作目录(用cd进入该目录之意)。那如果我们让该目录变成用户的,那么用户在这个目录下面能否删除文件?下面的练习做做看:

1、先用root的身份来搞定/tmp/testing的属性、权限设置。
[root@server1 tmp]# chown student testing/
[root@server1 tmp]# ll -d testing/
drwxr--r--. 2 student root 20 May 21 12:11 testing/
[root@server1 tmp]# ll testing/testing 
-rw-------. 1 root root 0 May 21 12:11 testing/testing   #student是具有全部权限的

2、再用student的帐号来处理一下/tmp/testing/testing这个文件看看
[student@server1 /tmp]$ ll -d testing/
drwxr--r--. 2 student root 20 May 21 12:11 testing/
[student@server1 /tmp]$ ll testing/testing 
-rw-------. 1 root root 0 May 21 12:11 testing/testing
[student@server1 /tmp]$ rm testing/testing 
rm: remove write-protected regular empty file ‘testing/testing’? y
[student@server1 /tmp]$ ll testing/
total 0
#竟然可以删除。

 

【2】、练习题2

假设两个文件名,分别是下面这样:

  • /dir1/file1
  • /dir2

假设你现在在系统使用student这个帐号,那么这个帐号针对/dir1、/dir1/file1、/dir2这三个文件名来说,分别需要哪些最小的权限才能完成各项任务?

操作

/dir1 /dir1/file1 /dir2 重点
读取file1内容 x r - 要能够进入dir1才能读取里面的文件数据
修改file1内容 x rw - 能够进入/dir1且修改file1才行
执行file1内容 x

rx

- 能够进入/dir1且file1能运行才行
删除file1内容 wx - - 能够进入/dir1具有目录修改的权限即可
将file1复制到/dir2 x r wx 要能够读file1且能够修改/dir2内的数据

你可能会问,上面的表格当中,很多时候/dir1都不必有r,为啥?我们知道/dir1是个目录,也是个抽屉。那个抽屉的r代表“这个抽屉里面有灯光”,所以你能看到的抽屉内的所有文件盒名称(非内容)。但你已经之道里面的文件盒放在那个地方,那有没有灯光有区别?你还是可以摸黑拿到该文件盒的,对吧!因此,上面很多操作,你只要具有x即可,r是非必备的,只是没r的话,使用【tab】时,它就无法自动帮你补齐文件名了

 

五、acl访问控制列表

 

1、什么是ACL

        ACL是Access  Control  List的英文缩写,中文译为访问控制列表,主要目的是提供传统的属主、所属群组、其他人的读、写、执行权限之外的详细权限设置。ACL可以针对单一用户、单一文件或目录进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助。

        那ACL主要可以针对哪些方面来控制权限?它主要可以针对几个选项:

  • 用户(user):可以针对用户来设置权限;
  • 用户组(group):针对用户组为对象来设置权限;
  • 默认属性(mask):还可以针对在该目录下建立新文件/目录时,规范新书局的默认权限。

 

2、如何支持启动ACL

        事实上,原本ACL是UNIX-like操作系统的额外支持选项,但因为近年以来Linux系统对权限设置的热切需求,目前ACL几乎已经默认加入了所有常见的Linux文件系统的挂载参数中(ext2、ext3、ext4、xfs等)。所以你无须进行任何操作,ACL就可以被你使用。不过,如果你不确定系统是否真的支持ACL的话,那么就来检查一下内核挂载时显示的信息吧。

        看,至少xfs已经支持这个ACL的功能。

 

3、ACL的设置技巧:getfacl、setfacl

  • getfacl:获取某个文件/目录的ACL设置选项;
  • setfacl:设置某个目录/文件的ACL规范。

 

(1)setfacl命令用法及最简单的【u:帐号:权限】设置

setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名

选项与参数:
-m:设置后续的ACL参数给文件使用,不可与-x合用
-x:删除后续的ACL参数,不可与-m合用
-b:删除【所有的】ACL设置参数
-k:删除【默认的】ACL参数,关于所谓的【默认】参数于后续范例中介绍
-R:递归设置ACL,即包括子目录都会被设置起来。只针对已经存在的子目录,新建的子目录并不会设置
-d:设置【默认ACL参数】的意思,只对目录有效,在该目录新建的数据会引用此默认值

 

1、针对特定使用者的方式
#设置规范:【u:[使用者帐号列表]:rwx】,例如针对student的权限规范rx。
[root@server1 ~]# touch acl_test1
[root@server1 ~]# ll acl_test1 
-rw-r--r--. 1 root root 0 May 21 17:47 acl_test1
[root@server1 ~]# setfacl -m u:student:rx acl_test1 
[root@server1 ~]# ll acl_test1 
-rw-r-xr--+ 1 root root 0 May 21 17:47 acl_test1
#权限部分对了个+,且与原本的权限(644)看起来差异很大,但要如何查看?

[root@server1 ~]# setfacl -m u::rwx acl_test1 
[root@server1 ~]# ll acl_test1 
-rwxr-xr--+ 1 root root 0 May 21 17:47 acl_test1
#设置值中的u后面无使用者列表,代表设置该文件拥有者,所以上面显示root的权限成为了rwx。

上述操作为最简单的ACL设置,利用【u:用户:权限】的方式来设置,设置前请加上-m这个选项。一个文件设置了ACL参数后,它的权限部分就会多出一个 + 号,但是此时你看到的权限与时即权限可能会有点误差。那要如何查看?就通过getfacl吧!

 

(2)getfacl命令用法

getfacl filename

[root@server1 ~]# getfacl acl_test1 
# file: acl_test1      <==说明文件名而已
# owner: root          <==说明此文件的拥有者,亦即ls -l看到的第三使用者栏位
# group: root          <==此文件的所属用户组,亦即ls -l看到的第四使用者栏位
user::rwx              <==使用者列表栏是空的,代表文件拥有者的权限
user:student:r-x       <==针对student的权限设置为rx,与拥有者并不同。
group::r--             <==针对文件用户组的权限设置只有r
mask::r-x              <==此文件默认的有效权限(mask)
other::r--             <==其他人拥有的权限

上面的数据中,显示的数据前面有  #  号的,代表这个文件的默认属性,包括文件名、文件拥有者与文件所属用户组。下面出现的user、group、mask、other则是属于不同用户、用户组与有效权限(mask)的设置值。

 

(3)特定的单一用户组的权限设置:【g:用户组名:权限】

2、针对特定用户组的方式
#设置规范:【g:[用户列表]:[rwx]】,例如针对love的权限规范rwx
[root@server1 ~]# tail -1 /etc/group
love:x:6669:

[root@server1 ~]# setfacl -m g:love:rwx acl_test1 
[root@server1 ~]# ll acl_test1 
-rwxrwxr--+ 1 root root 0 May 21 17:47 acl_test1
[root@server1 ~]# getfacl acl_test1 
# file: acl_test1
# owner: root
# group: root
user::rwx
user:student:r-x
group::r--
group:love:rwx         <==这里就是新增的部分,多了这个用户组的权限设置。
mask::rwx
other::r--

 

(4)针对有效权限设置:【m:权限】

有效权限的意义是:用户或用户组所设置的权限必须要存在于mask的权限设置范围内才会生效,此即【有效权限】。

3、针对有效权限mask的设置方式
#设置规范:【m:[rwx]】,例如针对刚刚的文件规范仅有r
[root@server1 ~]# setfacl -m m:r acl_test1 
[root@server1 ~]# ll acl_test1 
-rwxr--r--+ 1 root root 0 May 21 17:47 acl_test1
[root@server1 ~]# getfacl acl_test1 
# file: acl_test1
# owner: root
# group: root
user::rwx
user:student:r-x		#effective:r--    <==student+mask均存在者,仅有r而已,x不会生效
group::r--
group:love:rwx			#effective:r--
mask::r--
other::r--

你看,student与mask的集合发现仅有r存在,因此student仅具有r的权限而已,并不存在x权限,这就是mask的功能了。我们可以通过使用mask来规范最大允许的权限,从而避免不小心开放某些权限给其他用户或用户组。不过,我们通常都是将mask设置为rwx,然后再分别依据不同的用户或用户组去规范它们的权限。

 

例题:

[root@server1 ~]# mkdir /srv/projecta
[root@server1 ~]# chmod 770 /srv/projecta/
[root@server1 ~]# ll -d /srv/projecta/
drwxrwx---. 2 root root 6 May 21 18:20 /srv/projecta/
[root@server1 ~]# setfacl -m u:student:rx /srv/projecta/
[root@server1 ~]# ll -d /srv/projecta/
drwxrwx---+ 2 root root 6 May 21 18:20 /srv/projecta/
[root@server1 ~]# getfacl /srv/projecta/
getfacl: Removing leading '/' from absolute path names
# file: srv/projecta/
# owner: root
# group: root
user::rwx
user:student:r-x
group::rwx
mask::rwx
other::---


[root@server1 ~]# cd /srv/projecta/
[root@server1 projecta]# touch abc1
[root@server1 projecta]# mkdir abc2
[root@server1 projecta]# ll -d abc*
-rw-r--r--. 1 root root 0 May 21 21:10 abc1
drwxr-xr-x. 2 root root 6 May 21 21:10 abc2

你可以明显地发现,权限后面都没有 + ,代表这个ACL属性并没有继承,如果你想要让ACL在目录下面的数据都有继承的功能,那就得按照如下这样做了。

 

(5)使用默认权限设置目录未来文件的ACL权限继承【d:[u|g]:[user|group]:权限】

(与文件不同的是要加d;并且默认权限只对在该目录下新建的文件或目录生效,对已经建立的文件无效,对目录本身也无效)

4、针对默认权限的设置方式。
#设置规范:【d:[ug]:使用者列表:[rwx]】
#让student在/srv/projecta下面一直具有rx的默认权限。

[root@server1 projecta]# setfacl -m d:u:student:rx /srv/projecta/

[root@server1 projecta]# ll
total 0
-rw-r--r--. 1 root root 0 May 21 21:10 abc1
drwxr-xr-x. 2 root root 6 May 21 21:10 abc2


[root@server1 projecta]# touch zzz1
[root@server1 projecta]# mkdir zzz2
[root@server1 projecta]# ll -d zzz*
-rw-rw----+ 1 root root 0 May 21 21:11 zzz1
drwxrwx---+ 2 root root 6 May 21 21:11 zzz2


#看吧,确实有继承,然后我们使用getfacl再次确认看看。
[root@server1 projecta]# getfacl zzz2
# file: zzz2/
# owner: root
# group: root
user::rwx
user:student:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:student:r-x
default:group::rwx
default:mask::rwx
default:other::---

[root@server1 projecta]# getfacl zzz1
# file: zzz1
# owner: root
# group: root
user::rw-
user:student:r-x		#effective:r--
group::rwx			#effective:rw-
mask::rw-
other::---

 

(6)取消某个帐号的ACL设置,并不会关闭ACL设置:使用setfacl的-x参数,用法同-m参数。setfacl  -x  [u|g]:[username|groupname]  filename/dirname

值的一提的是:

  1. -x参数不能够取消有效权限的设置
  2. 取消某个帐号的ACL时,不需要加上权限选项
5、取消上面对于acl_test1文件设置的ACL参数
[root@server1 ~]# setfacl -x u:student acl_test1 
[root@server1 ~]# setfacl -x u:root acl_test1 
[root@server1 ~]# setfacl -x g:love acl_test1 
[root@server1 ~]# getfacl acl_test1 
# file: acl_test1
# owner: root
# group: root
user::rwx
group::r--
mask::r--
other::r--


[root@server1 ~]# ll acl_test1 
-rwxr--r--+ 1 root root 0 May 21 17:47 acl_test1

6、取消上面对于/srv/projecta目录设置的ACL参数
[root@server1 projecta]# setfacl -x u:student /srv/projecta/
[root@server1 projecta]# setfacl -x d:u:student /srv/projecta/

[root@server1 projecta]# getfacl /srv/projecta/
getfacl: Removing leading '/' from absolute path names
# file: srv/projecta/
# owner: root
# group: root
user::rwx
group::rwx
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::---
[root@server1 projecta]# getfacl /srv/projecta/zzz1
getfacl: Removing leading '/' from absolute path names
# file: srv/projecta/zzz1
# owner: root
# group: root
user::rw-
user:student:r-x		#effective:r--
group::rwx			#effective:rw-
mask::rw-
other::---
[root@server1 projecta]# getfacl /srv/projecta/zzz2
getfacl: Removing leading '/' from absolute path names
# file: srv/projecta/zzz2
# owner: root
# group: root
user::rwx
user:student:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:student:r-x
default:group::rwx
default:mask::rwx
default:other::---

[root@server1 projecta]# setfacl -x u:student /srv/projecta/*

[root@server1 projecta]# getfacl zzz1
# file: zzz1
# owner: root
# group: root
user::rw-
group::rwx
mask::rwx
other::---
[root@server1 projecta]# getfacl zzz2
# file: zzz2
# owner: root
# group: root
user::rwx
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:student:r-x
default:group::rwx
default:mask::rwx
default:other::---

从上面的结果,我们会发现两点:

  1. 使用-x参数取消某个帐号的ACL设置时,利用ll命令查看,+仍然存在,需要使用-b参数来关闭这个+;
  2. 对root用户的ACL设置(setfacl  -m  u::rwx  acl_test1),当使用-x参数取消设置时,该设置并不会取消,以及使用下面的-b参数,该设置也不会取消;但是对root用户的ACL设置(setfacl  -m  u:root:rwx  acl_test1),使用-x参数取消设置时,该设置会取消。

 

(7)关闭ACL的设置:使用setfacl的-b参数。setfacl  -b  filename/dirname

1、取消acl_test1文件的ACL设置
[root@server1 ~]# setfacl -b acl_test1 
[root@server1 ~]# getfacl acl_test1 
# file: acl_test1
# owner: root
# group: root
user::rwx
group::r--
other::r--

[root@server1 ~]# ll acl_test1 
-rwxr--r--. 1 root root 0 May 21 17:47 acl_test1


2、取消/srv/projecta的ACL设置
[root@server1 projecta]# ll -d /srv/projecta/
drwxrwx---+ 4 root root 50 May 21 21:31 /srv/projecta/
[root@server1 projecta]# ll -d /srv/projecta/zzz*
-rw-rwx---+ 1 root root 0 May 21 21:30 /srv/projecta/zzz1
drwxrwx---+ 2 root root 6 May 21 21:31 /srv/projecta/zzz2

[root@server1 projecta]# setfacl -b /srv/projecta/
[root@server1 projecta]# setfacl -b /srv/projecta/*

[root@server1 projecta]# ll -d /srv/projecta/
drwxrwx---. 4 root root 50 May 21 21:31 /srv/projecta/
[root@server1 projecta]# ll -d /srv/projecta/zzz*
-rw-rwx---. 1 root root 0 May 21 21:30 /srv/projecta/zzz1
drwxrwx---. 2 root root 6 May 21 21:31 /srv/projecta/zzz2

从上面的结果,我们会发现一点:

  1. 对于“使用默认权限设置目录未来文件的ACL权限继承”的ACL设置,在取消时,要取消的是该目录下的*,直接取消,无效。

 

六、练习题

   Linux运维之Linux 的文件权限及acl列表_第24张图片

1.

2.

3.

Linux运维之Linux 的文件权限及acl列表_第25张图片

Linux运维之Linux 的文件权限及acl列表_第26张图片

Linux运维之Linux 的文件权限及acl列表_第27张图片

Linux运维之Linux 的文件权限及acl列表_第28张图片

Linux运维之Linux 的文件权限及acl列表_第29张图片

Linux运维之Linux 的文件权限及acl列表_第30张图片

4.

5.

Linux运维之Linux 的文件权限及acl列表_第31张图片

你可能感兴趣的:(Linux运维之Linux 的文件权限及acl列表)