主机环境:rhel7.0
各主机信息
主机名 | IP |
---|---|
server | 172.25.254.1 |
[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。
值的一提的是:如果是普通用户执行“chgrp”和“chown”命令,则普通用户修改的文件/目录的所属组必须是该普通用户的附加组,普通用户修改的文件/目录的所属主必须是该普通用户本身。
chgrp [-R] dirname/filename ...
选项与参数:
-R:进行递归(recursive)修改,亦即连同子目录下的所有文件、目录都更新称为这个用户组之意,
常常用在修改某一目录内的所由文件之情况
要注意的是:要被修改的组名必须要在/etc/group文件中存在才行,否则会显示错误。
chown [-R] 帐号名称 文件或目录
chown [-R] 帐号名称:用户组名称 文件或目录
或者chown [-R] 帐号名称.用户组名称 文件或目录
选项与参数:
-R:进行递归(recurisive)修改,亦即连同子目录下的所有文件都修改。
要注意的是:
- 用户必须是已经存在系统中的帐号,也就是/etc/passwd这个文件中有记录的用户名称才能修改
- 同时修改所属用户和所属组时,所属用户和所属组之间可以用【.】也可以用【:】。不过很多人在设置帐号时,喜欢在帐号当中加入小数点(例如vbird.tsai这样的帐号格式),这就会造成系统的误判,所以比较件一使用【:】来隔开拥有者和用户组。
- 此外,chown也能单纯的修改所属用户组,例如【chown .student xjjfile 或者 chown :student xjjfile】就是修改u用户组。
环境准备:
(1)对文件来说
【1】、chown username file 更改文件的拥有者
【2】、chgrp groupname file 更改文件的所属组
【3】、chown username.groupname file 更改文件的拥有者及所属组
(2)对目录来说
【1】、chown username dir 更改目录本身的拥有者
【2】、chown -R username dir 更该目录本身及其内部的拥有者
【3】、chgrp groupname dir 更改目录本身的所属组
【4】、chgrp -R groupname dir 更改目录本身及其内部的所属组
【5】、chown username:groupname dir 更改目录本身的拥有者和所属组
【6】、chown -R username:groupname dir 更改目录本身及其内部的拥有者和所属组(-R表示递归)
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文件的拥有者增加可执行的权限
2、chmod g+w,o+x filename filename文件的所属组加上可写的权限,其他用户加上可执行的权限
3、chmod ugo-r filename filename文件的拥有者,所属组和其他用户,都去掉可读的权限
4、chmod a+r filename filename文件的拥有者,所属组和其他用户,都增加可读的权限
5、chmod g=rx,o=rw filename 设置filename的权限为:所属组具有可读可执行的权限,其他人具有可读可写的权限
【2】、对目录来说
1、chmod g+w dir dir目录的所属组加上可读的权限
2、chmod u-r,o+w dir dir目录的拥有者去掉可读的权限,其他人加上可写的权限
3、chmod ugo=rwx dir dir目录的拥有者,所属组,其他用户的权限都设置为rwx
4、chmod -R ugo=rwx dir dir目录本身及其内部的拥有者,所属组,其他用户的权限都设置为rwx
5、chmod -R a=rx dir 设置dir目录本身及其内部的所有者,所属组,其他人的权限为rx
(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
(2)对目录来说
1、chmod 666 dir 修改目录本身的权限为666
2、chmod -R 777 dir 修改目录本身及其内部的权限为777
这些文件权限对于一般文件与目录文件有何不同?有大大的不同,下面来具体讲解一般文件权限与目录文件权限的区别
权限对于文件来说,它的意义是这样的:
- r(read):可读取此文件的实际内容,如读取文本文件的文字内容等;
- w(write):可以编辑、新增或是修改该文件的内容(但不含删除该文件);
- x(execute):该文件具有可以被系统执行的权限。
至于w这个权限?当你对一个文件具有w权限时,你可以具有写入、编辑、新增、修改文件内容的权限,但不具备有删除该文件本身的权限。对于文件的rwx来说,主要是针对文件的内容而言,与文件名的存在与否没有关系,因为文件记录的是实际的数据嘛。
目录主要的内容在记录文件名列表,文件名与目录有强烈的关联。所以如果针对目录时,那么r、w、x对目录是什么意义呢?
- r(read):表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据,所以你就可以利用ls这个命令将该目录的内容列表显示出来。
- w(write):这个可写入的权限对目录来说,是很了不起的,因为它表示你具有改动该目录结构列表的权限,也就是下面这些权限:
- 建立新的文件与目录;
- 删除已经存在的文件或目录(不论该文件的权限是什么);
- 将已存在的文件或目录进行更名;
- 移动该目录内的文件、目录位置;
总之,目录的w权限就与该目录下面的文件名的变动有关。
- x(execute):目录的x代表的是用户能否进入该目录成为工作目录的用途,所谓的工作目录就是你目前所在的目录。
组件 | 内容 | 替代对象 | r | w | x |
文件 | 详细数据data | 文件夹 | 读到文件内容 | 修改文件内容 | 执行文件内容 |
目录 | 文件名 | 可分类抽屉 | 读到文件名 | 修改文件名 | 进入该目录的权限(key) |
【1】、练习题1
我们用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是Access Control List的英文缩写,中文译为访问控制列表,主要目的是提供传统的属主、所属群组、其他人的读、写、执行权限之外的详细权限设置。ACL可以针对单一用户、单一文件或目录进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助。
那ACL主要可以针对哪些方面来控制权限?它主要可以针对几个选项:
- 用户(user):可以针对用户来设置权限;
- 用户组(group):针对用户组为对象来设置权限;
- 默认属性(mask):还可以针对在该目录下建立新文件/目录时,规范新书局的默认权限。
事实上,原本ACL是UNIX-like操作系统的额外支持选项,但因为近年以来Linux系统对权限设置的热切需求,目前ACL几乎已经默认加入了所有常见的Linux文件系统的挂载参数中(ext2、ext3、ext4、xfs等)。所以你无须进行任何操作,ACL就可以被你使用。不过,如果你不确定系统是否真的支持ACL的话,那么就来检查一下内核挂载时显示的信息吧。
看,至少xfs已经支持这个ACL的功能。
- 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
值的一提的是:
- -x参数不能够取消有效权限的设置
- 取消某个帐号的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::---
从上面的结果,我们会发现两点:
- 使用-x参数取消某个帐号的ACL设置时,利用ll命令查看,+仍然存在,需要使用-b参数来关闭这个+;
- 对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
从上面的结果,我们会发现一点:
- 对于“使用默认权限设置目录未来文件的ACL权限继承”的ACL设置,在取消时,要取消的是该目录下的*,直接取消,无效。
1.
2.
3.
4.
5.