前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 setfacl 管理文件的访问控制列表ACL

使用 setfacl 管理文件的访问控制列表ACL

作者头像
Debian中国
发布2018-12-21 15:41:24
1.7K0
发布2018-12-21 15:41:24
举报
文章被收录于专栏:Debian中国Debian中国

如果你是在一个大型组织,你运行了 NFS 或者 Samba 服务给不同的用户,你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。Linux(以及其他Unix等POSIX兼容的操作系统)有一个被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例如,默认情况下你需要维护3个权限组:owner、group和other。

使用ACL后,你可以设置权限给其他用户或组,而不单只是简单的”other”。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。

ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btrfs等。如果你不确定你的文件系统是否支持ACL,请参考文档。

首先我们需要安装工具来管理ACL。在 Debian 系统中,执行命令: sudo apt-get install acl

ACL 使用样例

ACL即Access Control List,主要的目的是提供传统的 owner, group, others 的 read, write, execute 权限之外的具体权限设置,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的访问控制有一定帮助。例如,某一个文件不让单一的某个用户访问。

(adsbygoogle = window.adsbygoogle || []).push({});

ACL使用两个命令来对其进行控制:

  •     getfacl:取得某个文件/目录的ACL设置项目
  •     setfacl:设置某个文件/目录的ACL设置项目

setfacl 的命令参数: -m:设置后续acl参数 -x:删除后续acl参数 -b:删除全部的acl参数 -k:删除默认的acl参数 -R:递归设置acl,包括子目录 -d:设置默认acl

使用样例:创建一文件test,将其权限修改为777,并查看其默认ACL权限配置

代码语言:javascript
复制
[root@ debian.cn ~]# touch /opt/test
[root@ debian.cn ~]# chmod 777 /opt/test
[root@ debian.cn ~]# getfacl /opt/test         //获得文件的ACL权限
getfacl: Removing leading '/' from absolute path names
# file: opt/test                         //文件名
# owner: root                            //文件所属者
# group: root                            //文件所属组
user::rwx                                //文件所属者权限
group::rwx                               //同组用户权限
other::rwx                               //其它者权限

可以看到其它者的权限也是可读可写可执行,可以自行测试。现在我们修改其ACL策略,使用户 code 只有读取的权限

代码语言:javascript
复制
[root@ debian.cn ~]# setfacl -m u:code:r /opt/test
[root@ debian.cn ~]# ls -l /opt/test
-rwxrwxrwx+ 1 root root 1 Apr 11 07:25 /opt/test     //可以看到权限的最后多了一个 "+" 号

现在再次查看一下此文件的ACL属性:

代码语言:javascript
复制
[root@ debian.cn ~]# getfacl /opt/test
getfacl: Removing leading '/' from absolute path names
# file: opt/test
# owner: root
# group: root
user::rwx
user:code:r--                //可以看到code单独的权限为r--
group::rwx
mask::rwx
other::rwx

注意:code 的权限并不是只根据ACL配置来决定的,它是由code用户基本权限与配置的ACL权限的“与”运算决定的,即other:rwx 与 code:r– = code:r– 可以使用code用户,测试是否可写。在写文件时,会出现– INSERT — W10: Warning: Changing a readonly file提示。

除了对单个用户进行设置外,还可以对用户组、有效权限(mask)进行设置。 如对用户组设置:    g:[用户组]:[rwx] 注:有效权限(mask) 即用户或组所设置的权限必须要存在于mask的权限设置范围内才会生效 如上面的/opt/test文件,已经有了可读权限,如果我们把它的有效权限修改为只有写权限,则设置的 acl 权限不在有效权限之内,则用户code就不可能再查看/opt/test文件中的内容了。

代码语言:javascript
复制
[root@ debian.cn ~]# setfacl -m m:w /opt/test        //设置有效权限为只写

可以查看/opt/test acl属性

代码语言:javascript
复制
[root@ debian.cn ~]# getfacl /opt/test
getfacl: Removing leading '/' from absolute path names
# file: opt/test
# owner: root
# group: root
user::rwx
user:code:r-- #effective:---
group::rwx #effective:-w-
mask::-w-                      //可以看到有效权限已经修改成功
other::rwx

使用code用户查看文件内容,首先使用root用户写入一些内容,会使测试更加直观

代码语言:javascript
复制
[root@ debian.cn ~]# echo "this is a test getfacl " >/test
[code@ debian.cn ~]$ vim /opt/test
"/opt/test"
[Permission Denied]                //可以在最下面看到不允许访问的提示,并且看不到任何内容

取消acl权限:

代码语言:javascript
复制
[root@ debian.cn ~]# setfacl -x u:code /opt/test         //取消/opt/test对用户code的权限
[root@ debian.cn ~]# setfacl -x m /opt/test              //恢复有效权限
[root@ debian.cn ~]# getfacl /opt/test
getfacl: Removing leading '/' from absolute path names
# file: opt/test
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
[root@ debian.cn ~]# ll /test
-rwxrwxrwx 1 root root 24 Apr 11 08:01 /test              //已经可以正常使用

至于 setfacl 和  getfacl 另外的一些参数,请自行阅读帮助文档尝试使用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ACL 使用样例
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档