如何在Linux下设置访问控制列表(ACL)来控制用户的权限

如何在Linux下设置访问控制列表(ACL)来控制用户的权限,第1张

Linux下的访问控制列表(ACL)主要用来控制用户的权限,可以做到不同用户对同一文件有不同的权限,那么具体要如何 *** 作呢?下面小编就教你如何在Linux下设置访问控制列表(ACL)来控制用户的权限。

使用拥有权限控制的Liunx,工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例,或者当用户不愿意分享他们之间的文件时,这样的工作是很棒的。然而,如果你是在一个大型组织,你运行了NFS或者Samba服务给不同的用户,然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。

Linux(和其他Unix等POSIX兼容的 *** 作系统)有一种被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例如,默认情况下你需要确认3个权限组:owner、group和other。而使用ACL,你可以增加权限给其他用户或组别,而不单只是简单的“other”或者是拥有者不存在的组别。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。

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

在文件系统使ACL生效

首先,我们需要安装工具来管理ACL。

Ubuntu/Debian 中:

$ sudo apt-get install acl

CentOS/Fedora/RHEL 中:

# yum -y install acl

Archlinux 中:

# pacman -S acl

出于演示目的,我将使用ubuntu server版本,其他版本类似。

安装ACL完成后,需要激活我们磁盘分区的ACL功能,这样我们才能使用它。

首先,我们检查ACL功能是否已经开启。

$ mount

你可以注意到,我的root分区中ACL属性已经开启。万一你没有开启,你需要编辑/etc/fstab文件,在你需要开启ACL的分区的选项前增加acl标记。

现在我们需要重新挂载分区(我喜欢完全重启,因为我不想丢失数据),如果你对其它分区开启ACL,你必须也重新挂载它。

$ sudo mount / -o remount

干的不错!现在我们已经在我们的系统中开启ACL,让我们开始和它一起工作。

ACL 范例

基础ACL通过两条命令管理:setfacl用于增加或者修改ACL,getfacl用于显示分配完的ACL。让我们来做一些测试。

我创建一个目录/shared给一个假设的用户,名叫freeuser

$ ls -lh /

我想要分享这个目录给其他两个用户test和test2,一个拥有完整权限,另一个只有读权限。

首先,为用户test设置ACL:

$ sudo setfacl -m u:test:rwx /shared

现在用户test可以随意创建文件夹,文件和访问在/shared目录下的任何地方。

现在我们增加只读权限给用户test2:

$ sudo setfacl -m u:test2:rx /shared

注意test2读取目录需要执行(x)权限

让我来解释下setfacl命令格式:

-m 表示修改ACL。你可以增加新的,或修改存在的ACLu: 表示用户。你可以使用 g 来设置组权限test 用户名:rwx 需要设置的权限。

现在让我向你展示如何读取ACL:

$ ls -lh /shared

你可以注意到,正常权限后多一个+标记。这表示ACL已经设置成功。要具体看一下ACL,我们需要运行:

$ sudo getfacl /shared

最后,如果你需要移除ACL:

$ sudo setfacl -x u:test /shared

如果你想要立即擦除所有ACL条目:

$ sudo setfacl -b /shared

最后,在设置了ACL文件或目录工作时,cp和mv命令会改变这些设置。在cp的情况下,需要添加“p”参数来复制ACL设置。如果这不可行,它将会展示一个警告。mv默认移动ACL设置,如果这也不可行,它也会向您展示一个警告。

总结

使用ACL让在你想要分享的文件上拥有更多的能力和控制,特别是在NFS/Samba服务。此外,如果你的主管共享主机,这个工具是必备的。

上面就是Linux下设置访问控制列表来控制用户权限的方法介绍了,因为ACL的配置和使用较为复杂,初学者在使用的时候容易出现错误,希望本文介绍的方法能够帮助到你。

ACL的名词定义

先来看看在ACL里面每一个名词的定义.这些名词我大多从man page上摘下来虽然有些枯燥,

但是对于理解下面的内容还是很有帮助的

ACL 是由一系列的Access Entry所组成的. 每一条Access Entry定义了特定的类别可以对

文件拥有的 *** 作权限. Access Entry有三个组成部分: Entry tag type, qualifier

(optional), 权限

我们先来看一下最重要的Entry tag type, 它有以下几个类型

ACL_USER_OBJ: 相当于Linux里file_owner的权限

ACL_USER: 定义了额外的用户可以对此文件拥有的权限

ACL_GROUP_OBJ: 相当于Linux里group的权限

ACL_GROUP: 定义了额外的组可以对此文件拥有的权限

ACL_MASK: 定义了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大权限 (这个我下面还会专门讨论)

ACL_OTHER: 相当于Linux里other的权限

让我们来据个例子说明一下. 下面我们就用getfacl命令来查看一个定义好了的ACL文件

代码:

[root@zyq-server data]# getfacl test.txt

# file: test.txt

# owner: root

# group: family

user::rw-

user:zyq:rw-

group::rw-

group:jackuser:rw-

mask::rw-

other::---

前面三个以#开头的定义了文件名,文件所有者和文件拥有组. 这些信息没有太大的作用,我

们可以用 --omit-header来省略掉

ACL可以为某个文件单独设置该文件具体的某用户或组的权限,不走三类权限位

默认 ACL 权限的作用是:如果给父目录设定了默认 ACL 权限,那么父目录中所有新建的子文件都会继承父目录的 ACL 权限。但是要加 -R

※ACL权限更高,会先查看ACL再看传统的权限。如果没有ACL才会走三类权限位

※如果一个用户在ACL的user中一个权限,他所在的ACL的group中是另外一个权限,会按照user权限来

• getfacl <文件名>

获取文件的访问控制信息

• setfacl设置文件的acl

-m修改文件的acl

-x取消用户或组对文件的权限

语法:

• setfacl –m u:用户名:权限 <文件名> 设置某用户名的访问权限

• setfacl –m g:组名:权限 <文件名> 设置某个组的访问权限

例1: 想要实现这个↓需求

user1:rwx,user2:rw-,user3:r-x,user4:r--,user5:--x,user6:-w-,

传统权限无法满足上述要求,这时就可以用↓命令进行权限添加

建一个名字为1的文件,查看文件1的权限↓

设置权限

修改后看文件1的权限↓

例2:

有组A(groupA)和组B(groupB)两个组,文件1所属于A组,如果通过三类权限位设置文件权限,其他用户没有任何权限,而B组为其他用户,因此无法对文件1进行任何 *** 作。这时可以通过ACL给组B设置权限:

setfacl -m g:groupB:r 1 B组里的所有成员就有读权限了

• setfacl –x u:用户名 <文件名>//取消某用户的访问权限

• setfacl –x g:组名 <文件名>//取消某个组的访问权限

❉↑这时是将这个user或group的ACL整个删除,如果只是想删除某一个权限,还是需要setfacl -m来进行重新设置

例3:

setfacl -m d:u:qin:rwx /caiwubu

d:default,即将caiwubu这个文件夹的权限对qin开放rwx权限,getfacl /caiwubu的时候会发现有一条default:user:qin:rwx。即在/caiwubu文件夹里 新建 的文件夹以及文件对qin的权限都为rwx,但是之前已经存在的文件及文件夹的权限在修改ACL权限之前是什么现在还是什么

setfacl -x u:qin /caiwubu/zhangben 取消qin这个用户对该文件的acl权限

取消qin这个用户对该文件的acl权限

❀如果这个文件给两个及两个以上的用户设定了ACL,取消其中一个用户的权限可以用这个命令。但是如果这个文件只给一个用户设定了ACL且想删除ACL,或者想把该文件里所有的ACL权限都删除的话,需要用↓的命令

setfacl -b /caiwubu/zhangben

关于权限列的.和+:

ls -lZ :

drwxrwxrwt. root root system_u:object_r:tmp_t:s0 tmp

dr-xr-xr-x root root system_u:object_r:boot_t:s0 boot

drwxrwxr-x+ root root unconfined_u:object_r:admin_home_t:s0 DCGH-DIR

Linux权限列的点不是无意义字符

・在开启SELinux的情况下创建的目录和文件有这个点,权限列有这个点说明该目录或文件设置了SELinux相关的权限①

・在禁用SELinux权限之后,在之前开启SELinux权限时创建的文件或目录保持原来的权限不便,权限列的点依然显示,而新创建的目录或文件在权限列无这个点显示②

・权限列中最后一个位置如果是加号,说明这个目录或文件已经设置了ACL权限相关的内容。如果加号存在,则已经有点的目录或文件中的点的显示会被覆盖,但原来的SELinux属性保持不变


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8595731.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存