原文:https://www.linuxidc.com/Linux/2018-01/150111.htm

https://blog.csdn.net/maxiaoqiang1/article/details/6258390-----Linux系统中文件权限ACL功能(上)

https://blog.csdn.net/xiangliangyu/article/details/22288531---linux下通过acl配置灵活目录文件权限(详细)

Linux基本的权限控制仅可以对所属用户、所属组、其他用户进行的权限控制,而不能精确地控制每个用户的权限。ACL规则就是用来解决这个问题的。使用ACL规则,我们可以针对单一账户设置文件及目录的访问权限。


实验用户和组环境

组root:包含用户root
组zenandidi:包含用户zenandidi
组nannan:包含用户nannan、zenandidi


实验文件内容

[root: ~]# cat acl_test/test.sh
#/bin/bash
echo "Success!"

检查文件系统的ACL功能是否已经开启

CentOS7默认已经开启ACL功能

[root: ~]# tune2fs -l /dev/sda2 | grep acl
Default mount options:    user_xattr acl

如果有看到acl,说明已经开启。


查看是否设定了ACL规则

直接用ls -l查看,如果权限一栏后面有个加号,说明文件被设定了ACL规则。

[root: acl_test]# ll
总用量 12K
-rw-rwxr--+ 1 root root 27 5月 7 08:03 test.sh

使用getfacl查询ACL规则

命令基本用法

getfacl <文件>

举例说明

列出test.sh的ACL规则(下面分段说明)

[root: acl_test]# getfacl test.sh

以下为文件的基本信息

# file: test.sh     #文件名
# owner: root #所有者
# group: root #所属组

以下为文件的用户权限设置

user::rw-                   #Linux默认的所属用户权限
user:zenandidi:rwx #附加ACL用户权限,这里表示用户zenandidi有读、写、执行的权限

以下为文件的组权限设置

group::r--                  #Linux默认的所属组权限

其他信息

mask::r-x                   #权限掩码(最后详细说明)
other::r-- #Linux默认的其他用户权限

使用setfacl设置ACL规则

命令基本用法

setfacl <选项> [规则] <文件>

选项:

-m 新增一条ACL规则
-x 删除一条ACL规则
-b 清空所有ACL规则

举例说明


例1 清空test.sh中所有ACL规则

[root: acl_test]# setfacl -b test.sh

检查设置

[root: acl_test]# getfacl test.sh
# file: test.sh
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root: acl_test]# ll
总用量 12K
-rw-r--r-- 1 root root 27 5月 7 08:03 test.sh
#权限栏的加号已经消失,说明没有设定ACL规则

例2 为test.sh添加一条ACL规则,使得用户zenandidi具有读、执行权限

设置之前先看看能不能用用户zenandidi的身份执行

[root: acl_test]# sudo -u zenandidi ./test.sh
sudo:./test.sh:找不到命令

由于没有赋予用户zenandidi执行权限,默认使用其他用户的权限,所以不能执行。

设置权限

[root: acl_test]# setfacl -m u:zenandidi:rx test.sh

检查设置

[root: acl_test]# getfacl test.sh
# file: test.sh
# owner: root
# group: root
user::rw-
user:zenandidi:r-x
group::r--
mask::r-x
other::r--
[root: acl_test]# ll
总用量 12K
-rw-r-xr--+ 1 root root 27 5月 7 08:03 test.sh

再看看能不能用zenandidi的身份执行

[root: acl_test]# sudo -u zenandidi ./test.sh
Success!

执行成功。

好奇地看了下root的

[root: acl_test]# ./test.sh
Success!

咦?我好像没设置root可以执行,为什么也执行成功了捏?其实这是mask在作怪,最后再看吧。


例3 为test.sh添加一条ACL规则,使得组nannan具有读、写权限

设置之前先看看能不能用用户zenandidi、nannan的身份改文件名

[root: acl_test]# sudo -u zenandidi mv test.sh test1.sh
mv: 无法将"test.sh" 移动至"test1.sh": 权限不够
[root: acl_test]# sudo -u nannan mv test.sh test1.sh
mv: 无法将"test.sh" 移动至"test1.sh": 权限不够

无法改文件名,因为没有赋予写权限。

设置权限

[root: acl_test]# setfacl -m g:nannan:rw test.sh

检查设置

[root: acl_test]# getfacl test.sh
# file: test.sh
# owner: root
# group: root
user::rw-
user:zenandidi:r-x
group::r--
group:nannan:rw- #effective:r--
mask::r-x
other::r--

再看看能不能改文件名

[root: acl_test]# sudo -u zenandidi mv test.sh test1.sh
mv: 无法将"test.sh" 移动至"test1.sh": 权限不够
[root: acl_test]# sudo -u nannan mv test.sh test1.sh
mv: 无法将"test.sh" 移动至"test1.sh": 权限不够

还是不行啊,怎么回事?还是那个mask的事。下面详细说明。


关于mask的那点事

1. mask值规定了允许的最大权限

例如:
mask为rwx,说明ACL规则可以设置全部权限。
mask为rw-,说明ACL规则仅可设置读、写权限,无论是否设置执行权限,文件都不能被执行。

如果getfacl输出中有#effective:xxx这个注释,说明ACL规则受mask限制,仅有xxx权限。应特别注意!

例3的问题可以通过设置mask来解决。

[root: acl_test]# setfacl -m mask:rwx test.sh

2. mask值会直接作为Linux基本权限中的组权限

例1的问题就出在这里。

设置ACL之前

[root: acl_test]# ll
总用量 12K
-rw-r--r-- 1 root root 27 5月 7 08:03

设置ACL之后,组权限变成了mask值

[root: acl_test]# ll
总用量 12K
-rw-r-xr--+ 1 root root 27 5月 7 08:03 test.sh

因为root处在root组之中,所以自然就有了执行的权限。

(转)CentOS7使用ACL精确控制文件和目录的访问权限的更多相关文章

  1. Linux改变文件或目录的访问权限命令

    使用  ll  或  ls -l 指令时 第一列会显示出目录下文件的权限 例如∶ -rw-r-r- 横线代表空许可.r代表只读,w代表写,x代表可执行.注意这里共有10个位置.第一个字符指定了文件类型 ...

  2. [添加用户]解决useradd 用户后没有添加用户Home目录的情况,Linux改变文件或目录的访问权限命令,linux修改用户密码

    将nobody用户添加到nogroup 组:usermod -g nogroup nobody cat /etc/passwd|grep nobodynobody:x:65534:65534:nobo ...

  3. 攻城狮在路上(叁)Linux(十五)--- 文件与目录的默认权限与隐藏权限

    一.文件默认权限:umask <==需要被减去的权限. 1.umask指的是当前用户在新建文件或者目录时的默认权限,如0022; 2.默认情况下,用户创建文件的最大权限为666; 创建目录的最大 ...

  4. 文件与目录的默认权限与隐藏权限【转vbird】

    一个文件有若干个属性, 包括读写运行(r, w, x)等基本权限,及是否为目录 (d) 与文件 (-) 或者是连结档 (l) 等等的属性! 要修改属性的方法在前面也约略提过了(chgrp, chown ...

  5. Linux学习之CentOS(九)-----文件与目录的默认权限与隐藏权限

    文件与目录的默认权限与隐藏权限 一个文件有若干个属性, 包括读写运行(r, w, x)等基本权限,及是否为目录 (d) 与文件 (-) 或者是连结档 (l) 等等的属性! 要修改属性的方法在前面也约略 ...

  6. Linux学习之CentOS(八)----文件与目录的默认权限与隐藏权限(转)

    文件与目录的默认权限与隐藏权限 一个文件有若干个属性, 包括读写运行(r, w, x)等基本权限,及是否为目录 (d) 与文件 (-) 或者是连结档 (l) 等等的属性! 要修改属性的方法在前面也约略 ...

  7. linux 权限管理命令chown、chgrp、umask、linux新建文件或目录的默认权限755

    chown /bin/chownchown [用户] [文件或目录] 改变文件或目录的所有者只有root可以改变文件或目录的所有者 root用户:mkdir /tmptouch /tmp/test.f ...

  8. LINUX创建文件和目录的默认权限

    在linux中,一位用户在创建文件和目录时,对其具有的权限都是一样的,如需更改,需要chmod命令做相应的更改.为什么?其实是权限掩码起作用了. 权限掩码的作用就是规范初创文件和目录时候的权限设置,免 ...

  9. linux文件上传,给文件或目录添加apache权限

    系统环境:ubuntu11.10/apache2/php5.3.6 在LAMP环境中,测试一个简单的php文件上传功能时,发现/var/log/apache2/error.log中出现如下php警告: ...

随机推荐

  1. hadoop学习笔记(四):hdfs常用命令

    一.hadoop fs 1.创建目录 [root@master hadoop-]# hadoop fs -mkdir /testdir1 [root@master hadoop-]# hadoop f ...

  2. Django 必会面试题总结

    1 列举Http请求中常见的请求方式 HTTP请求的方法: HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式   注意: 1)方法名称是 ...

  3. Vue组件通信父传方法给子组件调用

    // 父组件中将 :meth='changeCom1' 传入入子组件 , 子组件运行 meth(i) 方法 并给他传参数 ,在父组件可以获取这个参数,并做相应的操作   // 父组件 <temp ...

  4. 20155305乔磊2016-2017-2《Java程序设计》第七周学习总结

    教材学习内容总结 第十二章 Lambda 12.1 认识Lambda语法 - Lambda 教材的引入循序渐近.深入浅出 如果使用JDK8的话,可以使用Lambda特性去除重复的信息,例: Compa ...

  5. Shiro 登录页面的几个固定字段

    http://shiro.apache.org/webapp-tutorial.html Step 3b: Add a login page Since Step 3a enabled login a ...

  6. 配置HDFS HttpFS和WebHDFS

    HDFS支持两种RESTful接口:WebHDFS和HttpFS. WebHDFS默认端口号为50070,HttpFS默认端口号为14000. 默认启动WebHDFS而不会启动HttpFS,而Http ...

  7. linux上搭建私服

    环境centos7 解压到/usr/localtar -zxvf /home/ckl/upload/nexus-2.14.3-02-bundle.tar.gz -C /usr/local/ 注意: 一 ...

  8. 被“1”和“l”给坑了

    由于输入法的原因,导致小写的英文字母“L”和阿拉伯数字“1”长得非常像,在写秘钥的时候很容易把看错.由于对方发秘钥的时候给的是图片,而且不太清晰,手动输入的时候把“1”写成“l”了,对了好几遍秘钥也没 ...

  9. (匹配 匈牙利)棋盘游戏 -- Hdu --1281

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1281 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  10. Sometimes , less is more

    给小团队的特别建议 小团队的普遍现象在于人力紧张,不管是在创业公司还是在大公司内.对于不写代码就手痒的技术人员,如果再在技术上有点儿完美主义情节,那真是可以为代码鞠躬尽瘁的.稍微一整理,事情恨不得已经 ...