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 命令:

[[email protected] /]# 
[[email protected] /]# mount /dev/sdb3 /mnt  # 查看时,必须将分区挂载起来
[[email protected] /]# tune2fs -l /dev/sdb3
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
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
[[email protected] /]#

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

#.*.---------mount命令查看挂载属性-----------.*.#

[[email protected] /]# mount
...省略...
/dev/sdc1 on /app type xfs (rw) # 没有acl权限,即默认挂载时不携带acl权限
...省略...

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

[[email protected] /]# mount -o remount,acl /dev/sda3     # 给/dev/sdc3这个新分区添加acl权限
[[email protected] /]# mount 
...省略...
/dev/sdc1 on /app type xfs (rw,acl) # 添加acl权限成功,这里只是临时生效,
...省略...
[[email protected] /]#

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

[[email protected] /]# vim /etc/fstab
在文件最后追加以下条目并保存退出:
UUID=939ea6b9-9aa5-421c-908f-73691670ab75 /mnt/sdc1  ext4  defaults 0 0 
[[email protected] /]# mount -a  # 重新加载/etc/fstab文件中的挂载信息,这样下次启动就生效了
[[email protected] /]#

说明:

  • 用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 的用法

[[email protected] /]# 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-----------.*.#

[[email protected] ~]# cd /app
[[email protected] app]# touch 1.txt   # 创建一个文件1.txt
[[email protected] app]# ll 1.txt 
-rw-r--r--. 1 root root 0 Aug 10 14:41 1.txt  # 查看文件属性为基本属性
[[email protected] app]# setfacl -m u:harry:rx 1.txt  # 设置harry用户在该文件上的权限为rx 
[[email protected] app]# ll 1.txt 
-rw-r-xr--+ 1 root root 0 Aug 10 14:41 1.txt # 再次查看文件,权限部分多了个 + ,而且组权限发生了改变

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

[[email protected] app]# setfacl -m u::rwx 1.txt 
[[email protected] app]# ll 1.txt 
-rwxr-xr--+ 1 root root 0 Aug 10 14:41 1.txt
[[email protected] app]# 

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

[[email protected] app]# set -m g:t1:rx 1 # 设置 t1 组在该文件上的ACl权限为ro(只读)
[[email protected] app]# ll 1.txt 
-rw-r-xr--+ 1 root root 0 Aug 10 14:41 1.txt # 发现看不出什么变化
[[email protected] app]#

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

2、读取acl

读取一个文件的 ACL 权限,我们使用命令 getfacl ,该命令能详细的查看文件的 ACL 信息。getfacl 的用法几乎和setfacl相同,我们以实例来理解:

[[email protected] 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--        # 其他人拥有的权限

[[email protected] app]#

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

3、mask值含义及作用

ACL属性中的mask值定义了自定义用户、自定义组,拥有组能够使用的最大属性,相当于一个限高线,该mask值与文件属组的权限是由关系的,当你改变mask值时,文件的属组权限也会做相应的改变。

[[email protected] app]# setfacl -m mask:r 1.txt   # 设置mask值为r
[[email protected] 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--

[[email protected] app]# setfacl -m mask:- 1.txt  # 设置mask值为空
[[email protected] 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--

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

说明

  • harry用户的权限和mask的值的交集为 r ,因此 harry 用户只有 r (读)权限
  • mask值规定可最大有有效权限,这样可以避免不小心开放某些权限个其他用户或用户组
  • 个人建议可以给mask的只为rwx ,这样只用对用户或用户组单独设置ACL属性即可

4、acl的备份和恢复

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

#.*.------------备份ACL-----------.*.#

[[email protected] app]# getfacl -R 1.txt >acl.bak # 获得1.txt文件的ACL信息重定向到acl.bak文件中
[[email protected] 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-----------.*.#

[[email protected] app]# setfacl -R -b 1.txt  # 备份前先清空文件的ACL信息
[[email protected] app]# getfacl 1.txt  # 再次查看,发现ACL权限回到了原始状态
# file: 1.txt
# owner: root
# group: root
user::rwx
group::---
other::r--

[[email protected] app]# setfacl -R --set-file=acl.bak 1.txt  # 用acl.bak文件恢复1.txt的ACL信息
[[email protected] app]# getfacl 1.txt  # 再次查看,权限又重新回归
# file: 1.txt
# owner: root
# group: root
user::rwx
user:harry:r-x            #effective:---
group::r--            #effective:---
mask::---
other::r--

[[email protected] app]#

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

setfacl --restore acl.txt

谢谢阅读!

时间: 2024-11-10 11:18:04

Linux系统中文件的ACL权限的相关文章

linux系统中文件的特殊权限

在上篇博客中叙述linux系统中文件的基本属性,见http://vinsent.blog.51cto.com/13116656/1951574,这篇给大家带来linux系统文件的特殊权限,包括SUID.SGID.Sticky(粘滞位). 一.安全上下文 安全上下文指的是一类定义某个进程允许做什么的许可和权限的集合.安全上下文的概念范围很广范,权限.特权.访问令牌.完整性等级等等都包含在其中.这里只简要说说linux系统对文件的安全控制: (1)进程有属主和属组,文件有属主和属组      (2)

在Linux系统中文件(资源)和用户的管理

一个可执行二进制程序,被加载到内存,被内核调度到CPU上运行,这时候,就表现了一个进程.也可以说进程是程序的一个实例,是程序的动态表现. 在 Linux 系统中进程(process)是有属主的,也就是该进程以哪个用户的身份运行的.大家都知道,程序有输入和输出,也称这为程序IO.如果我们程序数据输入是磁盘.如,Web 服务器,接收用户的请求之后,把网页数据从磁盘中读入加工之后再把数据响应给用户.如果,发起Web 服务进程的用户没有读取该用户请求网页文件的权限.则无法响应用户的请求了.所以,文件(资

Linux系统中文件定位与查找

Linux系统中文件查找 关键词 文件查找 | find | locate 本文主要介绍有关文件查找的两个命令--find和locate,以及压缩打包的命令--compress, gzip,bzip2,xz等.有问题或建议可发至邮箱[email protected] locate locate命令是通过查询Linux系统上预先构建的文件索引数据库,准确说来,这个数据库默认的位置是/var/lib/mlocate/mlocate.db,这个数据库一般由系统定时周期性更新,当然也可以通过update

linux系统中文件的权限

查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些:-rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是类型 中间那三个 rw- 代表的是所有者(user) 然后那三个 rw- 代表的是组群(group) 最后那三个 r-- 代表的是其他人(other) 然后我再解释一下后面那9位数: r 表示文件可以被读(read) w 表示文件可以被写(write) x 表示文件可以被执行(如果它是程序的话) -

在linux 系统中利用 facl 实现目录下创建文件继承父目录的权限的所属组

在linux 系统中,可以通过setfacl 来实现目录下创建文件或子目录,并继承父目录的权限. 下面以 root 用普通用户 user1 .在目录/mnt下 [[email protected] mnt]# setfacl -m u:user1:rwx share        //为目录添加ower = user1 ,并赋予rwx 的权根. [[email protected] mnt]# setfacl -d -m  u:user1:rwx share    //为目录添加默认的acl权限

Linux系统中的文件和目录权限

Linux下的文件或目录权限详解 1.1 权限介绍 1.linux下的文件或目录权限是由9个权限来控制的,每三位为一组,即文件属主(owner=主人=用户)的r.w.x:用户组(group=同组的=家人)的r.w.x:其他的人(other=外人=不在同一组)的r.w.x: 2.权限分组说明 3.r=read=4=cat;    w=write=2=echo   x=exexute=1    '-'=没有权限: 特殊权限:t .T.s.S.x.X.+等: 4.哪个用户创建的文件它的用户或者主人就是

Linux系统中修改/etc/profile文件的方法

在Linux系统中etc/profile文件一般是不能更改的,想要更改etc/profile文件就要用一些特殊的技巧进行Linux文件修改.本文就来介绍一下Linux系统中修改/etc/profile文件的方法: etc/profile文件是只读的,直接用vi或gedit打开修改后是无法保存的.要修改profile,需要取得root权限,(使用gedit编辑) $sudo gedit /etc/profile 或者 $sudo -s $gedit /etc/profile 这样打开profile

老男孩教育每日一题-2017年5月2日-Linux系统中,不小心把chmod命令的权限弄没了,怎么解决?

老男孩教育每日一题-2017年5月2日-Linux系统中,chmod命令没有执行权限(x权限)或者chmod命令文件的权限为000,怎么解决? 解决方法有两种: 方法一: [[email protected] bin]# cp cp /oldboy/chmod.new (此时复制cp命令文件命名叫chmod.new,此时chmod.new文件有就x的权限,但chmod.new不具备有chmod命令的共功能) [[email protected] bin]# cd /oldboy/ [[email

在linux系统中,如何使用【find】命令精确查找文件?

[find]是文件查找工具,它会遍历指定目录下所有文件的,所以使用该命令,查找文件的速度比较慢.但是它能够文件类根据型.文件的各做为条查件,找显示符合条件的文件目录. 一.既然,[find]是根据文件的特点来查看文种属性件的.那么先了解,文件有啥特点. 1.文件特点有很多,它们是分类的.find 命令如何表示文件特点的类别的: [find]命令是如何标识文件特点的类别的:              文件名称                   -name              文件类型