首页 > 系统相关 >Linux ACL 权限的全部内容

Linux ACL 权限的全部内容

时间:2024-01-10 14:02:33浏览次数:33  
标签:aclfile 全部内容 setfacl tester ACL Linux 权限 目录

检查是否支持ACL

ACL需要Linux内核和文件系统的配合才能工作,当前我们能见到的大多数Linux发行版本默认都是支持的。但最好还是能够先检查一下:

sudo tune2fs -l /dev/sda1 |grep "Default mount options:"

Default mount options:                 user_xattr    acl

我们能够看到默认情况下(Default mount options:)已经加入 acl 支持了。

如何设置ACL

我们可以使用setfacl和getfacl命令来设置或观察文件/目录的acl权限。

setfacl

参数不多,直接列出来了:

Linux ACL 权限的全部内容_访问权限

getfacl

getfacl 文件/目录名

下面我们通过一些示例来演示 ACL 权限的基本用法。

针对用户来设置权限

笔者系统中的当前用户是 nick,再创建两个用户 tester 和 tester1 用来进行测试:

$ sudo adduser tester

$ sudo adduser tester1

创建文件 aclfile,检查其默认的权限信息:

Linux ACL 权限的全部内容_创建文件_02

把用户切换为 tester,发现没有写文件的权限:

Linux ACL 权限的全部内容_子目录_03

这是因为 other 没有写 aclfile 文件的权限。

下面我们为 tester 用户赋予读写 aclfile 文件的权限:

$ setfacl -m u:tester:rw aclfile

修改成功后再次以 tester 用户的身份向 aclfile 文件写入数据,这次已经可以正常写入了。查看 aclfile 文件的权限:

$ ll aclfile

Linux ACL 权限的全部内容_创建文件_04

貌似并没有发生什么变化,只是在描述权限的地方多出了一个 “+” 号。下面再看看 acl 权限:

$ getfacl aclfile

Linux ACL 权限的全部内容_子目录_05

多出了一些信息,其中比较重要的是 user:tester:rw-,就是它让用户 tester 具有了读写 aclfile 的权限。

针对用户组来设置权限

和针对用户的设置几乎一样,只是把小写的 u 换成小写的 g 就行了。

子文件/目录继承父目录的权限

这是一个很棒的例子,它能让我们创建的子文件或者子文件夹继承父文件夹的权限设置!

$ mkdir mydir

$ ll -d mydir

$ setfacl -m d:u:tester:rwx mydir

$ getfacl mydir

注意参数 d 在这里起到了决定性的作用。下面是设置后的 mydir 目录的权限属性:

Linux ACL 权限的全部内容_访问权限_06

这次多出了一些以 default 开头的行,这些 default 权限信息只能在目录上设置,然后会被目录中创建的文件和目录继承。下面分别在 mydir 目录下创建文件 testfile 和目录 testdir,并查看它们的 acl 权限:

$ touch testfile

$ mkdir testdir

$ getfacl testfile

$ getfacl testdir

Linux ACL 权限的全部内容_子目录_07

从上图可以看到文件 testfile 继承了父目录的 acl 权限,因此用户 tester 对它有读写权限。下面再看看 testdir 目录:

Linux ACL 权限的全部内容_子目录_08

从图中可以看出,testdir 目录不仅继承了 tester 的访问权限,还继承了父目录上的 default 权限。也就是说我们通过这种方式设置在目录上的权限可以被子目录递归的继承下去。

更改 ACL 权限

-m 选项其实是在更改文件和目录的 ACL 权限

当一个用户或组的 ACL 权限不存在时,-m 选项执行的是添加操作,

如果一个用户或组的 ACL 权限已经存在时,-m 选项执行的是更新操作。

我们重新创建一个 aclfile 文件,通过下面的命令设置 tester 用户对它的访问权限:

$ setfacl -m u:tester:rwx aclfile

Linux ACL 权限的全部内容_创建文件_09

这时 -m 选项是在添加 ACL 权限。然后我们修改 tester 用户的权限,移除其对 aclfile 的执行权限:

$ setfacl -m u:tester:rw aclfile

Linux ACL 权限的全部内容_子目录_10

这时 -m 选项是在更改现有的 ACL 权限。接下来再让我们试一下为不同的用户或组设置 ACL 权限:

$ setfacl -m g:tester1:rwx aclfile

Linux ACL 权限的全部内容_创建文件_11

这次是新添加了 group tester1 的权限,并且没有影响 tester 用户的权限。

–set 选项会先清除掉原有的 ACL 权限,然后添加新的权限

我们接着设置 aclfile 文件的 ACL 权限:

$ setfacl --set u::rw,u:tester2:rwx,g::r,o::- aclfile

Linux ACL 权限的全部内容_创建文件_12

需要注意的是一定要包含 UGO 权限的设置,不能象 -m 一样只包含 ACL 权限。o::- 是另一个需要注意的地方,其完整的写法是 other::-,就像 u::rw 的完整写法是 user::rw- 一样。通常我们可以把 “-” 省略,但是当权限位只包含 “-” 时,就至少要保留一个。如果写成了o::,就会报错。

删除 ACL 权限

有添加就有删除,我们可以通过 setfacl 命令的 -x 选项来删除指定用户或组的 ACL 权限,还可以通过 -b 选项来清除文件和目录上所有的 ACL 权限。

我们创建一个新的测试文件 aclfile,并设置下面的 ACL 权限:

$ setfacl -m u:tester:rwx,u:tester1:rw,g:tester2:rwx aclfile

下面通过 -x 选项删除 group tester2 的 ACL 权限(注意命令中只指定了组的名称而没有指定权限信息):

$ setfacl -x g:tester2 aclfile

查看一下结果,发现下图中已经没有 group:tester2 的权限信息了:

Linux ACL 权限的全部内容_子目录_13

下面通过 -b 选项一次性删除 aclfile 上所有的 ACL 权限:

$ setfacl -b aclfile

Linux ACL 权限的全部内容_创建文件_14

-b 选项直接清除了文件上的所有 ACL 权限。这个行为对于目录来说也是一样的,这里就不再演示了。

备份和恢复 ACL 权限

常见的文件操作命令 cp 和 mv 等都支持 ACL 权限,只是 cp 命令需要加上 -p 参数。但是 tar 等常见的备份工具不会保留目录和文件的 ACL 权限信息。如果希望备份和恢复带有 ACL 权限的文件和目录,可以先把 ACL 权限信息备份到一个文件里,然后再用 -restore 选项来恢复这些信息。下面演示 ACL 权限的保存和恢复。我们先创建下面的目录结构:

Linux ACL 权限的全部内容_创建文件_15

并分别为 acldir 目录和 aclfile 文件设置 ACL 权限:

Linux ACL 权限的全部内容_子目录_16

然后使用下面的命令导出 acldir 目录的 ACL 权限信息并保存到文件 acldir.acl 文件中:

$ getfacl -R acldir > acldir.acl

接下来删除掉 acldir 目录的 ACL 权限:

$ setfacl -R -b acldir

Linux ACL 权限的全部内容_创建文件_17

现在 acldir 目录及其子文件上的 ACL 权限都被删除掉了。最后我们再通过下面的命令把它们的 ACL 权限都恢复回来:

$ setfacl --restore acldir.acl

Linux ACL 权限的全部内容_子目录_18

之前删除的 ACL 权限全都恢复回来了!

标签:aclfile,全部内容,setfacl,tester,ACL,Linux,权限,目录
From: https://blog.51cto.com/u_16077267/9179405

相关文章

  • ubuntu安装mysql8,debian安装mysql8,linux安装mysql8,x86_64架构,deb包
    作者主页:https://www.cnblogs.com/milkbox参考:修改大小写:MySQL8.0安装后更改不区分大小写!包你必生效!_mysql8.0不区分大小写-CSDN博客整个安装过程建议在root权限下进行。需要网络来下载相关依赖,如果你的系统已经存在相关以来,那么就可以离线安装。下载与解压去官网下载mys......
  • 在Linux中使用Apache HTTP服务器
    ApacheHTTP服务器,也被称为Apache,是全球使用最广泛的Web服务器软件之一。它以其稳定性、强大的功能和灵活性而闻名,尤其在Linux操作系统上表现得尤为出色。以下是关于如何在Linux中使用ApacheHTTP服务器的详细指南。1.安装Apache首先,你需要安装Apache。在大多数Linux发行版中,可以......
  • 在Linux中处理HTTPS请求
    随着互联网的发展,数据传输的安全性变得越来越重要。HTTPS,全称为安全超文本传输协议(HypertextTransferProtocolSecure),是互联网上应用最广泛的安全传输协议。在Linux系统中处理HTTPS请求,通常涉及到配置Web服务器软件(如Apache或Nginx)来支持SSL/TLS加密。1.安装和配置Web服务器软件......
  • 使用Linux防火墙管理HTTP流量
    在Linux系统中,防火墙是用于控制网络流量的重要工具。通过防火墙,你可以根据需要限制、过滤或允许特定的网络流量,从而提高系统的安全性。在处理HTTP流量时,防火墙可以帮助你实施访问控制、流量监控和其他安全策略。iptablesiptables是Linux中最常用的防火墙工具之一。它允许用户定义一......
  • 使用cURL命令在Linux中测试HTTP服务器的性能
    cURL是一个强大的命令行工具,用于从或向服务器传输数据。它支持多种协议,包括HTTP、HTTPS、FTP等。在Linux系统中,cURL可以用于测试和评估HTTP服务器的性能。下面是一些使用cURL命令测试HTTP服务器性能的示例和说明。1.基本请求要向指定的URL发送基本的GET请求,你可以使用以下命令:bash......
  • 在Linux中使用HTTP客户端库进行网络编程
    在Linux环境中进行网络编程时,使用HTTP客户端库可以大大简化开发过程。这些库提供了丰富的功能和工具,使开发者能够轻松地发送和接收HTTP请求。以下是使用HTTP客户端库进行网络编程的一些关键步骤和要点。选择合适的HTTP客户端库在Linux上有多个流行的HTTP客户端库可供选择,如libcurl......
  • 中间件 ZK分布式专题与Dubbo微服务入门 4-8 权限acl详解,acl的构成-scheme与id
    0课程地址https://coding.imooc.com/lesson/201.html#mid=12704 1重点关注1.1权限的构成权限字符串缩写crdwaCREATE:创建子节点READ:获取节点/子节点WRITE:设置节点数据 DELETE:删除子节点ADMIN:设置权限  2课程内容  ......
  • 中间件 ZK分布式专题与Dubbo微服务入门 4-9 acl的构成-permissions
    0课程地址https://coding.imooc.com/lesson/201.html#mid=12705 1重点关注1.1权限的构成权限字符串缩写crdwaCREATE:创建子节点READ:获取节点/子节点WRITE:设置节点数据 DELETE:删除子节点ADMIN:设置权限  2课程内容  ......
  • oracle清空表恢复办法
    今天我不小心把正式库订单表数库都清空了,兄弟们!!!!!!!!!!!!我强迫自己冷静下来,百度搜索解决办法。希望大家别碰到这种事,太后怕了呜呜呜呜呜我自己总结一下1、查询某个时间点之前的数据(如果没数据库,多试几个时间点)select*from表名asoftimestampto_timestamp('2024-01-1009:09:00','......
  • 将开发板设计拆解为10个部分,教你DIY属于年轻人的第一块Linux开发板
    本项目是基于全志F1C200S设计的开源屏幕开发板,设计的目标是提供一个低成本、超迷你且适合Linux开发的平台,特别是针对屏幕接口的支持。项目简介开发板板载16Mnorflash,主控芯片采用F1C200S,内置64MDRAM。同时附带USBHost接口以及USBtype-c口,以及CH340串口转USB芯片,用于开发调试使......