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

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. [CortexM0--stm32f0308]Option Byte

    问题描写叙述 option byte,算是IC中比較简单的功能,就是用户能够写入数据,对IC的某些功能进行配置.而IC在reset时,会载入当中的内容,进行推断,从而使用户的配置生效. option ...

  2. JavaScript学习笔记八

    本文依据慕课网课程<JavaScript进阶>学习整理 第8章 浏览器对象 8-1 window对象   window对象是BOM的核心.window对象指当前的浏览器窗体.   wind ...

  3. [Angular] Organizing Your Exports with Barrels

    From: import {LoadUserThreadsEffectService} from "./store/effects/load-user-threads.service&quo ...

  4. phpstorm常用快捷键有哪些(图解归类)

    phpstorm常用快捷键有哪些(图解归类) 一.总结 一句话总结: 10.方法参数提示,显示默认参数   解答:--------CTRL+P 13.显示类层级关系图,继承/实现关系   解答:--- ...

  5. Max-Min Fairness带宽分配算法

    近期再写一个网络仿真器,里面參考了Max-MinFairness算法,这是一种比較理想.公平的带宽分配算法.其思路主要例如以下:首先是算法的准备,考察某一时刻的网络中全部的flow,因为每条flow都 ...

  6. JavaScript创建日志文件并记录时间的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 try { var WSShell = WScript.CreateObject("WScript.Shel ...

  7. idhttp post 出现exception class EIdSocketError with message 'Socket Error # 10054的解决办法(捕捉异常,防止程序挂掉)

    由于项目需要.需要向一个地址提交数据.提交的次数很频繁,但是程序经常raised exception class EIdSocketError with message 'Socket Error # ...

  8. Linux 网络编程——TCP

    环境:Linux  C   一.协议介绍      TCP是面向连接的协议,提供可靠的数据传输:TCP协议的可靠传输基于三次握手.四次挥手以及确认重传机制实现.下面来具体展示下TCP的三次握手.四次挥 ...

  9. 从Client应用场景介绍IdentityServer4(三)

    原文:从Client应用场景介绍IdentityServer4(三) 在学习其他应用场景前,需要了解几个客户端的授权模式.首先了解下本节使用的几个名词 Resource Owner:资源拥有者,文中称 ...

  10. 【oracle ocp 知识点二】

    1.数据库操作语言 DML在运行时下面的语句 添加一个新行到表 更新表现出一定的线 从表删除现有行 一个事务处理是由一系列的DML语句逻辑组成 A.insert 每次插入一行数据 字符和日期的须要单引 ...