Linux 中的 getfacl 命令用于查看文件的 ACL 信息。
对于每一个文件和目录,getfacl 命令显示
文件的名称、
用户所有者、
组群所有者和访问控制列表(ACL)。
Linux获取acl(getfacl)
功能:用于获取文件的 ACL 信息。
语法:getfacl [option] file`
参数
| 参数 | 描述 |
| options | getfacl 命令使用的参数。 |
| files | 需要获取 ACL 的文件或目录。 |
getfacl命令常用参数
| 选项 | 含义 |
| -a | 显示文件的 ACL。 |
| -d | 显示默认的 ACL。 |
| -c | 不显示注释标题。 |
| -e | 显示所有的有效权限。 |
| -E | 显示没有的有效权限。 |
| -s | 跳过文件,只具有基本条目。 |
| -R | 递归到子目录。 |
| -t | 使用表格输出格式。 |
| -n | 显示用户的 UID 和组群的 GID。 |
Linux getfacl命令常用实例
实例
| 实例 | 描述 |
| getfacl file | 查看文件 file 的 ACL 权限。 |
获取文件的ACL
语法
getfacl file
案例
我们使用 [touch]命令,创建一个 haicoder.txt 文件,具体命令如下:
touch haicoder.txt
现在,我们使用 getfacl 命令,查看文件 haicoder.txt 的 ACL,具体命令如下:
getfacl haicoder.txt
我们将看了到haicoder.txt 文件的 ACL 策略。
Linux getfacl命令总结
Linux 中的 getfacl 命令用于查看文件的 ACL 信息。对于每一个文件和目录,getfacl 命令显示文件的名称、用户所有者、组群所有者和访问控制列表(ACL)。
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属性保持不变
自主访问控制(Discretionary Access Control, DAC)是指对象(比如程序、文件、进程)的拥有者可以任意修改或者授予此对象相应的权限。Linux的UGO(User, Group, Other)和ACL(Access Control List)权限管理方式就是典型的自主访问控制。UGO将权限信息存储在节点的权限中,ACL将权限位信息存储在节点的扩展属性中。
当一个文件创建后,它具有读(r)、写(w)、执行(x)三种 *** 作方式。UGO权限管理方式将访问文件的 *** 作者简单分为三类:文件属主(u)、同组用户(g)与其他组用户(o)。
文件的三种 *** 作方式用三个二进制位表示,第一位表示读权限,第二位表示写权限,第三位表示执行权限。一个文件的权限属性就是有三类用户对该文件的权限使能的集合。
当我们用ls查看一个文件的时候,会显示如下结果
最前面的’-’,表示文件为普通类型
第一组的‘rw-’,表示文件属主对文件具有读和写权限,但没有执行权限
第二组的’rw-’,表示同组其他用户对文件具有读和写权限,但没有执行权限
第三组的’r--’,表示其他组用户对文件具有读权限,但没有写和执行权限
上述每一组权限用可以用二进制表示,例如’rw-’,二进制表示是110,十进制数值是6,‘r--’,二进制表示100, 十进制数值是4;所以对每一组权限都可以用十进制来表示。当使用chmod修改文件权限的时候就可以使用十进制代替‘rwx’,例如
当然也可以通过chmod u+x,o+w test实现与上述同样的功能。具体使用哪种方式,单凭个人喜好。
在linux下一切皆文件,目录也不例外,但目录的读写执行权限与普通文件的读写执行权限含义有所不同,如下所示
1.1节描述了常用的权限位,但还有几个特殊的权限位需要知道,分别是s(suid),s(sgid), t(Sticky Bit)。首先看一下linux下的/usr/passwd文件和/tmp目录
可以看到/usr/bin/passwd的第一组权限位和上一节有所不同,第三个标志位变成了s。当属主用户对文件设置了suid位后,其他用户在执行该文件的时候则具有等同于属主的权限。
还是以passwd命令为例,普通用户可以用passwd修改自己的密码,而用户密码的hash存储在/etc/shadow文件中,修改密码必然要修改此文件,我们看下此文件
发现只有root用户可以修改此文件,也就是说当普通用户执行passwd命令的时候,其权限变为root的权限,故可以修改/etc/shadow文件。
guid类似
SUID对目录没有影响,SGID对目录有影响,对于设置了SGID的目录,所有用户在该目录下新建的文件属主属于该用户,但GID是该目录所属的组,如下
而对于t,又叫粘着位,仅对目录生效。在具有t位的目录下,如果用户在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权力删除。/tmp目录则是最好的例子,每个应用都可以在tmp目录下新建删除自己的文件,但却不能删除其应用建立的文件。
那么如何修改文件的sst权限呢?还是使用chmod命令,由第一节我们知道可以用十进制数值设置UGO对文件的访问权限,同样对于特殊权限位,也可以使用。只需在原来的数值前面加上sst的十进制数值。有时候我们还会看到大写的SST,那是因为可执行位为0,所以显示为大写,例如
先做一个实验,在linux下分别建立一个目录和一个文件,查看其权限位
可以看到,新建的目录全显示775,新建的文件是664,为什么新建的文件和目录权限不是777呢?就是由于掩码的存在,当用户新建一个目录的时候,是777与掩码做与 *** 作,当用户新建一个文件的时候,是666与掩码做与 *** 作。可以用umask命令查看当前系统掩码
当然,还可以通过umask命令修改系统掩码,新建文件的权限位也跟着改变。
UGO权限管理方式只能对属主、同组用户和其他组用户进行权限管理,很难对每个用户或用户组进行权限管理。比如有多个用户想问房一个目录,但是每个人又要求不一样的权限,ACL就是为了这种局限性而生的。
例如下图所示:
从图中可以看出,传统的UGO权限管理,的确可以规定一些用户的rwx权限,但是管理粒度太粗糙了,如果想实现对指定用户,指定用户组精细化的权限控制,那么需要借助Linux ACL来实现!
Linux ACL(Access Control List, 访问控制列表),它是对UGO权限管理的方式进行了扩展、可以对任意的用户/组分配读、写和执行权限。
其常用的命令有getfacl和setfacl。
首先看一下几种类型
设置ACL的命令是setfacl,-m选项表示修改acl规则,使用方式是setfacl -m {u|g}:{user|group}:rwx
u表示设置ACL_USER的权限,g表示修改ACL_GROUP的权限
例子如下
可以看到,当设置ACL规则后,ls 查看权限位,在权限位后增加了一个’+’号。
上述例子演示了如何给指定用户和指定组增加rwx权限,当然rwx权限和UGO权限一样,可以随意修改。
设置完成后,xlzh用户和dhcpd组的用户对该文件具有读、写、执行的权限。
再看定义,ACL掩码定义了ACL_USER、ACL_GROUP_OBJ,ACL_GROUP的最大权限。举例如下
有上述例子可知两点:
1、当文件设置ACL规则后,权限位的第二组显示的不再是属主同组对该文件的访问权限,而是显示ACL的掩码。所以当ls看到权限位后面有‘+’号时,应该使用getfacl查看文件属主所在组的权限。
2、当修改ACL的掩码后,例如把掩码修改为r--,则可以看到ACL_USER,ACL_GROUP_OBJ和ACL_GROUP三行后面增加了#effective:r—,表示这三种类型实际生效的权限只有读权限,为什么会这样?再看ACL_MASK的定义:ACL_USER、ACL_GROUP_OBJ,ACL_GROUP的最大权限。即当把掩码修改为r--后,也就限制了三种类型最大的权限范围,只能小于掩码,不能大于掩码。
默认ACL仅对目录有效, 为了让子目录和自文件继承父母路权限而生 。如果对一个目录设置了默认ACL规则,则在该目录下建立的所有文件都继承此目录的ACL规则。实例如下
上述实例有一点需要注意:
1、当为dir设置完默认ACl规则后,只是说dir目录下的所有文件和继承该目录的所有ACL规则,并不是是说该目录已经具备了该ACL规则。如果Nets也想拥有对应的权限,那么还要用相应的命令单独设置!
如果user权限和group权限遇到冲突的时候,会以user 权限为主。
还有一种用户比较隐晦,也是以user的第一个权限为最高优先级,这种用户就是文件所属的用户。
1、普通ACL规则可以设置普通文件和目录文件,是对UGO文件权限方式的补充
2、默认ACL规则只对目录生效,且被该目录下的文件继承,而对该目录本身的权限,还需要使用普通ACL规则
3、设置ACl规则后,文件属组的权限位显示的acl规则的掩码,不再是原来的含义
4、ACL规则的掩码限制了ACL_USER、ACL_GROUP、ACL_GROUP_OBJ的最大权限
1. https://www.cnblogs.com/gordon0918/p/5280309.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)