(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设置。