转自:http://www.2cto.com/os/201110/108736.html

引言

前面的内容中,我们讲到传统的权限仅有三种身份(owner,group,others)搭配三种权限(r,w,x)以及三种特殊的权限(SUID,SGID,SBIT),随着应用的发展,这些权限组合已不能适应现在复杂的文件系统权限控制要求。

例如,目录data的权限为:drwxr-x—,所有者与所属组均为root,在不改变所有者和所属组的前提下,要求用户yufei对该目录有完全访问权限(rwx),但又不能让其他有用完全权限(rwx)。这个要求看似不能实现,这就看出来传统的权限管理设置有时候也会力不从心。为了解决这样的问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问控制列表ACL(Access Control Lists)。这时候,我们就可能通过ACL来实现。

什么是ACL

ACL是Access Control List的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的局部权限设定。ACL可以针对单个用户,单个文件或目录来进行r,w,x的权限设定,特别适用于需要特殊权限的使用情况。

ACL主要针对用户(user)、用户组(group)、以及掩码(mask)方面来控制权限。

简单地来说,ACL就是可以设置特定用户或用户组对于一个文件/目录的操作权限。

而在windows系统上,没有这个ACL,ACL是类Unix(Unix-like)操作系统权限的额外支持项目,因此要使用ACL必须要有文件系统的支持才行。主要包括ReiserFS, EXT2/EXT3/ext4, JFS, XFS等文件系统。

查看系统是否支持ACL

要查看你的系统是不是支持ACL,我们可以通过下面的方法来查看。

[root@yufei ~]# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1             15118728   2442140  11908588  18% /

[root@yufei ~]# dumpe2fs /dev/sda1 |grep acl

dumpe2fs 1.41.12 (17-May-2010)+`-

Default mount options:    user_xattr acl

我们看到,默认的挂载选项就已经有了ACL了,如果你的系统挂载时候没有这个选项,你可以通过

mount -o remount,acl /dev/sda1

来重新挂载。你也可以把这个挂载选项加入到开机启动,也就是写入到/etc/fatab文件里面。

ACL权限的查看与设置(getfacl, setfacl)

知道了ACL的意义了,也知道了系统是否支持ACL,那么下面就是如何来设定/使用这个ACL呢?

getfacl:查看文件/目录的ACL设定内容

setfacl:设置文件/目录的ACL内容

相关参数说明

先来看看setfacl这个命令的相关参数说明

语法:setfacl [-bkRd] [{-m|-x} acl参数] 文件名

-m :设置后续的acl参数

-x :删除后续的acl参数

-b :删除所有的ACL设定参数

-R :递归设置acl参数

-d :设置预设的acl参数(只对目录有效,在该目录新建的文件也会使用此ACL默认值)

-k :删除预设的ACL参数

设置格式如下

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

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

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

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

以上的参数和设置格式说明,可以在MAN中查看到

针对其他人的ACL设置

下面我们就用例子来演示一下ACL的设置与查看

我们在/root目录下进行操作

先查看install.log文件的ACL设置值是什么

[root@yufei ~]# getfacl install.log

# file: install.log

# owner: root

# group: yufei

user::rwx

group::r–

other::r–

[root@yufei ~]# ls -l install.log

-rwxr–r–. 1 root yufei 31537 Jan 20 05:09 install.log

我想通过上面的对比,大家应该能看明白getfacl所显示出来的内容吧!OK,这里我就不多说了,下面我们来看看给这个文件设置ACL值后的效果。

[root@yufei ~]# setfacl -m o:rwx install.log

[root@yufei ~]# getfacl install.log

# file: install.log

# owner: root

# group: yufei

user::rwx

group::r–

other::rwx

[root@yufei ~]# ls -l install.log

-rwxr–rwx. 1 root yufei 31537 Jan 20 05:09 install.log

这时候,我对other赋予了rwx权限了,我们切换到其他用户,就可以对此文件进行写操作了。大家可能也发现了,通过setfacl设置的other权限,和通过chmod设置的效果是一样的。没错,是这样的。

针对用户的ACL设置

把install.log拷贝到根目录,

[root@yufei ~]# cp install.log /

[root@yufei ~]# ls -l /install.log

-rwxr-xr– 1 root root 31537 Feb  9 16:27 /install.log

我们通过ACL给yufei用户赋予rwx权限

[root@yufei ~]# setfacl -m u:yufei:rwx /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

user:yufei:rwx

group::r-x

mask::rwx

other::r–

[root@yufei ~]# ls -l /install.log

-rwxrwxr–+ 1 root root 31537 Feb  9 16:27 /install.log

这时候,通过ls -l查看的文件权限后面多了一个“+”号,这就表示了文件存在ACL权限。我们切换到yufei用户,来对此文件进行一下编辑操作是完全没有问题,这里面就不演示了,自己动手吧。

注:

1、上面的用户可以换成用户列表,中间用英文的“,”分隔就OK了。

2、针对用户组的ACL设置与用户的设置差不多,这里就不演示了。

删除ACL的设置

要是删除我们设置的ACL权限的话,要怎么做呢?有两种方法

1、用-x删除后面接着的ACL权限

[root@yufei ~]# setfacl -x u:yufei /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

group::r-x

mask::r-x

other::r–

这时候发现还有个mask的权限没有去掉,

[root@yufei ~]# setfacl -x m:: /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

group::r-x

other::r–

经过了上面的操作才算把权限还原了,实在有点不方便,而且在使用-x的时候,不能单独删除某个权限。否则会出现错误提示。如setfacl -x u:yufei:rwx /install.log,这们的命令是不可以的,不知道是我哪里用错了,还是这个命令就是这样。还是用下面这种方法来提直接。

2、用-b删除所有的ACL权限

[root@yufei ~]# setfacl -m u:yufei:rwx /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

user:yufei:rwx

group::r-x

mask::rwx

other::r–

[root@yufei ~]# setfacl -b /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

group::r-x

other::r–

这个-b参数,一次性把所有的ACL权限全部清空,还原成文件的原来权限。我推荐大家用这个参数。

ACL的mask设置

关于group的设置与user的设置类似,这里也就不做演示了,下面我们来看看mask,他的作用就是让用户/组对某个文件只有某些权限。mask只对其他用户和组的权限有影响,而对owner和other的权限是没有任何影响的。我们还是以/install.log为例来实验。

[root@yufei ~]# ls -l /install.log

-rwxr-xr– 1 root root 31537 Feb  9 17:03 /install.log

[root@yufei ~]# setfacl -m u:yufei:rwx /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

user:yufei:rwx

group::r-x

mask::rwx

other::r–

这时候我们看到mask::rwx是全部的权限,所以,切换到yufei这个帐户的时候,可能对/install.log文件进行写操作的。下面我们让yufei用户对其只有读取的权限。

[root@yufei ~]# setfacl -m m::r /install.log

[root@yufei ~]# getfacl /install.log

getfacl: Removing leading ‘/’ from absolute path names

# file: install.log

# owner: root

# group: root

user::rwx

user:yufei:rwx            #effective:r–

group::r-x            #effective:r–

mask::r–

other::r–

我们可以看到,user:yufei:rwx的后面多了一个提示#effective:r–,也就是说,现在yufei用户只拥有r权限了。切换到yufei用户对/install.log文件进行一下写操作,会有“–INSERT —W10: Warning: Changing a readonly file ”这样的提示。

关于-d参数的作用我这里就不赘述了,用法是一样的,只是他是针对目录而已,同时也会对里面后加的文件起作用而已,而-R是我们一直在用的参数,一个递归处理的效果,很多地方都会用到些参数

[转]Linux之ACL权限的更多相关文章

  1. <实训|第十三天>linux中ACL权限控制以及磁盘配额,附编译属于自己的linux内核

    [root@localhost~]#序言 首先讲讲昨天关于缩容失败,开不机的解决方法:ACL权限也算是一个很重要的知识点,不难,但是很实用:磁盘配额一般不需要自己弄,但是要懂得原理.剩下的就是编译属于 ...

  2. linux:ACL权限

    ACL权限是为了防止权限不够用的情况,一般的权限有所有者.所属组.其他人这三种,当这三种满足不了我们的需求的时候就可以使用ACL权限: 比如:一个网络老师,给一个班的学员上课,他在linux的根目录下 ...

  3. Linux下ACL权限控制以及用sudo设置用户对命令的执行权限

    ACL权限分配 1.setfacl命令设置文件权限 setfacl -m u:user1:rw root.txt setfacl -m u:user2:rwx root.txt 2.getfacl命令 ...

  4. Linux - 文件ACL权限控制

    getfacl 1.test # 查看文件ACL权限 setfacl -R -m u:xuesong:rw- 1.test # 对文件增加用户的读写权限 -R 递归

  5. Linux系统——ACL权限控制及特殊权限

    ACL权限控制 ACL(access control list),可以提供除属主.属组.其他人的rwx权限之外的细节权限设定 ACL的权限控制 (1)User 使用者 (2)Group 群组 (3)M ...

  6. Linux 递归acl权限和默认acl权限

    递归acl权限 递归acl指给父目录设定acl时,所有的子文件和子目录都拥有相同的acl权限 setfacl -m u:boduo:rx -R /project/ 默认acl权限 默认acl权限的作用 ...

  7. Linux学习 - ACL权限

    一.ACL权限简介 ACL权限是为了防止权限不够用的情况,一般的权限有所有者.所属组.其他人这三种,当这三种满足不了我们的需求的时候就可以使用ACL权限 二.ACL权限开启 1 查看当前系统分区 df ...

  8. Linux学习之ACL权限详解(十)

    Linux系统ACL权限详解 目录 ACL权限简介与开启 查看与设定ACL权限 最大有效权限与删除ACL权限 默认ACL权限和递归ACL权限 ACL权限简介与开启权限 ACL权限简介 用户权限管理始终 ...

  9. Linux权限管理 ACL权限

    ACL权限简介 在普通权限中,用户对文件只有三种身份ugo,分别为属主(u).属组(g)和其他人(o):每种用户身份拥有读(read).写(write)和执行(execute)三种权限.但是在实际工作 ...

随机推荐

  1. 3.1.1 简单的 grep

        grep 最简单的用法就是使用固定字符串:           [many@avention Desktop]$ who         many     :0           2019- ...

  2. 利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题

    async await 解决异步问题,这两个关键字是es7提出的,所以测试,node和浏览器版本提高一些 async await 操作基于promise实现的 async await这两个关键字是一起 ...

  3. M - Help Jimmy DP

    "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某 ...

  4. [poj1678]I Love this Game!_博弈论

    I Love this Game! 题目大意:题目链接 注释:略. 想法: 开始的时候以为没法dp,结果...:a>0啊! 所以可以直接dp了啊! 状态:dp[i]表示先手选了a[i]的状态. ...

  5. BP神经网络及其在教学质量评价中 的应用

    本文学习笔记是自己的理解,如有错误的地方,请大家指正批评.共同进步.谢谢! 之前的教学质量评价,仅仅是通过对教学指标的简单处理.如求平均值或人为的给出各指标的权值来加权求和,其评价结果带有非常大主观性 ...

  6. 如何让图片开口说话 3DMeNow教程

    菜鸟玩3D--3DmeNow初级教程 3D软件对于我们这些菜鸟来说,一直是可望而不可及的一种东西,深奥的3D建模,复杂的面板操作--都使我们对之望而却步,有没有一种很简单的3D造型软件,使我们这些菜鸟 ...

  7. STM32跑马灯

    #include "stm32f10x.h" #include "led.h" #include "delay.h" #include &q ...

  8. zoj 1610 Count the Colors 【区间覆盖 求染色段】

    Count the Colors Time Limit: 2 Seconds      Memory Limit: 65536 KB Painting some colored segments on ...

  9. shell学习三十七天----引用

    引用 案例,假设我想输出一个星号(*),使用echo怎样做? echo * 这是肯定不行的,须要将*转移,即:echo \* 这样就引出了引用的概念.所为引用,是用来防止shell将某些你想要的东西解 ...

  10. 继承自TWinControl的控件不能在设计期间接受子控件,用代码设置子控件却可以(它的自绘是直接改写PaintWindow虚函数,而不是覆盖Paint函数——对TWinControl.WMPaint又有新解了)

    这个控件直接继承自TWinControl,因此不是改写Paint;函数,而是直接改写PaintWindow虚函数,它在VCL框架里被直接调用,直接就把自己画好了(不用走给控件Perform(WM_Pa ...