ACL 访问控制权限详解,setfacl,getfacl,setfacl -m,setfacl -d,setfacl -k,setfacl -x,mask等实操详解

文章目录

  • ACL (访问控制权限)
    • ACL 用途
  • ACL权限设置(setfacl getfacl)
    • 语法选项
    • setfacl -m
    • 设置组的acl权限
    • setfacl -d
    • setfacl -k
    • setfacl -x
    • setfacl -R
    • setfacl -b
  • Linux mask
    • mask 权限计算
    • mask设置
  • 总结

ACL (访问控制权限)

ACL 用途

1. 普通权限(回顾)
传统权限控制方式,是用 3 种身份(文件所有者,所属群组,其他用户),搭配 3 种权限(读 r,写 w,执行x)。
[root@zaishu~]# ls -l
total 36
drwxr-xr-x. 2 root root 4096 Apr 15 16:33 Desktop
drwxr-xr-x. 2 root root 4096 Apr 15 16:33 Documents

-rwxr-xr-x. 2 root root 4096 Apr 15 16:33 post-install

rwxr-xr-x 指明不同用户访问文件权限,即文件所有者拥有对文件的读、写、访问权限(rwx),文件所属群组拥有对文件的读、访问权限(r-x),其他用户拥有对文件的读、访问权限(r-x)。

2. 权限扩展的意义

但实际以上 3 种身份可能不够用,如下。

/project是班级项目目录。班级中学生可以访问和修改这个目录,老师有对该目录的最高权限,其他班级学生不允许访问这个目录。

则对应老师为这个目录的属主,权限为 rwx;班级学生为 class组,/project 目录属组为class,权限是 rwx;其他人没有权限。

来了试听的学员 shuge,它可以访问 /project 目录;需要授予r和x权限,shuge是属于其他人员,如果更改目录权限为r-x,则其它所有人都可以访问,不符合要求。

3. ACL概念

针对上面情况,普通权限的三种身份不够用,无法实现对某个单独的用户设定访问权限。 这个时候需要使用 ACL (访问控制权限)

ACL,是 Access Control List(访问控制列表)的缩写,ACL 可实现对单一用户设定访问文件的权限。直接对 shuge 用户设定访问文件的 r-x 权限。

4. 支持acl功能
CentOS 6/7 系统中,ACL 权限默认处于开启状态,无需手工开启。
Linux 系统如果没有默认挂载,可以执行如下命令实现手动挂载:
[root@zaishu ~]# mount -o remount,acl / //mount 命令重新挂载,并加入 ACL 权限。永久生效,需要修改 /etc/fstab 文件:
[root@zaishu ~]#vi /etc/fstab
UUID=5b69ece8-4e15-b8fe-68093d5462f2 /ext4 defaults,acl 1 1
#加入ACL权限
[root@zaishu ~]# mount -o remount /

ACL权限设置(setfacl getfacl)

常用命令有2 个分别是 setfacl 和 getfacl 命令,前者用于给指定文件或目录设定 ACL 权限,后者用于查看。

语法选项

getfacl 用于查看文件或目录当前ACL 权限信息::

[root@zaishu ~]# getfacl 文件名
getfacl 命令的使用非常简单,且常和 setfacl 命令一起搭配使用。

setfacl 对用户或群组指定文件的访问权限。

[root@zaishu ~]# setfacl 选项 文件名
选项 功能
-m 设定 ACL 权限。
设置用户 ACL 权限,参数使用 “u:用户名:权限” ,例如 setfacl -m u:shuge:rx /project 表示设定 shuge 用户对 project 目录具有 rx 权限;
设置组 ACL 权限,参数使用 “g:组名:权限” ,例如 setfacl -m g:class:rx /project 表示对组 class 对 project 目录具有 rx 权限。
-x 删除指定用户或组的 ACL 权限,例如 setfacl -x u:shuge /project 表示删除 shuge用户对 project 目录的 ACL 权限。
-b 删除所有的 ACL 权限,例如 setfacl -b /project 表示删除有关 project 目录上所有 ACL 权限。
-d 设定默认 ACL 权限,命令为 “setfacl -m d:u:用户名:权限 文件名”(如果是群组,则使用 d:g:群组名:权限),只对目录生效,指目录中新建立的文件拥有此默认权限,例如 setfacl -m d:u:shuge:rx /project 表示 shuge 用户对 project 目录中新建立的文件拥有 rx 权限。
-R 递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效,命令格式为 “setfacl -m u:用户名:权限 -R 文件名”(群组使用 g:群组名:权限),例如 setfacl -m u:shuge:rx -R /project 表示 shuge用户对已存在于 project 目录中的子文件和子目录拥有 rx 权限。
-k 删除默认 ACL 权限。

setfacl -m

用途: 用户或群组添加 ACL 权限

例如上图的需求,老师并作为 /project 的所有者,对 project 目录拥有 rwx 权限;
新建 class 群组,并作为 project 目录的所属组,本组成员拥有对 project 的 rwx 权限;
将其他用户访问 project 目录的权限设定为 0。
对于shuge来说,需要设定 ACL 权限,令该用户对 project 拥有 rx 权限。

具体的设置命令如下:

[root@zaishu ~]# useradd zhangsan
[root@zaishu ~]# useradd lisi
[root@zaishu ~]# useradd shuge
[root@zaishu ~]# groupadd class <-- 添加需要试验的用户和用户组,省略设定密码的过程
[root@zaishu ~]# mkdir /project <-- 建立需要分配权限的目录
[root@zaishu ~]# chown root:class /project <-- 改变/project目录的所有者和所属组
[root@zaishu ~]# chmod 770 /project  <-- 指定/project目录的权限
[root@zaishu ~]# ll -d /project
drwxrwx---. 2 root class 4096 Apr 16 12:55 /project

这时shuge学员来试听了,如何给她分配权限

[root@zaishu ~]# setfacl -m u:shuge:rx /project
#给用户st赋予r-x权限,使用"u:用户名:权限" 格式
[root@zaishu /]# cd /
[root@zaishu /]# ll -d /project
drwxrwx---+ 2 root class 4096 Apr 16 12:55 /project
#如果查询时会发现,在权限位后面多了一个"+",表示此目录拥有ACL权限
[root@zaishu /]# getfacl project
#查看/prpject目录的ACL权限
#file:project <--文件名
#owner:root <--文件的所有者
#group:class <--文件的所属组
user::rwx <--用户名栏是空的,说明是所有者的权限
user:class:r-x <--用户st的权限
group::rwx <--组名栏是空的,说明是所属组的权限
mask::rwx <--mask权限
other::--- <--其他人的权限

通过设定 ACL 权限,单独给 shuge 用户分配 r-x 权限,而无需给它设定任何身份。

设置组的acl权限

可以给用户组设定 ACL 权限:

[root@zaishu /]# groupadd class2
#添加新群组
[root@zaishu /]# setfacl -m g:class2:rwx project
#为组class2纷配ACL权限
[root@zaishu /]# ll -d project
drwxrwx---+ 2 root class 4096 1月19 04:21 project
#属组并没有更改
[root@zaishu /]# getfacl project
#file: project
#owner: root
#group: tgroup
user::rwx
user:shuge:r-x
group::rwx
group:clas2:rwx <-用户组class2拥有了rwx权限
mask::rwx
other::---

setfacl -d

设定默认 ACL 权限
1. 不设定默认值
当对project 目录设定了 ACL 权限,则如果在这个目录中的文件和子目录,这些文件是否会继承父目录的 ACL 权限呢?执行以下命令进行验证:

[root@zaishu /]# cd project
l[root@zaishu project]# touch abc
[root@zaishu project]# mkdir d1
#在/project目录中新建了abc文件和d1目录
[root@zaishu project]#ll
总用量4
这两个新建立的文件权限位后面并没有 "+",表示它们没有继承 ACL 权限。
[root@zaishu project]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 29 09:44 abc
drwxr-xr-x 2 root root 6 Nov 29 09:44 d1[root@zaishu project]# getfacl abc
# file: abc
# owner: root
# group: root
user::rw-
group::r--
other::r-

新建的子文件或子目录,并不会继承父目录的 ACL 权限。

2. 设定默认值
默认 ACL 权限的作用是,如果给父目录设定了ACL 权限,那么新建子文件都会继承父目录的 ACL 权限。

[root@zaishu project]# setfacl -m d:u:shuge:rx /project/
[root@zaishu project]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: class
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:shuge:r-x
default:group::r-x
default:mask::r-x
default:other::r-x

3. 验证新建文件
新建的abc2和d2已经继承了父目录的ACL权限

[root@zaishu project]# touch abc2
[root@zaishu project]# mkdir d2
[root@zaishu project]# ll
total 0
-rw-r--r--  1 root root 0 Nov 29 09:44 abc
-rw-r--r--+ 1 root root 0 Nov 29 09:56 abc2
drwxr-xr-x  2 root root 6 Nov 29 09:44 d1
drwxr-xr-x+ 2 root root 6 Nov 29 09:56 d2

setfacl -k

对目录设定默认的 ACL 权限使用 setfacl -k 命令删除。例如:

[root@zaishu project]# setfacl -k /project/
[root@zaishu project]# touch abc3
[root@zaishu project]# mkdir d3
新建的abc3和d3没有继承了父目录的ACL权限
[root@zaishu project]# ll
total 0
-rw-r--r--  1 root root 0 Nov 29 09:44 abc
-rw-r--r--+ 1 root root 0 Nov 29 09:56 abc2
-rw-r--r--  1 root root 0 Nov 29 09:58 abc3
drwxr-xr-x  2 root root 6 Nov 29 09:44 d1
drwxr-xr-x+ 2 root root 6 Nov 29 09:56 d2
drwxr-xr-x  2 root root 6 Nov 29 09:58 d3

setfacl -x

使用 setfacl -x 命令,删除指定的 ACL 权限

[root@zaishu project]# setfacl -x u:shuge /project
[root@zaishu project]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: class
user::rwx
group::r-x
other::r-x[root@zaishu project]# ll -d /project
drwxr-xr-x 5 root class 71 Nov 29 09:58 /project
acl权限已被删除

setfacl -R

设定递归 ACL 权限,父目录在设定 ACL 权限时,所有的子文件和子目录也会拥有相同的 ACL 权限。

[root@zaishu project]# setfacl -m u:shuge:rx -R /project
[root@zaishu project]# ll -d /project/
drwxr-xr-x+ 5 root class 71 Nov 29 09:58 /project/
[root@zaishu project]# ll
total 0
-rw-r-xr--+ 1 root root 0 Nov 29 09:44 abc
-rw-r-xr--+ 1 root root 0 Nov 29 09:56 abc2
-rw-r-xr--+ 1 root root 0 Nov 29 09:58 abc3
drwxr-xr-x+ 2 root root 6 Nov 29 09:44 d1
drwxr-xr-x+ 2 root root 6 Nov 29 09:56 d2
drwxr-xr-x+ 2 root root 6 Nov 29 09:58 d3

子目录也拥有了ACL权限

setfacl -b

删除指定文件的所有 ACL 权限

[root@zaishu project]# setfacl -b /project/
[root@zaishu project]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: class
user::rwx
group::r-x
other::r-x

所有ACL权限已被删除

Linux mask

mask 权限,指的是用户或群组拥有的最大 ACL 权限,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。

[root@zaishu project]# setfacl -m u:shuge:rx -R /project
[root@zaishu project]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: class
user::rwx
user:shuge:r-x
group::r-x
mask::r-x  //设置ACL后,这儿会多一栏mask
other::r-x

mask 权限计算

mask 权限是用户或群组能拥有的最大 ACL 权限,
举个例子,如果像上面命令,给 shuge用户赋予访问 project 目录的 r-x 权限,还需要和 mask 权限对比计算得到最终的权限。将两权限做“按位相与”运算,最终得出的值。
以读(r)权限为例,做相与操作的结果:

A B and
r r r
r - -
- r -
- - -

把 mask 权限改为 r–,再用户的权限 r-x 比对,按位相与运算用户最终只有 r 权限。

mask设置

使用 setfacl 命令,执行如下命令:

[root@zaishu project]# setfacl -m m:r /project/
[root@zaishu project]# getfacl /project/
getfacl: Removing leading '/' from absolute path names
# file: project/
# owner: root
# group: class
user::rwx
user:shuge:r-x          #effective:r--  //有效的acl权限为r--
group::r-x          #effective:r--
mask::r--
other::r-x

总结

ACL 访问控制权限详解,setfacl,getfacl,setfacl -m,setfacl -d,setfacl -k,setfacl -x,mask等实操讲解

21.ACL 访问控制权限详解,setfacl,getfacl,setfacl -m,setfacl -d,setfacl -k,setfacl -x,mask等实操详解相关推荐

  1. python三维图能画地图_Python地图绘制实操详解

    网上有很多地图绘制的教程,更多趋向于全国地图或者省级地图,但有时我们需要到县级.闲得慌,今天以贵州省毕节市为例,分享一篇Python县级地图的绘制(遥想当时差点把百度翻了个底朝天),希望对需要的你能有 ...

  2. K线图的看法实图详解

    K线图的看法实图详解 K线图最早是日本德川幕府时代大阪的米商用来记录当时一天.一周或一月中米价涨跌行情的图示法,后被引入股市. K线图有直观.立体感强.携带信息量大的特点,蕴涵着丰富的东方哲学思想,能 ...

  3. Nginx+Tomcat负载均衡和动静分离理论实操详解来袭!

    文章目录 一:关于动静分离和负载均衡介绍 1.1:Nginx+Tomcat的动静分离 1.2:Nginx+Tomcat的负载均衡 1.3:Nginx配置反向代理的主要参数 二:Nginx+Tomcat ...

  4. 【iVX 开发 - 入门】UI 组件介绍及实操详解

    本文导读 写在前面 iVX 各 UI 组件及属性面板详解 1. 图片组件 2. 图片序列组件 3. 文本组件 4. 输入框组件 5. 富文本/富文本编辑器组件 6. 地图组件 7. 二维码组件 写在前 ...

  5. 干货 | Elasticsearch7.X X-Pack基础安全实操详解

    1.调查:你的Elasticsearch怎么做的安全防护? 背景:大家知道elasticsearch早期版本安全部分收费(7.1 & 6.8 版本之前),实际中各个公司6.x,5.x,2.x, ...

  6. 月销售额224万美金的Shopify独立站卖家实操详解

    Hello 你好,我是项柚,花过1亿美金预算的独立站站长.选什么品和选哪个垂直细分领域切入是做独立站最让人头疼的两大问题,这篇文章,我就帮大家解决这两个问题.我们会按照顺序先讲如何选择垂直细分领域,再 ...

  7. Pytorch实现手写体识别(基于CNN卷积神经网络)实操详解(附完整代码free)

    手写体作为深度学习的"Hello world",几乎所有的课程都会讲到这个,今天带着大家一些看看吧. 如果对你有所帮助,点个赞给个小关注,以后一起交流学习. 前言 首先和大家讲讲我 ...

  8. gcc编程4步编译、调试c程序实操详解(Linux系统编程)

    gcc编译可以执行程序4步骤:预处理.编译.汇编.链接 一.知识储备(想看实战往下翻) 在linux程序种,c程序需要用gcc进行编译,链接用ld程序,ggc编译完成后可自动调用ld程序完成链接. 调 ...

  9. 全网流行的线性插画,深度实操详解,手残党也能玩!

    给大家上一个「复古扁平几何风」的才艺展示,这次我们再给大家来一个「粗描边线性插画」的才艺展示. 这种粗描边线性风格的插画,难度虽小但适用范围很广,最主要的是,没有手绘基础的同学,只要动动你的小鼠标,也 ...

最新文章

  1. OVS vswitchd启动(三十五)
  2. C++ Primer 5th笔记(chap 19 特殊工具与技术)将成员函数用作可调用对象
  3. 英伟达jetson tx1开发套件配置tensorflow
  4. Hadoop MapReduce实例:按手机上网总流量降序排序代码实现及结果演示
  5. python findall函数_Ramp;Python Data Science系列:数据处理(11)Python正则表达式re模块(三)...
  6. 年薪50W+!懂这个的程序员就这么豪横!
  7. 某省HW中遇到的提权
  8. REVERSE-PRACTICE-CTFSHOW-3
  9. 028-Dell服务器做Raid
  10. python创建txt文件并写入-python如何将数据写入本地txt文本文件
  11. linux 占用缓存前10_Linux查看内存使用情况应该使用什么命令
  12. 有负数c语言除法,C语言负数的除法和求余运算
  13. 初次尝试使用VisualSFM记录
  14. 华为5大设计师讲述HarmonyOS UX设计背后的故事
  15. ICP许可证的作用是什么?ICP许可证可以转让吗?
  16. 大学计算机基础贾宗璞答案,大学计算机应用基础C教学大纲
  17. Windows下如何批量重命名
  18. Android开发——新建库、删除库
  19. 国外十几种国外撸美金项目适合小白们
  20. Basler相机调用及图像存储

热门文章

  1. Python 期末总结
  2. ORACLE 通过数据值查找找表名和字段名
  3. Blue Perfection
  4. php strtotime(-1 month) 得到不是上月1号数据
  5. python--pprint库
  6. java 繁体转简体_java代码实现简体繁体转换
  7. nginx实现数据库端口转发
  8. mac系统上查看mysql数据库端口号及解决端口号为0问题
  9. 什么是欠拟合现象_在模型评估过程中,过拟合和欠拟合具体指什么现象
  10. 微信小程序列表开发-个人中心界面(一)