某些系统账号希望对某一些文件有管理权限,有三种方法:

1 加入属主所在的同一个组中,这等于扩大了访问其他文件的权限了。

2 加入other中,这样权限放开的更大了。

3 给文件的sudo权限。

4 采用acl策略。

前三种方法都有自己的缺点,最终考虑使用acl。

所谓ACL,就是Access Control List,一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。此功能

需要内核的支持,在linux 2.6以后默认加入内核中。

acl由一系列的访问控制权限组成,主要的有如下:

ACL_USER_OBJ: 相当于Linux里file_owner的权限

ACL_USER: 定义了额外的用户可以对此文件拥有的权限

ACL_GROUP_OBJ: 相当于Linux里group的权限

ACL_GROUP: 定义了额外的组可以对此文件拥有的权限

ACL_MASK: 定义了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大权限

ACL_OTHER: 相当于Linux里other的权限

安装acl

apt-get install acl

重新挂载分区

mount -o remount,rw,acl /dev/sda3

分区在不支持acl的情况下getfacl可以工作,但是setfacl不能够工作的。

下图所示默认的acl规则

#注释表明了文件的默认用户和所属组

user::rw- 定义了ACL_USER_OBJ, 说明root拥有读和写的权限

group::--- 定义了ACL_GROUP_OBJ,说明任何人都没有权限

other::--- 定义了ACL_OTHER,说明任何人都没有权限

在设置acl规则前我们先了解一下设置acl常用的选项:

-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

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

-P,--physical

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

-m -x -M -X

-m -x 是在设置acl所需要定义的选项,-m 表示设置acl ,-x 表示删除acl规则

-M -X 则可以在文件中读入acl规则,使相应的规则生效

用cp来复制文件的时候我们现在可以加上-p选项.这样在拷贝文件的时候也将拷贝文件的ACL属性.对于不能拷贝的ACL属

性将给出警告

mv命令将会默认地移动文件的ACL属性. 同样如果操作不允许的情况下会给出警告

开始设置规则:

用test用户访问perl.pl文件,显示如下:

设置acl规则

这时候我们会看到在权限位后面多了一个+号,这个符号提示我们此文件使用了acl,而且你还会看到在ls -l 的输出中

perl.pl的组权限变成read了,在acl的mask不存在的情况下,权限位的第二组才表示组的权限,如果acl中存在mask,则第二

组权限位代表mask值,mask规定了ACL_USER, ACL_GROUP和ACL_GROUP_OBJ的最大值,在设置的权限相冲突的情况下以

设置的mask为主。

可以看到test用户可以访问perl.pl文件了。

删除设置的acl

可以看到acl规则已经删除,怎么在权限位的后面还有一个加号呢,要完全删除需要使用-b参数

还可以设置默认的acl规则,如希望在某个目录下的新建文件都使用同一个acl规则,则可以对某个目录设置默认acl规则

使其新建文件都采用默认acl规则

在目录中建好文件后发现出现了#effective,ACL_MASK的定义. 它规定了ACL_USER(其他用户), ACL_GROUP_OBJ(组权限)和ACL_GROUP(其他组的权限)的最大权限,所以test组真正的权限是rw,怎么改变mask值呢?

也可以从文件中恢复文件原有的acl规则,如下:先保存规则到一个文件中

开始删除规则

开始恢复规则

以上只是简单的一些用法,更多用法参考man

https://my.oschina.net/guol/blog/37808

Linux ACL对某一些文件有管理权限的更多相关文章

  1. Linux下遍历目录及文件,更改权限

    Linux下遍历目录及文件,更改权限 引言: 我在Linux下搭建android时,将eclipse及sdk复制到/usr/下时,总会出现无法读,无法写写样的问题. 解决方案: 有两个方案: 一.将复 ...

  2. Security基础(一):Linux基本防护措施、使用sudo分配管理权限、提高SSH服务安全

    一.Linux基本防护措施 目标: 本案例要求练习Linux系统的基本防护措施,完成以下任务: 修改用户zhangsan的账号属性,设置为2015-12-31日失效(禁止登录) 锁定用户lisi的账户 ...

  3. 如何设置UNIX/Linux中新创建目录或文件的默认权限

    在unix或者linux中,每创建一个文件或者目录时,这个文件或者目录都具有一个默认的权限,比如目录755,文件644,那么这些默认权限是怎么控制的呢? 答案是"umask"权限掩 ...

  4. Linux系统下进入目录文件需要什么权限?

    在Linux下进入目录需要什么权限? 1--让我们先来了解一下Linux下一个文件有哪些权限?(在linux下一切皆文件) 一个文件可以具有的权限有:可读.可写.可执行权限 r 可读权限---read ...

  5. Linux—用户新建目录和文件的默认权限设置:umask详解

    关注微信公众号:CodingTechWork,一起学习进步. 引言   我们有没有思考过一个问题,在登录Linux系统后,我们创建的目录或者文件的权限,为什么每次创建都是统一的?我们做以下实验:新建一 ...

  6. Linux学习笔记 -- 目录与文件的管理

    目录结构 Linux的目录结构为树状结构,最顶级的目录为根目录 “/”. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什么是. 绝对路径与相对路径 绝 ...

  7. Linux 设置新创建目录或文件的默认权限

    一.简介 在unix或者linux中,每创建一个文件或者目录时,这个文件或者目录都具有一个默认的权限,比如目录755,文件644,这些默认权限是通过"umask"权限掩码控制的.一 ...

  8. linux系统常用命令 -设置文件夹读写权限

    设置文件夹的读写权限: sudo chmod -R 777 /data 权限码描述 sudo chmod 600 ××× (只有所有者有读和写的权限)sudo chmod 644 ××× (所有者有读 ...

  9. Linux系统管理第三次作业 账号管理 权限及归属管理

    1.创建/guanli 目录,在/guanli下创建zonghe 和 jishu 两个目录(一条命令) [root@localhost ~]# mkdir /guanli [root@localhos ...

随机推荐

  1. C#基础readonly 与const

    readonly 与 const readonly是运行时常量,const是编译期常量(在编译过程中已经把使用该值的都用值替代,不分配内存)readonly灵活性高,const效率高 readonly ...

  2. C# Tuple VS ValueTuple

    C# Tuple VS ValueTuple(元组类 VS 值元组) C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple.这里利用详尽的例子详解Tuple VS ...

  3. 【codeforces 782D】 Innokenty and a Football League

    [题目链接]:http://codeforces.com/contest/782 [题意] 每个队名有两种选择, 然后第一个选择队名相同的那些队只能选第二种; 让你安排队名 [题解] 首先全都选成第一 ...

  4. 【codeforces 779A】Pupils Redistribution

    [题目链接]:http://codeforces.com/contest/779/problem/A [题意] 让你把两个组的5个人的数目都变成一样的. 支持交换操作; 问你最少需要交换几次. [题解 ...

  5. RedisMQ

    RedisMQ 本次和大家分享的是RedisMQ队列的用法,前两篇文章队列工厂之(MSMQ)和队列工厂之RabbitMQ分别简单介绍对应队列环境的搭建和常用方法的使用,加上本篇分享的RedisMQ那么 ...

  6. 解决android模拟器无法上网问题

    1.  将 android的tool增加到,windows 环境变量 path中, D:\Android\android-sdk_r3-windows\android-sdk-windows\tool ...

  7. kill the lock

    $ killall -s 9 krunner_lock [ZT][From:] http://www.commandlinefu.com/commands/view/2264/unlock-your- ...

  8. 记一次由于缓存导致的bug

    bug描述 有一张数据库表存储的是 值日员工信息,有时候可能一次性录入1个月的数据.有时候也可能隔了很多天没有录入数据,也就是说这个录数据不是很规律. bug现象:测试人员发现,网站上三亚地区能正常显 ...

  9. 5 wcf双工

    1 创建两个项目 Wcf_WsDual_Service   Wcf_WsDual_Client 2 Wcf_WsDual_Service   项目中创建 LoginService.cs 的wcf文件 ...

  10. ValueStack和OGNL达到Struts2形式的数据存储原理

    (1)最近学习struts相框,我们在快乐struts强大.为了便于使用转发,但不了解详细的内部数据存储: (2)网上找了很多关于struts数据存储的原理,但我还没有找到一个具体的解释,本书上找到了 ...