Linux平台及应用
潘小玲 郑国华 丁敏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

使用ACL权限

发布时间:2020-04-19 20:41   发布人:潘小玲   浏览次数:384

(6)使用ACL权限

(6.1) ACL权限

传统的UNIX/Linux使用UGO方式设置权限,具体地说就是通过user (用户)、group(组)、other (其他人)与r (读)、w (写)、x (执行)的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求,具有一定的局限性 。

例如,目录/data的权限如下:

drwxr-x-- 13 root root 4096 01-12 21:05 /data

所有者与所属组均为root, 在不改变所有者的前提下,要求用户tom对该目录有完全访问权限(rwx)。只能考虑以下两种办法(这里假设tom不属于root 组)。

(1)给/data的其他人增加rwx权限。由于tom被归为其他人,其将拥有rwx权限。

drwxr-xrwx 13 root root 4096 01-12 21:05 /data

(2)将tom加入到root组,并为root组分配rwx 权限,那么其将拥有rwx权限。

drwxrwx--- 13 root root 4096 01-12 21:05 /data

以上两种方法其实都不合适:第一种方法将导致所有其他人都具有rwx权限而非tom一个人;第二种方法将导致所有root的同组人都具有rwx权限而非tom个人。

因此传统的权限管理设置起来就力不从心了。为了解决这些复杂的权限控制问题,就有了IEEE POSIX 1003.1le这个ACL的标准,Linux也开发出了一套符合该标准的文件系统权限管理方案。

所谓ACL就是访问控制列表(Access Control List),为了与其他的ACL相区别,有时也称文件访问控制列表(FACL)。一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。

支持ACL需要内核和文件系统的支持。Linux从2.6版内核开始支持ACL.不是所有类型的文件系统均支持ACL,但Linux 2.6内核配合常用的ext2/ext3/ext4、jfs、xfs、ReiserFS 等

文件系统,都可以支持ACL。

有两种类型的ACL:

Ø  一种是存取ACL (access ACLs),针对文件和目录设置访问控制列表。

Ø  一种是默认ACL (default ACLs),只能针对目录设置。如果目录中的文件没有设置ACL,就会使用该目录的默认ACL。

(6.2)CentOS下的ACL

CentOS 7默认支持ACL。

Ø  CentOS7 的Linux内核版本3.10.0 支持ACL。

Ø  默认使用的xfs和ext4文件系统也支持ACL。

Ø  软件包acl提供了用于查看和设置ACL的工具。

(6.3) 使用setfacl设置ACL权限

setfacl命令的语法如下:

setfacl [-R] {-m]-x} <rules> <files or directory>

下表中列出了setfacl命令的选项说明。

 

setfacl 命令的选项说明

选项

说明

-R

对目录进行递归操作

-m

修改ACL权限

X

删除ACL权限

<rules>

指定ACL模式规则,可用如下形式。

●[d:]u:ud:perms:为指定的用户(使用UID或用户名)设置ACL权限。

●[d;]g-gid:perms:为指定的组(使用GID或组名)设置ACL权限。

●[d;]o:;]perms:为其他用户设置ACL权限。

●[];]:[:]perms:设置有效的访问掩码。

其中:

●使用d:前缀时用于设置默认ACL(d:前级仅能对目录设置).

perms为下w、x、-或其组合

操作步骤3.10使用setfacl命令设置ACL权限

//允许osmond用户对myfile文件进行读、写、执行

# setfacl -m u:osmond:rwx myfile

//允许osmond用户对mydir目录进行读、写、执行

# setfacl -m u:osmond:rwx mydir

//允许market组对/shar/project/marketdir目录进行读、写

# setfacl -m g:market:rw /share/project/marketdir

//允许rzpt用户对/share/docs目录进行读、写

#setfacl -m d:u:rzpt:rw /share/docs

//删除osmond用户对/share/project 目录操作的ACL

#setfacl -x u:osmond /share/project

//对/share/data/目录设置默认ACL:允许doc组读、写、执行

//同时对/share/data/目录及其所有子目录递归地设置存取ACL

//允许doc组读、写、执行并禁止staff组读、写、执行

# stfacl -R -m g;doc:rwx,d:g:doc:rwx,g;staff: . - /share/data/

//对所有用户和所有组撤销对myfile的写权限

# setfacl -m m:nx myfile

(6.4) 使用getfacl查看ACL权限

getfacl命令用于查看文件或目录的ACL设置,其格式如下:

getfacl <files or directory>

操作步骤3.11使用getfacl命令查看ACL权限

//查看/share/project目录的ACL权限

# getfacl /share/project

# fle: share/project

# owner: root

# group: root

user:rwx

user.osmond:rwx

group:r-x

mask:nwx

other:r-x

default:user.nwx

default:group.r-x

default:group:projects:rwx

default:mask;:rwx

default:other.:r-x

注意:

1.若目录已设置了默认ACL,则新创建的文件将从其目录继承默认ACL设置。

2.使用mv命令和cp-P命令操作文件时将保持ACL设置。