Chinaunix首页 | 论坛 | 博客
  • 博客访问: 507549
  • 博文数量: 158
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 904
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-10 11:17
文章分类

全部博文(158)

文章存档

2018年(74)

2017年(84)

我的朋友

分类: LINUX

2018-06-07 16:23:50

【摘要】

对于Linux的文件权限控制,我们并不能像windows那样灵活设置多个用户的访问权限,普遍使用的UGO权限管理方式只能对属主、同组用户和其他组用户进行权限管理,很难对每个用户或用户组进行权限管理。ACL就是为了这种局限性而生的。

ACL(Access Control List, 访问控制列表),它是对UGO权限管理的方式进行了扩展,可以对任意的用户/组分配读、写和执行权限。

 本文转自-学领未来

   UGO权限管理

当一个文件创建后,它具有读(r)、写(w)、执行(x)三种操作方式。UGO权限管理方式将访问文件的操作者简单分为三类:文件属主(u)、同组用户(g)与其他组用户(o)

文件的三种操作方式用三个二进制位表示,第一位表示读权限,第二位表示写权限,第三位表示执行权限。一个文件的权限属性就是有三类用户对该文件的权限使能的集合。当我们用ls查看一个文件的时候,会显示如下结果:

[root@racdg /]# touch test

[root@racdg /]# ll

-rwxr-xr--    2 root root  4096 Dec 28 13:13 test

最前面的’-’,表示文件为目录类型

第一组的‘rwx’,表示文件属主对文件具有读、写和执行权限

第二组的‘r-x’,表示同组其他用户对文件具有读和执行权限,但没有写权限

第三组的’r--’,表示其他组用户对文件具有读权限,但没有写权限和执行权限

这个时候其他用户是不能对这个文件进行修改的,尝试使用Oracle用户进行修改:

[oracle@racdg ~]$ id oracle

uid=202(oracle) gid=201(oinstall) groups=201(oinstall),202(dba)

[oracle@racdg ~]$ vim test

E45: 'readonly' option is set (add ! to override) 

按照一般的方法,我们可以使用chmodchown命令对该文件权限进行修改,但是如果涉及多个用户,而且要求对一部分用户只有只读权限,另一部分用户有读写权限的时候,就会发现权限位是不够的,那么这个时候就可以使用ACL了。

   ACL权限管理

首先看一下几种类型

类型

定义

ACL_USER_OBJ

文件属主的权限

ACL_USER

额外用户的权限

ACL_GROUP_OBJ

文件属组的权限

ACL_GROUP

额外组的权限

ACL_MASK

ACL_USERACL_GROUP_OBJ,ACL_GROUP的最大权限

ACL_OTHER

其他组的权限

设置ACL的命令是setfacl-m选项表示修改acl规则:

使用方式是# setfacl  -m {u|g}:{user|group}:rwx file

u表示设置ACL_USER的权限,g表示修改ACL_GROUP的权限

查看当前test文件的属性:

[root@racdg tmp]# getfacl test

# file: test

# owner: root

# group: root

user::rw-

group::r--

other::r—

现在将文件的读、写、执行权限授予Oracle用户,同时不修改该文件的属主、属组。

[root@racdg tmp]# setfacl -m u:oracle:rwx test 

[root@racdg tmp]# ll

-rw-rwxr--+ 1 root root    8 Dec 28 13:36 test

[root@racdg tmp]# getfacl test                

# file: test

# owner: root

# group: root

user::rw-                    //ACL_USER_OBJ

user:oracle:rwx             //ACL_USER

group::r--                   //ACL_GROUP

mask::rwx                    //ACL_MASK

other::r—                    //ACL_OTHER

这个时候oracle就可以对这个文件进行读写操作了。

 

可以看到,当设置ACL规则后,ls 查看权限位,在权限位后增加了一个’+’号,这个也方便我们以后在判断文件权限的时候做个参考。

ACL权限删除:

[root@racdg tmp]# setfacl -x u:oracle test

[root@racdg tmp]# getfacl test

# file: test

# owner: root

# group: root

user::rw-

group::r--

mask::r--

other::r--

 

   应用场景

    最近在客户处接到个需求,就是搭建一个sftp服务器供文件的读取和下载,但是每个用户的权限不尽相同。如图,A用户需要对fileA有读写权限,对fileB有读权限;B用户需要对fileB有读写权限,对fileA有读权限;而C用户需要对fileAfileB都要有读权限。对于这个需求,我曾经尝试通过用户组的方式控制权限,但是绞尽脑汁还是满足不了需求,然后通过ACL的方式,几条命令就解决了一开始以为非常棘手的问题:


 


[root@racdg tmp]# setfacl -R -m u:userA:rwx fileA

[root@racdg tmp]# setfacl -R -m u:userA:rx fileB 

[root@racdg tmp]# setfacl -R -m u:userB:rwx fileB

[root@racdg tmp]# setfacl -R -m u:userB:rx fileA

[root@racdg tmp]# setfacl -R -m u:userC:rx fileA

[root@racdg tmp]# setfacl -R -m u:userC:rx fileB


 

阅读(1663) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~