linux文件夹acl,Linux系统中文件的ACL权限

管理员的工作中,相当重要的一环就是“管理账号”。因为整个系统都是你在管理,并且所有一般用户的账号申请必须要经过你的协助。在前两篇博客中,我们分别介绍文件的基础权限和特殊权限,也一直在强调权限的重用性,但是传统的权限仅有三种身份(ower、group、others)搭配读、写、执行(r、w、x)三种权限,并不能单纯针对某一个用户或某一个组来设置特定的权限需求,这时我没就不得不使用ACL(访问控制列表)了。

一、什么是 ACL

ACL是 Access Control List 的缩写,主要是目的是提供除属主、属组、其他人基本权限之外的具体权限设置。ACL 可以针对单一用户、单一文件或目录来进行r、w、x权限的设置,对于需要特殊权限的使用情况非常有用。ACL 主要针对以下几个情况:用户(user):可针对用户来设置权限;

用户组(group):可针对用户组来设置权限;

默认属性(mask):可设置该目录下新建新文件、目录时设置新数据的默认权限;

二、启动 ACL

上面介绍了ACL权限的设置对象及设置场景,那么如何让你的文件支持ACL呢,接下来带大家看看。

由于 ACL 是传统的UNIX-like(类UNIX)操作系统权限的额外支持项目,因此要使用 ACL 必须要有文件系统的支持才行。目前绝大部分的文件系统都有支持 ACL 权限的功能,最新的CentOS 7 操作系统默认创建分区并写入文件系统时会附加 ACL 属性,CentOS 6 中新建的分区并写入文件系统默认不会添加acl属性。查看 ACl 属性

查看分区是否就有 acl 权限我们可以使用 tune2fs 命令:[root@centos7 /]#

[root@centos7 /]# mount /dev/sdb3 /mnt  # 查看时,必须将分区挂载起来

[root@centos7 /]# tune2fs -l /dev/sdb3

tune2fs 1.42.9 (28-Dec-2013)

Filesystem volume name:   

Last mounted on:          

Filesystem UUID:          9a9bac28-da60-4351-a21f-c6529385e944   # 分区UUID号码,唯一表示符

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      has_journal ext_attr resize_inode ...后面省略  # 文件系统特性

Filesystem flags:         signed_directory_hash

Default mount options:    user_xattr acl     # 具有acl权限

...中间省略...

Journal backup:           inode blocks

[root@centos7 /]#

使用tune2fs命令可以查看文件是否具有acl属性,但对于自身默认没有附加acl的分区,我们如何添加权限并查看呢?tune2fs其实查看的是分区超级块的信息。#.*.---------mount命令查看挂载属性-----------.*.#

[root@centos7 /]# mount

...省略...

/dev/sdc1 on /app type xfs (rw) # 没有acl权限,即默认挂载时不携带acl权限

...省略...

#.*.---------mount临时添加acl权限-----------.*.#

[root@centos7 /]# mount -o remount,acl /dev/sda3     # 给/dev/sdc3这个新分区添加acl权限

[root@centos7 /]# mount

...省略...

/dev/sdc1 on /app type xfs (rw,acl) # 添加acl权限成功,这里只是临时生效,

...省略...

[root@centos7 /]#

#.*.---------acl属性永久有效-----------.*.#

[root@centos7 /]# vim /etc/fstab

在文件最后追加以下条目并保存退出:

UUID=939ea6b9-9aa5-421c-908f-73691670ab75 /mnt/sdc1  ext4  defaults 0 0

[root@centos7 /]# mount -a  # 重新加载/etc/fstab文件中的挂载信息,这样下次启动就生效了

[root@centos7 /]#

说明:用mount单纯的取查阅不见得能看到实际的选项,由于目前新的distributions经常会加入某些默认的功能

mount -o remount(acl,rw,ro,nodev...) :表示重新挂载并添加属性,具体会在后续的磁盘管理中说明

/etc/fstab 是挂载条目的配置文件:从左到右的每段含义分别是:

设备名(UUID、/dev/sd*、卷标名)  挂载目录   文件系统类型    权限    备份频率   是否开机检查

分区格式化后就会给分配一个UUID,他能唯一标识该分区;可使用命令blkid查看

三、ACL的设置

保证了文件系统启用了ACL支持之后,接下来便是如何设置ACL属性了,ACL属性的设置主要包括添加ACL属性和读取ACL权限,以及ACL的备份与恢复。

1、设置acl

设置ACL即添加ACL权限,使用 setfacl 命令来实现,下面看看 setfacl 的用法[root@centos7 /]# setfacl -[mbkdR... ][-m|-x acl参数 ] file(目标文件)

选项:-m : 设置后续的 acl 参数给文件使用,不可与 -x 一起使用

-b : 删除说有 acl 设置参数

-x : 删除后续的 acl 参数,不可与 -m 合并

-k : 删除默认的 acl 参数

-d : 设置默认的 acl 参数,只对目录有效,在该目录新建的数据会引用此默认选项

-R : 递归设置 acl,子目录都会继承该属性

我们知道ACL的设置有很多种,包括单一用户ACL设置、组ACL设置、以及目录ACL设置;其具体用法如下:#.*.---------单一用户设置ACL-----------.*.#

[root@centos7 ~]# cd /app

[root@centos7 app]# touch 1.txt   # 创建一个文件1.txt

[root@centos7 app]# ll 1.txt

-rw-r--r--. 1 root root 0 Aug 10 14:41 1.txt  # 查看文件属性为基本属性

[root@centos7 app]# setfacl -m u:harry:rx 1.txt  # 设置harry用户在该文件上的权限为rx

[root@centos7 app]# ll 1.txt

-rw-r-xr--+ 1 root root 0 Aug 10 14:41 1.txt # 再次查看文件,权限部分多了个 + ,而且组权限发生了改变

#.*.---------所有用户设置ACL-----------.*.#

[root@centos7 app]# setfacl -m u::rwx 1.txt

[root@centos7 app]# ll 1.txt

-rwxr-xr--+ 1 root root 0 Aug 10 14:41 1.txt

[root@centos7 app]#

#.*.------------组设置ACL-----------.*.#

[root@centos7 app]# set -m g:t1:rx 1 # 设置 t1 组在该文件上的ACl权限为ro(只读)

[root@centos7 app]# ll 1.txt

-rw-r-xr--+ 1 root root 0 Aug 10 14:41 1.txt # 发现看不出什么变化

[root@centos7 app]#

说明:上述设置文件的ACL属性,我们只能宏观的看到,组权限发生了改变,并且在权限位后面多了一个 + ,但我们确不能详细的看到具体的 ACL 权限。

2、读取acl

读取一个文件的 ACL 权限,我们使用命令 getfacl ,该命令能详细的查看文件的 ACL 信息。getfacl 的用法几乎和setfacl相同,我们以实例来理解:[root@centos7 app]# getfacl 1.txt  # 获取1.txt文件的 ACL 信息

# file: 1.txt   # 文件名

# owner: root   # 文件的属主

# group: root   # 文件的属组

user::rwx         # 用户列表为空,代表文件属主的权限

user:harry:r-x    # 针对用户harry的权限设置为rx

group::r--        # 组列表为空,代表文件属组的权限

group:t1:r--      # 上面设置过 t1 组的权限,所以在这里显示出来了

mask::r-x         # 此文件默认的有效权限,此选项可控制权限的上限

other::r--        # 其他人拥有的权限

[root@centos7 app]#

说明:通过getfacl命令查阅到的文件的 ACL 属性 ,更加详细。数据前面带 # 的,表示该文件的默认属性,包括文件名、文件属主、文件属组。而未加 # 的行则代表不同用户、用户组的有效权限。

3、mask值含义及作用

ACL属性中的mask值定义了自定义用户、自定义组,拥有组能够使用的最大属性,相当于一个限高线,该mask值与文件属组的权限是由关系的,当你改变mask值时,文件的属组权限也会做相应的改变。[root@centos7 app]# setfacl -m mask:r 1.txt   # 设置mask值为r

[root@centos7 app]# getfacl 1.txt  # 查看ACL属性

# file: 1.txt

# owner: root

# group: root

user::rwx

user:harry:r-x            #effective:r--     #  harry组最高权限为r

group::r--

mask::r--

other::r--

[root@centos7 app]# setfacl -m mask:- 1.txt  # 设置mask值为空

[root@centos7 app]# getfacl 1.txt

# file: 1.txt

# owner: root

# group: root

user::rwx

user:harry:r-x            #effective:--- # 由于mask值为空,所以有效的权限也就为空,即不具有任何权限

group::r--                #effective:---

mask::---

other::r--

[root@centos7 app]# ll 1.txt

-rwx---r--+ 1 root root 0 Aug 10 14:41 1.txt  # 查看文件的属性,发现属组的权限也发生了相应改变

[root@centos7 app]#

说明harry用户的权限和mask的值的交集为 r ,因此 harry 用户只有 r (读)权限

mask值规定可最大有有效权限,这样可以避免不小心开放某些权限个其他用户或用户组

个人建议可以给mask的只为rwx ,这样只用对用户或用户组单独设置ACL属性即可

4、acl的备份和恢复

acl权限的备份和恢复主要是通过复制,移动、重定向来实现的。但需要注意的是:主要的文件操作命令cp和mv都支持ACL,但是使用cp命令时需要加上-p参数。像tar等常见的备份工具是不会保留目录和文件的acl信息的。#.*.------------备份ACL-----------.*.#

[root@centos7 app]# getfacl -R 1.txt >acl.bak # 获得1.txt文件的ACL信息重定向到acl.bak文件中

[root@centos7 app]# cat acl.bak  # 查看acl.bak内容,其结果和 getfacl 1.txt 结果一致,说明备份成功

# file: 1.txt

# owner: root

# group: root

user::rwx

user:harry:r-x    #effective:---

group::r--    #effective:---

mask::---

other::r--

#.*.-----------恢复ACL-----------.*.#

[root@centos7 app]# setfacl -R -b 1.txt  # 备份前先清空文件的ACL信息

[root@centos7 app]# getfacl 1.txt  # 再次查看,发现ACL权限回到了原始状态

# file: 1.txt

# owner: root

# group: root

user::rwx

group::---

other::r--

[root@centos7 app]# setfacl -R --set-file=acl.bak 1.txt  # 用acl.bak文件恢复1.txt的ACL信息

[root@centos7 app]# getfacl 1.txt  # 再次查看,权限又重新回归

# file: 1.txt

# owner: root

# group: root

user::rwx

user:harry:r-x            #effective:---

group::r--            #effective:---

mask::---

other::r--

[root@centos7 app]#

说明:恢复文件ACL属性的方法不仅局限于上述实例中的方法,还可以使用:

setfacl --restore acl.txt

谢谢阅读!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值