`

第十四章 主机的细部权限规划:ACL 的使用

 
阅读更多
从第六章开始,我们就一直强调 Linux 的权限概念是非常重要的! 但是传统的权限仅有三种身份 (owner, group, others) 搭配三种权限 (r,w,x) 而已,并没有办法单纯的针对某一个使用者或某一个群组来配置特定的权限需求,例如前一小节最后的那个任务! 此时就得要使用 ACL 这个机制啦!这玩意挺有趣的,底下我们就来谈一谈:

什么是 ACL

ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限配置。ACL 可以针对单一使用者,单一文件或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。

那 ACL 主要可以针对哪些方面来控制权限呢?他主要可以针对几个项目:

使用者 (user):可以针对使用者来配置权限;
群组 (group):针对群组为对象来配置其权限;

默认属性 (mask):还可以针对在该目录下在创建新文件/目录时,规范新数据的默认权限;
好了,再来看看如何让你的文件系统可以支持 ACL 吧!

如何启动 ACL

由于 ACL 是传统的 Unix-like 操作系统权限的额外支持项目,因此要使用 ACL 必须要有文件系统的支持才行。目前绝大部分的文件系统都有支持 ACL 的功能,包括 ReiserFS, EXT2/EXT3, JFS, XFS 等等。在我们的 CentOS 5.x 当中,默认使用 Ext3 是启动 ACL 支持的!至于察看你的文件系统是否支持 ACL 可以这样看:

[root@www ~]# mount  <==直接查阅挂载参数的功能
/dev/hda2 on / type ext3 (rw)
/dev/hda3 on /home type ext3 (rw)
# 其他项目鸟哥都将他省略了!假设我们只要看这两个装置。但没有看到 acl 喔!

[root@www ~]# dumpe2fs -h /dev/hda2  <==由 superblock 内容去查询
....(前面省略)....
Default mount options:    user_xattr acl
....(后面省略)....


由 mount 单纯去查阅不见得可以看到实际的项目,由于目前新的 distributions 常常会主动加入某些默认功能, 如上表所示,其实 CentOS 5.x 在默认的情况下 (Default mount options:) 就帮你加入 acl 的支持了! 那如果你的系统默认不会帮你加上 acl 的支持呢?那你可以这样做:

[root@www ~]# mount -o remount,acl /
[root@www ~]# mount
/dev/hda2 on / type ext3 (rw,acl)
# 这样就加入了!但是如果想要每次启动都生效,那就这样做:

[root@www ~]# vi /etc/fstab
LABEL=/1   /   ext3    defaults,acl    1 1


如果你不确定或者是不会使用 dumpe2fs 观察你的文件系统,那么建议直接将上述的 /etc/fstab 里面的内容修改一下即可!

ACL 的配置技巧: getfacl, setfacl

好了,让你的 filesystem 启动 ACL 支持后,接下来该如何配置与观察 ACL 呢? 很简单,利用这两个命令就可以了:

A getfacl:取得某个文件/目录的 ACL 配置项目;
B setfacl:配置某个目录/文件的 ACL 规范。

先让我们来瞧一瞧 setfacl 如何使用吧!

setfacl 命令用法

[root@www ~]# setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
选项与参数:
-m :配置后续的 acl 参数给文件使用,不可与 -x 合用;
-x :删除后续的 acl 参数,不可与 -m 合用;
-b :移除所有的 ACL 配置参数;
-k :移除默认的 ACL 参数,关于所谓的『默认』参数于后续范例中介绍;
-R :递归配置 acl ,亦即包括次目录都会被配置起来;
-d :配置『默认 acl 参数』的意思!只对目录有效,在该目录新建的数据会引用此默认值


上面谈到的是 acl 的选项功能,那么如何配置 ACL 的特殊权限呢?特殊权限的配置方法有很多, 我们先来谈谈最常见的,就是针对单一使用者的配置方式:

# 1. 针对特定使用者的方式:
# 配置规范:『 u:[使用者账号列表]:[rwx] 』,例如针对 vbird1 的权限规范 rx :
[root@www ~]# touch acl_test1
[root@www ~]# ll acl_test1
-rw-r--r-- 1 root root 0 Feb 27 13:28 acl_test1
[root@www ~]# setfacl -m u:vbird1:rx acl_test1
[root@www ~]# ll acl_test1
-rw-r-xr--+ 1 root root 0 Feb 27 13:28 acl_test1
# 权限部分多了个 + ,且与原本的权限 (644) 看起来差异很大!但要如何查阅呢?

[root@www ~]# setfacl -m u::rwx acl_test1
[root@www ~]# ll acl_test1
-rwxr-xr--+ 1 root root 0 Feb 27 13:28 acl_test1
# 无使用者列表,代表配置该文件拥有者,所以上面显示 root 的权限成为 rwx 了!


上述动作为最简单的 ACL 配置,利用『 u:使用者:权限 』的方式来配置的啦!配置前请加上 -m 这个选项。 如果一个文件配置了 ACL 参数后,他的权限部分就会多出一个 + 号了!但是此时你看到的权限与实际权限可能就会有点误差! 那要如何观察呢?就透过 getfacl 吧!

getfacl 命令用法

[root@www ~]# getfacl filename
选项与参数:
getfacl 的选项几乎与 setfacl 相同!所以鸟哥这里就免去了选项的说明啊!

# 请列出刚刚我们配置的 acl_test1 的权限内容:
[root@www ~]# getfacl acl_test1
# file: acl_test1   <==说明档名而已!
# owner: root       <==说明此文件的拥有者,亦即 ll 看到的第三使用者字段
# group: root       <==此文件的所属群组,亦即 ll 看到的第四群组字段
user::rwx           <==使用者列表栏是空的,代表文件拥有者的权限
user:vbird1:r-x     <==针对 vbird1 的权限配置为 rx ,与拥有者并不同!
group::r--          <==针对文件群组的权限配置仅有 r 
mask::r-x           <==此文件默认的有效权限 (mask)
other::r--          <==其他人拥有的权限啰!


上面的数据非常容易查阅吧?显示的数据前面加上 # 的,代表这个文件的默认属性,包括文件名、文件拥有者与文件所属群组。 底下出现的 user, group, mask, other 则是属于不同使用者、群组与有效权限(mask)的配置值。 以上面的结果来看,我们刚刚配置的 vbird1 对于这个文件具有 r 与 x 的权限啦!这样看的懂吗? 如果看的懂的话,接下来让我们在测试其他类型的 setfacl 配置吧!

# 2. 针对特定群组的方式:
# 配置规范:『 g:[群组列表]:[rwx] 』,例如针对 mygroup1 的权限规范 rx :
[root@www ~]# setfacl -m g:mygroup1:rx acl_test1
[root@www ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:r-x
group::r--
group:mygroup1:r-x  <==这里就是新增的部分!多了这个群组的权限配置!
mask::r-x
other::r--


基本上,群组与使用者的配置并没有什么太大的差异啦!如上表所示,非常容易了解意义。不过,你应该会觉得奇怪的是, 那个 mask 是什么东西啊?其实他有点像是『有效权限』的意思!他的意义是: 使用者或群组所配置的权限必须要存在于 mask 的权限配置范围内才会生效,此即『有效权限 (effective permission)』 我们举个例子来看,如下所示:

# 3. 针对有效权限 mask 的配置方式:
# 配置规范:『 m:[rwx] 』,例如针对刚刚的文件规范为仅有 r :
[root@www ~]# setfacl -m m:r acl_test1
[root@www ~]# getfacl acl_test1
# file: acl_test1
# owner: root
# group: root
user::rwx
user:vbird1:r-x        #effective:r-- <==vbird1+mask均存在者,仅有 r 而已!
group::r--
group:mygroup1:r-x     #effective:r--
mask::r--
other::r--


您瞧,vbird1 与 mask 的集合发现仅有 r 存在,因此 vbird1 仅具有 r 的权限而已,并不存在 x 权限!这就是 mask 的功能了!我们可以透过使用 mask 来规范最大允许的权限,就能够避免不小心开放某些权限给其他使用者或群组了。 不过,通常鸟哥都是将 mask 配置为 rwx 啦!然后再分别依据不同的使用者/群组去规范她们的权限就是了。

例题:
将前一小节任务二中 /srv/projecta 这个目录,让 myuser1 可以进入查阅,但 myuser1 不具有修改的权力。
答:
由于 myuser1 是独立的使用者与群组,而 /srv 是附属于 / 之下的,因此 /srv 已经具有 acl 的功能。 透过如下的配置即可搞定:

# 1. 先测试看看,使用 myuser1 能否进入该目录?
[myuser1@www ~]$ cd /srv/projecta
-bash: cd: /srv/projecta: Permission denied  <==确实不可进入!

# 2. 开始用 root 的身份来配置一下该目录的权限吧!
[root@www ~]# setfacl -m u:myuser1:rx /srv/projecta
[root@www ~]# getfacl /srv/projecta
# file: srv/projecta
# owner: root
# group: projecta
user::rwx
user:myuser1:r-x  <==还是要看看有没有配置成功喔!
group::rwx
mask::rwx
other::---

# 3. 还是得要使用 myuser1 去测试看看结果!
[myuser1@www ~]$ cd /srv/projecta
[myuser1@www projecta]$ ll -a
drwxrws---+ 2 root projecta 4096 Feb 27 11:29 .  <==确实可以查询档名
drwxr-xr-x  4 root root     4096 Feb 27 11:29 ..

[myuser1@www projecta]$ touch testing
touch: cannot touch `testing': Permission denied <==确实不可以写入!


请注意,上述的 1, 3 步骤使用 myuser1 的身份,2步骤才是使用 root 去配置的!

上面的配置我们就完成了之前任务二的后续需求喔!这么简单呢!接下来让我们来测试一下,如果我用 root 或者是 pro1 的身份去 /srv/projecta 添加文件或目录时,该文件或目录是否能够具有 ACL 的配置? 意思就是说,ACL 的权限配置是否能够被次目录所『继承?』先试看看:

[root@www ~]# cd /srv/projecta
[root@www ~]# touch abc1
[root@www ~]# mkdir abc2
[root@www ~]# ll -d abc*
-rw-r--r-- 1 root projecta    0 Feb 27 14:37 abc1
drwxr-sr-x 2 root projecta 4096 Feb 27 14:37 abc2


你可以明显的发现,权限后面都没有 + ,代表这个 acl 属性并没有继承喔!如果你想要让 acl 在目录底下的数据都有继承的功能,那就得如下这样做了!

# 4. 针对默认权限的配置方式:
# 配置规范:『 d:[ug]:使用者列表:[rwx] 』

# 让 myuser1 在 /srv/projecta 底下一直具有 rx 的默认权限!
[root@www ~]# setfacl -m d:u:myuser1:rx /srv/projecta
[root@www ~]# getfacl /srv/projecta
# file: srv/projecta
# owner: root
# group: projecta
user::rwx
user:myuser1:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:myuser1:r-x
default:group::rwx
default:mask::rwx
default:other::---

[root@www ~]# cd /srv/projecta
[root@www projecta]# touch zzz1
[root@www projecta]# mkdir zzz2
[root@www projecta]# ll -d zzz*
-rw-rw----+ 1 root projecta    0 Feb 27 14:57 zzz1
drwxrws---+ 2 root projecta 4096 Feb 27 14:57 zzz2
# 看吧!确实有继承喔!然后我们使用 getfacl 再次确认看看!

[root@www projecta]# getfacl zzz2
# file: zzz2
# owner: root
# group: projecta
user::rwx
user:myuser1:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:myuser1:r-x
default:group::rwx
default:mask::rwx
default:other::---


透过这个『针对目录来配置的默认 ACL 权限配置值』的项目,我们可以让这些属性继承到次目录底下呢! 非常方便啊!那如果想要让 ACL 的属性全部消失又要如何处理?透过『 setfacl -b 檔名 』即可啦! 太简单了!鸟哥就不另外介绍了!请自行测试测试吧!


转自:http://vbird.dic.ksu.edu.tw/linux_basic/0410accountmanager_3.php
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Linux应用技术:ACL访问控制.pptx

    项目4 管理用户和用户...删除ACL权限;练习2;删除ACL权限;*ACL的mask权限;ACL的mask权限演示;*mask权限验证;思考;课堂活动验证&结论;*ACL的有效权限演示;ACL的有效权限验证;默认权限(拓展选学);默认权限;默认权限验证

    第5课: ACL 故障排除.rar

    **网络安全运维中的ACL故障排除** 访问控制列表(Access Control List, ACL)是网络管理中一个至关重要的工具,它用于在路由器、交换机等网络设备上实施流量过滤和访问控制策略。在本课中,我们将深入探讨ACL的工作...

    ACL 船公司:acl船公司货物跟踪

    ACL 船公司:acl船公司货物跟踪

    Linux应用技术:ACL的设置与管理.docx

    - **作用**:主要应用于需要更细粒度权限控制的场景,比如多用户协作环境中,每个用户可能需要不同级别的文件访问权限。 **2. ACL的关键要素** - **User ACLs**:用户ACL,用于指定特定用户对文件的访问权限。 ...

    5.15作业:acl进程管理.txt

    5.15作业:acl进程管理

    ACL权限介绍.pdf

    因此,合理规划和使用ACL是非常重要的。在设置ACL时,应确保遵循最小权限原则,只给予完成任务所需的最少权限,以提高系统的安全性。同时,定期审查和更新ACL规则也是必要的,以适应系统和用户需求的变化。

    【教案-数据通信技术】第七章-01:ACL技术的应用.pdf

    【教案-数据通信技术】第七章-01:ACL技术的应用.pdf

    IPv6技术课件:ACL概述.pdf

    IPv6技术课件:ACL概述 IPv6技术课件:ACL概述.pdf为一份关于访问控制列表(Access Control List,ACL)的技术课件,旨在帮助读者了解ACL的基本概念、分类、匹配顺序和应用场景。 ACL的定义 ---------------- ACL...

    第八次实验ACL配置实验.docx

    ACL 配置实验报告 本实验报告的主要目的是了解并掌握路由器上的标准 ACL 配置,实现网段间互访的安全控制。通过本次实验,我们可以深入理解包过滤防火墙的工作原理,并掌握路由器上的标准 ACL 规则及配置。 一、...

    网络层访问权限控制技术 ACL详解

    ACL通过检查数据包的第三层(IP地址)和第四层(端口号)信息,根据预设的规则决定是否允许数据包通过,从而实现对网络资源的访问控制。 基本原理: ACL的核心机制是包过滤,它会在路由器或三层交换机上检查每个...

    01-acl.rar

    3. **安全考虑**:在设计多用户应用时,了解和使用ACL能帮助开发出更安全的软件,限制不同用户对资源的访问权限。 4. **权限变更**:在某些场景下,程序可能需要动态更改文件或目录的ACL,比如用户角色变化或权限...

    lotus domino 权限资料--ACL权限复制

    Lotus Domino 是一款强大的协作平台,其核心组件之一是Access Control List(ACL),它负责管理数据库的访问权限。本文将详细讲解如何使用LotusScript复制一个数据库的ACL到另一个数据库,以及在处理过程中的一些...

    ACL权限配置.docx

    在Linux系统中,访问控制列表(Access Control List, ACL)是一种更为精细的权限管理系统,它扩展了传统的用户、组和其他的三元权限模型。传统的权限模型仅允许对文件或目录进行读、写、执行的基本控制,而ACL则允许...

    实验:使用基本ACL限制公司网络访问.docx

    本实验"使用基本ACL限制公司网络访问"旨在让学生深入理解并掌握如何通过访问控制列表(ACL)来实现这一目标。实验主要涉及了eNSP(Enterprise Network Simulation Platform,企业网络模拟平台)、ACL、VLAN以及三层...

    ACL 进行网络流量的控制1

    实验结果显示,使用 IP ACL 可以控制网络流量,使得网段 172.16.2.0 与 172.16.4.0 的主机可以进行通信,但网段 172.16.1.0 不允许访问 172.16.4.0 网段的主机。 知识点九:实验总结 实验总结显示,IP ACL 是实现...

    ACL实验详细图文配置

    ### ACL(访问控制列表)实验图文详细配置 #### 一、引言 访问控制列表(Access Control List,简称ACL)是网络设备上一种用于过滤数据包的重要机制。通过定义一系列规则,ACL能够允许或拒绝特定的数据包通过网络,...

    Linux系统基本权限ACL及特殊权限命令操作修改

    Linux系统基本权限ACL及特殊权限命令操作修改 一、基本权限 ACL 1、区分 请思考:使用chmod能针对独立用户设置文件不同的权限吗? user01 rwx file1 user02 rw file1 user03 r file1 user04 rwx file1 user05 rw ...

    ACL权限设置.pdf

    **ACL权限设置详解** ACL(Access Control List,访问控制列表)是一种更为精细的权限管理系统,它扩展了传统Unix-like操作系统的权限模型,允许为单个用户或用户组设置额外的访问权限,而不仅仅是所有者、组和其他...

    数据通信与计算机网络实验:ACL的简单应用.docx

    然后,使用`ip access-group`命令将ACL应用到路由器接口上,`in`表示应用到入站数据包,`out`表示应用到出站数据包。例如,`ip access-group 101 in`将ACL 101应用到接口的入站流量。 实验目的是让学生掌握标准ACL...

Global site tag (gtag.js) - Google Analytics