facl

简介:

     在linux系统中,由于权限的问题,在权限不匹配的情况下,是不能操作(这里所说的操作包括读、写、删除)其他用户的文件的。

     在用户以及用户的属组  与  文件的属主、属组不匹配的情况下,用户只能以‘其他用户’的身份访问该文件,而文件的创建者为了安全在创建此文件时并不想让‘其他用户’操作此文件,但是又想让某一个用户(该用户属于‘其他用户’)访问。

     在这种情况下,如果有root的话,可以把两个用户放到同一个用户组中。但是在没有root的情况下,该如何解决?这时就可让文件的创建者修改文件的访问控制列表acl。把‘其他用户’添加到此文件的属主并赋予权限、或添加到属组并赋予权限。这样添加的这个‘其他用户’就可操作此文件了。

    查看文件acl的命令:

        getfacl  file1  file2.....

   查看的结果格式类似如下:

1
2
3
4
5
6
7
[john@localhost  test ]$ getfacl  test
# file: test
# owner: john
# group: john
user::rw-
group::rw-
other::r--

    添加acl的命令格式:

        setfacl -m  user:UserName:Perms  file1 ...

        setfacl -m  group:GroupName:Perms  file1 ...

    添加acl权限后,在使用ll命令查看文件时,在权限位上会出现一个 + 号,则证明此文件有acl权限。下面添加一个其他用户具有读写权限。

1
2
3
4
5
6
7
8
9
[john@localhost  test ]$  id
uid=501(john) gid=501(john)  groups =501(john) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[john@localhost  test ]$ ll
total 0
-rw-rw-r--. 1 john john 0 Sep  1 20:35  test
[john@localhost  test ]$ setfacl -m user:bob:rw-  test
[john@localhost  test ]$ ll
total 4
-rw-rw-r--+ 1 john john 0 Sep  1 20:35  test

    先使用id命令可看到当前用户是john,接下来用ll命令查看当前目录下的文件,然后给当前目录下的test文件添加一个acl让bob用户对此文件具有rw(读写)权限,再用ll命令可看到test文件的权限位上已经多出一个 + 号。

1
2
3
4
5
6
7
8
9
10
11
12
[bob@localhost  test ]$  id
uid=502(bob) gid=502(bob)  groups =502(bob) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[bob@localhost  test ]$ ll
total 8
-rw-rw-r--+ 1 john john 10 Sep  1 20:59  test
[bob@localhost  test ]$  cat  test
hello bob
[bob@localhost  test ]$  echo  "hello john"  >>  test
[bob@localhost  test ]$  cat  test
hello bob
hello john
[bob@localhost  test ]$

    切换到bob用户,使用cat命令读取test文件内容,可看到能正常读取出来;再使用echo命令向test文件中写入数据,写入后再cat一下可看到刚才已经写入的内容。

    此次试验中没有把test文件的‘其他用户’权限位上的读权限去掉,这个再次做试验时可以把这个权限去掉,这样可以更好的说明在‘其他用户’没有任何权限的情况下,acl所起的作用。

    

    取消acl权限的命令:

        setfacl  -x  user:UserName:  file1 ...

        setfacl  -x  group:GroupName:  file1 ...

    在取消的命令中UserName后面不加冒号(:)也可以,并且后面不用跟权限,如果跟权限会报错

1
2
3
4
5
6
7
8
9
10
[john@localhost  test ]$  id
uid=501(john) gid=501(john)  groups =501(john) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[john@localhost  test ]$ ll
total 8
-rw-rw----+ 1 john john 21 Sep  1 20:59  test
[john@localhost  test ]$ setfacl -x user:bob:  test
[john@localhost  test ]$  cat  test
hello bob
hello john
[john@localhost  test ]$

在上述命令中john用户把test的acl权限取消。然后在下面的命令中用bob用户对其进行读操作,可见bob已经不能进行读取test文件中的内容。

1
2
3
4
5
6
7
8
[bob@localhost  test ]$  id
uid=502(bob) gid=502(bob)  groups =502(bob) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[bob@localhost  test ]$ ll
total 8
-rw-rw----+ 1 john john 21 Sep  1 20:59  test
[bob@localhost  test ]$  cat  test
cat test : Permission denied
[bob@localhost  test ]$

在上面命令中可能你会发现,在john用户已经把acl取消掉,并且bob用户确实对test文件没有操作权限了,test的权限位上仍存在 + 号,可使用getfacl test查看一下。

1
2
3
4
5
6
7
8
[bob@localhost  test ]$ getfacl  test
# file: test
# owner: john
# group: john
user::rw-
group::rw-
mask::rw-
other::---

可看到多了个mask::rw-权限,把此权限取消后 + 号就会消失,这个权限是添加acl权限自动添加上去的。

1
2
3
4
[john@localhost  test ]$ setfacl -x mask::  test
[john@localhost  test ]$ ll
total 4
-rw-rw----. 1 john john 21 Sep  1 20:59  test

至于mask是什么权限,这里简单说下,mask会伴随着添加了user或group的acl权限而产生,通常会和添加的user或group的acl权限位保持一致,比如添加user的acl权限为rw,随之出现的mask的权限也为rw。

    若是文件原来属组的权限为rw-,在设置user或group的acl权限为rwx的情况下,这时属组的权限就会显示为rwx,实际文件的属组用户并没有执行权限(x),所以在碰到权限中带有 + 号的文件,查看文件属组权限时要使用getfacl file命令查看。

1
2
3
4
5
6
7
8
[john@localhost  test ]$ ll
total 4
-rw-rw----. 1 john john 21 Sep  1 20:59  test
[john@localhost  test ]$ setfacl -m user:bob:rwx  test
[john@localhost  test ]$ ll
total 8
-rw-rwx---+ 1 john john 21 Sep  1 20:59  test
[john@localhost  test ]$



本文转自 f_066 51CTO博客,原文链接:http://blog.51cto.com/ganmu/1845998,如需转载请自行联系原作者
相关文章
|
Java 程序员
Java 求助! 为什么我拿不到错误信息,e.getMessage()
Java 求助! 为什么我拿不到错误信息,e.getMessage()
1243 0
Java 求助! 为什么我拿不到错误信息,e.getMessage()
|
6月前
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
201 25
|
7月前
|
算法
基于小波变换和峰值搜索的光谱检测matlab仿真,带GUI界面
本程序基于小波变换和峰值搜索技术,实现光谱检测的MATLAB仿真,带有GUI界面。它能够对CO2、SO2、CO和CH4四种成分的比例进行分析和提取。程序在MATLAB 2022A版本下运行,通过小波分解、特征提取和峰值检测等步骤,有效识别光谱中的关键特征点。核心代码展示了光谱数据的处理流程,包括绘制原始光谱、导数光谱及标注峰值位置,并保存结果。该方法结合了小波变换的时频分析能力和峰值检测的敏锐性,适用于复杂信号的非平稳特性分析。
181 26
|
11月前
|
存储 弹性计算 运维
阿里云国际Windows操作系统迁移教程
阿里云国际Windows操作系统迁移教程
|
监控 关系型数据库 MySQL
MySQL高可用MHA
MySQL高可用管理工具(MHA,Master High Availability)是一个用于自动管理MySQL主从复制的工具,它可以提供高可用性和自动故障转移。MHA由原版的MHA工具和MHA Manager组成,它们协同工作以实现自动主从切换和监控。
679 0
|
弹性计算 固态存储 数据可视化
阿里云服务器一年价格2023最新价格明细来了
阿里云服务器一年价格2023最新价格明细来了。阿里云服务器分为云服务器ECS和轻量应用服务器,云服务器s6公网带宽可选1M到5M,系统盘40G起可选高效云盘、SSD云盘或ESSD云盘,1核1G配置19.17元3个月、306.72元一年,1核2G优惠价26.46元3个月、423.36元一年,2核4G配置42.66元3个月,2核8G配置58.86元3个月,4核8G 75.06元3个月,8核16G 139.86元3个月,还有4核16G、8核32G多配置可选。不只是云服务器ECS共享型s6实例,ECS计算型c6、通用型g6、内存型r6、云服务器u1、企业级c7/g7/r7系列、轻量应用服务器和GPU云
852 0
|
Java Spring
IDEA 创建 SpringCloud项目-多项目方式
IDEA 创建 SpringCloud项目-多项目方式
528 0
|
存储 监控 数据可视化
【SLS开源兼容系列】使用Kibana访问SLS
现在通过SLS的ES兼容能力,可以很方便地实现用Kibana来查询和可视化SLS的数据。对于从ES迁移到SLS的用户可以继续保留原来的Kibana使用习惯。下面来演示如何通过Kibana来访问SLS
303 0
|
传感器 数据采集 安全
聊聊身边的嵌入式,你家燃气表是智能的吗?
聊聊身边的嵌入式,你家燃气表是智能的吗?
|
网络协议 安全 Shell
【网络协议】网络文件共享协议SMB(Server Message Block)
SMB协议允许在局域网(LAN)或广域网(WAN)上共享文件、打印机和其他资源。
1221 0