Linux ACL权限管理

    关于对文件和目录权限的(文件所有者,所属群组,其他用户)管理,查看文章:Linux 权限管理基本命令

一、ACL权限基础知识

1、什么是 ACL 权限?

      ACL,是 Access Control List(访问控制列表)的缩写,是一个针对文件/目录的访问控制列表。

      在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。

      也可以这么说,设定文件的访问权限,它在传统方式(3 种身份搭配 3 种权限)UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。。

2、ACL 权限有什么用

     ACL 权限作为UGO权限管理的补充,ACL自然要有UGO办不到或者很难办到的本事,例如:

1)可以针对用户来设置权限
2)可以针对用户组来设置权限
3)子文件/目录继承父目录的 ACL权限

3、检查系统是否支持ACL

     ACL需要Linux内核和文件系统的配合才能工作,当前大多数Linux发行版本默认都是支持的。

    CentOS7.X创建的xfs文件系统默认内置支持ACL功能。

    CentOS7.X之前版本,手工创建的ext4文件系统可能没有开ACL功能。如果没有需手动重新挂载开启,但一般情况都是开着的。最好还是查看一下,自行百度

4、检查系统是否安装ACL,一般情况都是安装了的,最好看一下:

[root@centos7 ~]# rpm -qa | grep acl   
acl-2.2.51-14.el7.x86_64
libacl-2.2.51-14.el7.x86_64
# 没看到就用yum安装一下这两个软件

二、ACL权限设置(setfacl和getfacl)

     设定 ACl 权限,常用命令有 2 个,经常搭配使用,分别是:

1)getfacl命令:用于查看文件或目录当前设定的 ACL 权限信息。使用非常简单

该命令的基本格式为:# getfacl 文件名

2)setfacl命令:用于设定用户或群组对指定文件或目录的 ACL访问权限。

此命令的基本格式为:# setfacl 选项 文件名

选项 功能
-m 参数 设定 ACL 权限。如果是给予用户 ACL 权限,参数则使用 "u:用户名:权限" 的格式,例如 setfacl -m u:st:rx /project 表示设定 st 用户对 project 目录具有 rx 权限;如果是给予组 ACL 权限,参数则使用 "g:组名:权限" 格式,例如 setfacl -m g:tgroup:rx /project 表示设定群组 tgroup 对 project 目录具有 rx 权限。不可与 -x 合用
-x 参数 删除指定用户(参数使用 u:用户名)或群组(参数使用 g:群组名)的 ACL 权限,例如 setfacl -x u:st /project 表示删除 st 用户对 project 目录的 ACL 权限。不可与 -m 合用
-b 删除所有的 ACL 权限,例如 setfacl -b /project 表示删除有关 project 目录的所有 ACL 权限。
-d 设定默认 ACL 权限,命令格式为 "setfacl -m d:u:用户名:权限 文件名"(如果是群组,则使用 d:g:群组名:权限),只对目录生效,指目录中新建立的文件拥有此默认权限,例如 setfacl -m d:u:st:rx /project 表示 st 用户对 project 目录中新建立的文件拥有 rx 权限。
-R 递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效,命令格式为 "setfacl -m u:用户名:权限 -R 文件名"(群组使用 g:群组名:权限),例如 setfacl -m u:st:rx -R /project 表示 st 用户对已存在于 project 目录中的子文件和子目录拥有 rx 权限。
-k 删除默认 ACL 权限。

针对用户设置ACL权限

[root@centos7 ~]# mkdir /root/d_acl
[root@centos7 ~]# useradd user1
[root@centos7 ~]# passwd user1
[root@centos7 ~]# ll
drwxr-xr-x  2 root root       6 2月  21 18:37 d_acl

1、setfacl -m:给用户设定 ACL 权限(rx):

[root@centos7 ~]# setfacl -m u:user1:rx /root/d_acl

    查看文件的ACL 权限

[root@centos7 ~]# ll
总用量 1240
drwxr-xr-x  5 root root     144 1月  19 11:45 abc
-rw-------. 1 root root    1440 12月  1 20:34 anaconda-ks.cfg
drwxr-xr-x+ 2 root root       6 2月  21 18:37 d_acl
# 如果ll查询时会发现,在权限位后面多了一个"+",表示此目录拥有ACL权限

[root@centos7 ~]# getfacl /root/d_acl/
getfacl: Removing leading '/' from absolute path names
# file: root/d_acl/
# owner: root
# group: root
user::rwx
user:user1:r-x   #用户user1的ACL权限
group::r-x
mask::r-x
other::r-x

此时,在d_acl目录中创建文件、目录是没有 ACL权限的

[root@centos7 ~]# cd d_acl
[root@centos7 d_acl]# touch aa.f
[root@centos7 d_acl]# mkdir d_aa
[root@centos7 d_acl]# ll
总用量 0
-rw-r--r-- 1 root root 0 2月  21 18:46 aa.f
drwxr-xr-x 2 root root 6 2月  21 18:46 d_aa

2、setfacl -m d:给目录设定默认 ACL 权限

     默认 ACL 权限的作用:如果给父目录设定了默认 ACL 权限,那么父目录中所有新建的子文件都会继承父目录的 ACL 权限。需要注意的是,默认 ACL 权限只对目录生效。

     对 d_acl目录设定默认ACL 权限

[root@centos7 d_acl]# setfacl -m d:u:user1:rx /root/d_acl/
[root@centos7 d_acl]# mkdir d_bb
[root@centos7 d_acl]# touch bb.f
[root@centos7 d_acl]# ll
总用量 0
-rw-r--r--  1 root root 0 2月  21 18:46 aa.f
-rw-r--r--+ 1 root root 0 2月  21 18:53 bb.f
drwxr-xr-x  2 root root 6 2月  21 18:46 d_aa
drwxr-xr-x+ 2 root root 6 2月  21 18:52 d_bb

3、setfacl -R:设定递归 ACL 权限

     递归 ACL 权限指的是父目录在设定 ACL 权限时,所有的子文件和子目录也会拥有相同的 ACL 权限。

[root@centos7 d_acl]# setfacl -m u:user1:rwx -R /root/d_acl/
[root@centos7 d_acl]# ll
总用量 0
-rw-rwxr--+ 1 root root 0 2月  21 18:46 aa.f
-rw-rwxr--+ 1 root root 0 2月  21 18:53 bb.f
drwxrwxr-x+ 2 root root 6 2月  21 18:46 d_aa
drwxrwxr-x+ 2 root root 6 2月  21 18:52 d_bb
[root@centos7 d_acl]# getfacl aa.f
# file: aa.f
# owner: root
# group: root
user::rw-
user:user1:rwx
group::r--
mask::rwx
other::r--

4、setfacl -x:删除指定用户的 ACL 权限

      删除指定用户和用户组的对 project 文件/目录的ACL权限

[root@centos7 d_acl]# setfacl -x u:user1 aa.f
[root@centos7 d_acl]# getfacl aa.f
# file: aa.f
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[root@centos7 d_acl]# ll
总用量 0
-rw-r--r--+ 1 root root 0 2月  21 18:46 aa.f
-rw-rwxr--+ 1 root root 0 2月  21 18:53 bb.f
drwxrwxr-x+ 2 root root 6 2月  21 18:46 d_aa
drwxrwxr-x+ 2 root root 6 2月  21 18:52 d_bb

5、setfacl -k:删除默认 ACL 权限

[root@centos7 ~]# setfacl -k /root/d_acl/
[root@centos7 ~]# touch d_acl/cc.f
[root@centos7 ~]# ll d_acl/
总用量 0
-rw-r--r--+ 1 root root 0 2月  21 18:46 aa.f
-rw-rwxr--+ 1 root root 0 2月  21 18:53 bb.f
-rw-r--r--  1 root root 0 2月  21 19:03 cc.f
drwxrwxr-x+ 2 root root 6 2月  21 18:46 d_aa
drwxrwxr-x+ 2 root root 6 2月  21 18:52 d_bb

6、setfacl -b:删除指定文件的所有 ACL 权限

      删除所有与指定文件或目录相关的 ACL 权限

[root@centos7 ~]# setfacl -b /root/d_acl/
[root@centos7 ~]# ll
总用量 1240
drwxr-xr-x  5 root root     144 1月  19 11:45 abc
-rw-------. 1 root root    1440 12月  1 20:34 anaconda-ks.cfg
drwxr-xr-x  4 root root      66 2月  21 19:03 d_acl
drwxr-xr-x  5 lisi lisi     256 7月   9 2011 manpages-zh-1.5.2
drwxr-xr-x  8  500  500    4096 1月  19 10:21 ntfs-3g_ntfsprogs-2017.3.23
-rw-r--r--  1 root root 1259054 1月  19 10:16 ntfs-3g_ntfsprogs-2017.3.23.tgz
[root@centos7 ~]# ll d_acl/
总用量 0
-rw-r--r--+ 1 root root 0 2月  21 18:46 aa.f
-rw-rwxr--+ 1 root root 0 2月  21 18:53 bb.f
-rw-r--r--  1 root root 0 2月  21 19:03 cc.f
drwxrwxr-x+ 2 root root 6 2月  21 18:46 d_aa
drwxrwxr-x+ 2 root root 6 2月  21 18:52 d_bb

   如果想递归删除目录下的 ACL权限:使用 -R

[root@centos7 ~]# setfacl -bR /root/d_acl/
[root@centos7 ~]# ll d_acl/               
总用量 0
-rw-r--r-- 1 root root 0 2月  21 18:46 aa.f
-rw-r-xr-- 1 root root 0 2月  21 18:53 bb.f
-rw-r--r-- 1 root root 0 2月  21 19:03 cc.f
drwxr-xr-x 2 root root 6 2月  21 18:46 d_aa
drwxr-xr-x 2 root root 6 2月  21 18:52 d_bb

7、最大有效权限 mask(了解)

      mask 权限,指的是用户或群组能拥有的最大 ACL 权限。也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。

      我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,实则是将两权限做“按位相与”运算,最终得出的值,一般默认mask权限都是rwx,一般不更改 mask 权限。

      mask 权限可以使用 setfacl 命令手动更改文件/目录的 mask 权限值:

# setfacl -m m:权限 文件名

三、sudo命令

sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 才能执行的操作,而不需要知道 root 的密码。

可以这样理解:sudo 命令允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。

当然,能做什么不能做什么都是通过安全策略来指定的。

默认的安全策略记录在 /etc/sudoers 文件中。

 

还有特殊权限SUID、SGID、Sticky等,了解 可参考网址:http://c.biancheng.net/view/877.html

 

ends ~

 

你可能感兴趣的:(#,Linux,Linux,ACL权限管理)