Linux权限管理 ACL权限
ACL权限简介
在普通权限中,用户对文件只有三种身份ugo,分别为属主(u)、属组(g)和其他人(o);每种用户身份拥有读(read)、写(write)和执行(execute)三种权限。但是在实际工作中,系统上chmod管理权限,有时不能满足需求,需要给个别用户(非所有者,非所属组)赋予权限,因此使用acl权限。
ACL可以设置特定用户或者用户组对于一个文件/文件夹的操作权限. 需要掌握的命令也只有三个: getfacl, setfacl, chacl。
ACL是Access Control List(访问控制列表)的缩写,不过在Linux系统中,ACL用于设定用户针对文件的权限。
ACL权限开启
谨记在Linux中 ACL权限针对的是分区,所以要给某个文件设置ACL权限时,首先要查看文件所在的分区是否开启了ACL权限。
查看 ACL 权限是否开启
使用mount 和 dumpe2fs 命令就可以查看ACL是否开启
1. 使用mount命令找到系统中已经挂载的分区
[root@localhost ~]# mount
......省略其他不相关的输出...........
/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered)
2.使用dumpe2fs查询指定分区文件系统详细信息
-h 含义为仅显示超级块中的信息,而不显示磁盘块组的详细信息;
[root@localhost ~]# dumpe2fs -h /dev/sda1
.......省略其他不相关的输出...........
Default mount options: user_xattr acl
大家可以看到,我们的 ACL 权限是 /dev/sda1 分区的默认挂载选项,所以不需要手工挂载。
手动添加ACL权限
当 Linux 系统没中挂载分区没有开启ACL权限时就可以手动开启ACL权限
1.临时开启分区 ACL 权限
通过命令可以临时开启分区的ACL权限,如果系统重启了,那么分区权限会恢复到初始状态。
[root@localhost ~]# mount -o remount, acl /
重新挂载根分区,并加入ACL权限
2.永久开启分区 ACL 权限
通过 vi打开 /etc/fstab 文件 加入ACL权限
[root@localhost ~]#vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 /ext4 defaults, acl
重新挂载文件系统或重启系统,使修改生效
[root@localhost ~]# mount -o remount /
ACL权限查看和设置
分别使用 getfacl 和 setfacl命令就可以对文件进行权限的查看和设置
1.查看ACL权限
[root@localhost ~]# getfacle 文件名
2.设置ACL权限
选项:
选项 | 选项说明 |
-m | 设定 ACL 权限。
给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名 给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名 |
-x |
删除指定的 ACL 权限 |
-b | 删除所有的 ACL 权限 |
-d | 设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限 |
-k | 删除默认 ACL 权限 |
-R | 递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效 |
说明:给用户或用户组设定 ACL 权限其实并不是真正设定的权限,是与 mask 的权限“相与”之后的权限才是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限。
给用户添加ACL权限
例如:在一个班级有教师(root) 学生(zhangdan,lisi) 试听生(wangwu),project为他们共享的一个文件目录。其中我们要求 root 是 /project 目录的属主,权限是 rwx;tgroup 是此目录的属组,tgroup 组中拥有班级学员 zhangsan 和 lisi,权限是 rwx;其他人的权限是 0。这时,试听学员 wangwu 来了,她的权限是 r-x。我们来看具体的分配命令。
1.添加需要试验的用户和用户组,省略设定密码的过程
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# useradd lisi
[root@localhost ~]# useradd wangwu
[root@localhost ~]# groupadd tgroup
2.建立需要分配权限的目录,改变/project目录的属主和属组,指定/project目录的权限
[root@localhost ~]# mkdir /project
[root@localhost ~]# chown root:tgroup /project/
[root@localhost ~]# chmod /project/
[root@localhost ~]# ll -d /project/
drwxrwx--- 2 root tgroup 1787 Nov 5 20:20 /project/
查看权限,已经符合要求了
3.给用户st赋予r-x权限,使用"u:用户名:权限" 格式
如果试听生要访问 /project目录,则需要给他设置一个ACL权限
[root@localhost ~]# setfacl -m u:st:rx /project/
[root@localhost /]# cd /
[root@localhost /]# ll -d project/
drwxrwx---+ root tgroup 1787 Nov 5 20:20 project/
使用ls-l査询时会发现,在权限位后面多了一个"+",表示此目录拥有ACL权限
这样试听生也拥有了/project目录的读写权限
给用户组赋予 ACL 权限
添加测试组
[root@localhost /]# groupadd tgroup2
给组tgroup2纷配ACL权限,使用"g:组名:权限"格式
[root@localhost /]# setfacl -m g:tgroup2:rwx project/
[root@localhost /]# ll -d project/
drwxrwx---+ root tgroup1787 Nov 5 20:20 project/
最大有效权限mask
mask 是用来指定最大有效权限的。mask 的默认权限是 rwx,如给wangwu 用户赋予了 r-x 的 ACL 权限,则需要和 mask 的 rwx 权限"相与"才能得到 wangwu 的真正权限,也就是 r-x "相与"rwx 出的值是 r-x,所以 wangwu 用户拥有 r-x 权限。
如果把 mask 的权限改为 r--,和 wangwu 用户的权限相与,也就是 r--"相与"r-x 得出的值是 r--,wangwu 用户的权限就会变为只读。大家可以这么理解:用户和用户组所设定的权限必须在 mask 权限设定的范围之内才能生效,mask权限就是最大有效权限。
不过我们一般不更改 mask 权限,只要给予 mask 最大权限 rwx,那么任何权限和 mask 权限相与,得出的值都是权限本身。也就是说,我们通过给用户和用户组直接赋予权限,就可以生效,这样做更直观。
修改最大有效权限的命令如下:
[root@localhost /]# setfacl -m m:rx project/
设定mask权限为r-x,使用"m:权限"格式
默认ACL权限和递归ACL权限
给 /project 目录设定了 ACL 权限后,在这个目录中新建一些子文件和子目录,这些文件并没有继承ACL权限
默认 ACL 权限指的是针对父目录中新建立的文件和目录会继承父目录的 ACL 权限,格式是"setfacl-m d:u:用户名:权限 文件名";
递归 ACL 权限指的是针对父目录中已经存在的所有子文件和子目录继承父目录的 ACL 权限,格式是"setfacl-m u:用户名: 权限 -R 文件名"。
设置默认ACL权限
使用"d:u:用户名:权限"格式设定默认ACL权限
[root@localhost /]# setfacl -m d:u:st:rx /project/
设置递归ACL权限
-R递归
[root@localhost project]# setfacl -m u:st:rx -R/project/
删除ACL权限
删除指定的ACL权限:
[root@localhost /]# setfacl -x u:st /project/
删除指定用户和用户组的ACL权限
删除所有ACL权限:
[root@localhost /]# setfacl -b project/
会删除文件的所有ACL权限
Linux权限管理 ACL权限的更多相关文章
- 权限管理——ACL权限
权限管理 ACL权限 用于解决用户对文件身份不足 命令:[root@localhost ~]#dumpe2fs -h /dev/sd3 作用:查询指定分区详细的文件系统给信息 选项 -h:仅显示超级块 ...
- Linux 权限管理-ACL权限
ACL权限是为了在现有的所有者.所属组.其他人不够使用的情况下使用的,使用它必须保证文件所在的分区支持ACL df -h:查看系统所有分区信息 dumpe2fs -h /dev/vda1,可以查看分区 ...
- Linux UGO和ACL权限管理
自主访问控制(Discretionary Access Control, DAC)是指对象(比如程序.文件.进程)的拥有者可以任意修改或者授予此对象相应的权限.Linux的UGO(User, Grou ...
- linux的用户扩充权限管理acl和用户使用系统资源的限制
用户扩充权限管理 acl 1.扩充权限的方式 文件扩充权限 ACL 磁盘配额 2.文件扩充权限 1.安全位 安全位 ---set位 SUID SGID set仅可以加给 u.g, 如: ...
- Linux学习之ACL权限详解(十)
Linux系统ACL权限详解 目录 ACL权限简介与开启 查看与设定ACL权限 最大有效权限与删除ACL权限 默认ACL权限和递归ACL权限 ACL权限简介与开启权限 ACL权限简介 用户权限管理始终 ...
- Linux课程---10、权限管理(权限有哪几种)
Linux课程---10.权限管理(权限有哪几种) 一.总结 一句话总结: r 读 w 写 x 执行 1.drwxr-x--- 2 root root 4096 Jan 20 19:39 mnt ...
- 用户和组的权限管理/特殊权限和ACL(个人笔记)
个人学习笔记总结 内容包括解释Linux的安全模型解释用户帐号和组群帐号的目的用户和组管理命令理解并设置文件权限默认权限特殊权限ACL介绍安全3A资源分派:Authentication:认证Auth ...
- linux权限管理-特殊权限
目录 linux权限管理-特殊权限 一,特殊权限 Linux权限属性chattr概述 linux进程掩码umask linux权限管理-特殊权限 一,特殊权限 1.suid(4000) SetUID( ...
- linux权限管理-基本权限
目录 linux权限管理-基本权限 权限修改命令chmod linux权限管理-基本权限 权限 针对某些文件和进程,对用户进行限制 权限与用户的关系 rwx rwx r-x User Group Ot ...
随机推荐
- PHP编译configure时常见错误
PHP的安装虽然有时候很简单,可是如果应用一多,我们安装起来就很头痛了!出错最多的就是安装PHP扩展的时候了.其实不管是你是Apache类的应用还是Nginx类的,PHP的安装都不是很简单,虽然网上有 ...
- ftp 下载最近一小时的文件
#!/bin/bash #cd /home/ftptmp/ ftp -v -n 192.168.0.100 2121 <<EOF user test 2009 binary cd OU ...
- 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(二):安装facebook-wda库并编写简易自动化测试脚本
上一篇介绍完如何安装WDA,接下来开始正式安装开发库并编写自动化脚本. 目录: 一.安装facebook-wda库 二.通过WEditor定位元素 三.附录:学习资料 一.安装facebook-wda ...
- spring 整合mybatis 学习笔记
1.1 环境准备 java环境: jdk1.7.0_72 eclipse indigo springmvc版本:spring3.2 所需要的jar包: 数据库驱动包:mysql5.1 mybatis ...
- VC++ 得到的函数地址与实际函数地址不一致的原因。
我想试验一个计算汇编指令长度的代码是否正确,因而写了如下code进行验证,但结果非常奇怪 #include <stdio.h> #include <Windows.h> int ...
- PHP中常用的字符串函数?
1.strlen() 2.strpos() 3.mb_strlen()
- [Unity3D]Unity3D游戏开发之伤害数值显示
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.众所周知,在RPG游戏策划中最为重要的一个环节是数值策划.数值策划是一个关于游戏平衡方面的概念 ...
- 信息属性列表关键字 info.plist
本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6650491 本附录说明了那些可以在束和包的属性列表文件中定义的关键字. 束关键 ...
- Android开发:《Gradle Recipes for Android》阅读笔记1.3
想命令行执行gradle的构建,可以通过提供的gradle wrapper或者安装gradle. 构建android项目不需要安装gradle,因为android studio已经包含gradle.& ...
- javascript获取客户端默认打印机
JS <script language="javascript"> function startRequest() { var oShell = new ActiveX ...