LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Linux内核和文件系统权限管理的基本用法——ACL权限

2023年1月29日 345点热度

ACL 是什么

ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。

本文的演示环境为 ubuntu 16.04。

ACL有什么用

既然是作为UGO权限管理的补充,ACL自然要有UGO办不到或者很难办到的本事,例如:

可以针对用户来设置权限

可以针对用户组来设置权限

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

检查是否支持ACL

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

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

Defaultmount options: user_xattracl

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

如何设置ACL

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

setfacl

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

linux 用户文件夹权限_linux的每类用户拥有三种权限_linux设置用户组权限

linux的每类用户拥有三种权限_linux 用户文件夹权限_linux设置用户组权限

getfacl

getfacl 文件/目录名

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

针对用户来设置权限

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

$sudo adduser tester

$sudo adduser tester1

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

linux的每类用户拥有三种权限_linux设置用户组权限_linux 用户文件夹权限

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

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

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

$ setfacl -m u:tester:rw aclfile

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

$ ll aclfile

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

$ getfacl aclfile

linux 用户文件夹权限_linux的每类用户拥有三种权限_linux设置用户组权限

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

针对用户组来设置权限

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

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

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

$mkdir mydir

$ll -dmydir

$setfacl -md:u:tester:rwx mydir

$getfacl mydir

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

linux设置用户组权限_linux的每类用户拥有三种权限_linux 用户文件夹权限

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

$touch testfile

$mkdir testdir

$getfacl testfile

$getfacl testdir

linux设置用户组权限_linux 用户文件夹权限_linux的每类用户拥有三种权限

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

linux设置用户组权限_linux的每类用户拥有三种权限_linux 用户文件夹权限

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

更改 ACL 权限

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

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

$ setfacl -m u:tester:rwx aclfile

linux 用户文件夹权限_linux设置用户组权限_linux的每类用户拥有三种权限

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

$ setfacl -m u:tester:rw aclfile

linux的每类用户拥有三种权限_linux设置用户组权限_linux 用户文件夹权限

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

$ setfacl -m g:tester1:rwx aclfile

linux 用户文件夹权限_linux的每类用户拥有三种权限_linux设置用户组权限

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

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

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

linux的每类用户拥有三种权限_linux设置用户组权限_linux 用户文件夹权限

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

linux设置用户组权限_linux 用户文件夹权限_linux的每类用户拥有三种权限

需要注意的是一定要包含 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设置用户组权限_linux的每类用户拥有三种权限_linux 用户文件夹权限

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

$ setfacl -b aclfile

linux 用户文件夹权限_linux设置用户组权限_linux的每类用户拥有三种权限

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

备份和恢复 ACL 权限

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

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

linux的每类用户拥有三种权限_linux 用户文件夹权限_linux设置用户组权限

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

$ getfacl -R acldir > acldir.acl

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

$ setfacl -R -b acldir

linux 用户文件夹权限_linux的每类用户拥有三种权限_linux设置用户组权限

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

$ setfacl --restore acldir.acl

linux设置用户组权限_linux 用户文件夹权限_linux的每类用户拥有三种权限

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

【关于投稿】

如果大家有原创好文投稿,请直接给公号发送留言。

①留言格式:

【投稿】+《文章标题》+文章链接

②示例:

【投稿】《不要自称是程序员,我十多年的IT职场总结》:

③最后请附上您的个人简介哈~

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: acl linux文件权限 linux系统 文件目录
最后更新:2023年1月29日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux操作系统不仅仅端口-u:仅显示监听套接字(protocol) (知识点)Linux文件权限详解:执行权限 VMware过期Linux系统CentOS7下载安装1.77下载地址 红旗linux操作系统v11.0-红旗操作系统操作系统吗? 5yw红软基地驱动完美支持windows、mac、linux系统 轻松安装ZeroMQ:Ubuntu系统必备的解决方案 怎么在Win7系统虚拟机上安装LinuxUbuntu的技巧?在这里 Linux必备!安装RAR解压器,轻松解压文件! 虚拟机linux系统下载 什么是linuxLinux(/托瓦兹)的Linux内核 文件永久删除还能找回来吗?关于Win和Mac系统的恢复方法 Ubuntu16.04怎样安装系统更新和应用更新16.04 网卡 centos 启动 Linux选择选择时各企业所参考的依据:以下内容和Centos Linux内核内存检测工具系列中的一篇,配置以及典型应用 虚拟机安装Ubuntu操作系统-Ubuntu空间20G镜像下载 0渗透操作0x02绕过disable_functions插件(组图) 【好玩的网络-第2.5期】分配IP有哪些骚操作?小白保姆级教程 Windows远程连接工具、Ubuntu系统的安装软件及系统 Linux一模一样远程连接编辑的操作图是什么? DRAM中的虚拟地址空间的缓存简化内存管理(组图) 2.5创建和配置虚拟机2.5.1创建虚拟机双击桌面的VMwarePlayer
Linux文件路径查询方法,轻松获取文件位置Linux移植6410:从零开始的挑战!linux php安装 快速掌握Linux下PHP安装,轻松入门流行技术linux patch 文件 解决LinuxPatch文件10大疑难杂症,轻松应对!Ubuntu系统更改IP地址的简易教程,跟随以下步骤即可搞定!高效搭建Linux Android开发环境,轻松提升开发体验轻松掌握:如何查询Linux内核版本?Linux安装Matlab指南,快速掌握安装步骤Ubuntu 16安装网卡驱动教程,轻松解决网络连接问题Linux启动时,不使用图形界面可能更有效率!移植Linux,手机变身“大杀器”!详解8大关键操作Linux更高效,掌握启动终端快捷键!纯Python库实现上面介绍的HTML转换为PDF的软件Fedora 13服务器配置指南:9个实用技巧全解析9种方法轻松获取Linux版本,快速掌握系统信息!博客韦东山freeRTOS系列教程:入门文档教程+进阶视频教程轻松掌握linux ldd命令的技巧,成为高效开发者与管理员Linux VPS安全检测,保障服务器稳定运行!Linux下高效开发必备:配置Tomcat和JDK分析Linux中的I2C驱动程序框架核心结构(i2c-bus结构)
无窗口的Python可执行程序(图)命令(组图) 我试图将从java作业获得的时间信息与linux性能监视工具 0005编程精粹-Microsoft编写优质无错程序秘诀(bjchenxu) Linux上架构示意图munin的架构非常简单的配置和客户端插件 文件传输协议:文件传输的话控制端口21数据端口:20 Linux强烈建议采用自定义的系统服务实现开机启动程序的脚本方法 4.1df命令4.3/4.4磁盘分区命令4.2du命令输出磁盘文件系统 什么是Windows系统MicrosoftWindows,linux系统和windows系统的区别 Linux中如何查看分区的文件系统类型的方法-乐题库 微信设置水滴昵称,个性中带点萌脚本,定时执行简单示例 软件介绍deepinlinux最新正版是深度推出的开源操作系统 移植Linux,手机变身“大杀器”!详解8大关键 库是什么?库的分类、分类库、动态库 如何增加Linux中打开文件max的文件限制数量? 博客韦东山freeRTOS系列教程:入门文档教程+进阶视频教程 嵌入式linux系统开发培训-C编程以及C++Linux应用开发 VS2015安装VC_Linux.exe安装VS2015软件和Linux系统 1.useradd命令可以创建一个新的用户帐号其最基本用法 Linux系统内核的高效和稳定已在各个领域内得到大量事实验证 u盘无密码移动版livepersistencepersistence制作u盘有密码
标签聚合
sudo 文件目录 电脑 linux脚本 linux系统 虚拟机 命令 linux服务器 命令模式 软件
书籍
课程
技术群
技术干货大合集↓
  • 2023年3月 / 114篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.