Linux UGO和ACL权限管理
自主访问控制(Discretionary Access Control, DAC)是指对象(比如程序、文件、进程)的拥有者可以任意修改或者授予此对象相应的权限。Linux的UGO(User, Group, Other)和ACL(Access Control List)权限管理方式就是典型的自主访问控制。UGO将权限信息存储在节点的权限中,ACL将权限位信息存储在节点的扩展属性中。
1、Linux UGO权限管理
1.1 普通权限
当一个文件创建后,它具有读(r)、写(w)、执行(x)三种操作方式。UGO权限管理方式将访问文件的操作者简单分为三类:文件属主(u)、同组用户(g)与其他组用户(o)。
文件的三种操作方式用三个二进制位表示,第一位表示读权限,第二位表示写权限,第三位表示执行权限。一个文件的权限属性就是有三类用户对该文件的权限使能的集合。当我们用ls查看一个文件的时候,会显示如下结果
xlzh@cmos:~$ ls -l test
-rw-rw-r-- xlzh xlzh 3月 : test
xlzh@cmos:~$
最前面的’-’,表示文件为普通类型
第一组的‘rw-’,表示文件属主对文件具有读和写权限,但没有执行权限
第二组的’rw-’,表示同组其他用户对文件具有读和写权限,但没有执行权限
第三组的’r--’,表示其他组用户对文件具有读权限,但没有写和执行权限
上述每一组权限用可以用二进制表示,例如’rw-’,二进制表示是110,十进制数值是6,‘r--’,二进制表示100, 十进制数值是4;所以对每一组权限都可以用十进制来表示。当使用chmod修改文件权限的时候就可以使用十进制代替‘rwx’,例如
xlzh@cmos:~$ ls -l test
-rw-rw-r-- xlzh xlzh 3月 : test
xlzh@cmos:~$ chmod test
xlzh@cmos:~$ ls -l test
-rwxrw-rw- xlzh xlzh 3月 : test
xlzh@cmos:~$
当然也可以通过chmod u+x,o+w test实现与上述同样的功能。具体使用哪种方式,单凭个人喜好。
在linux下一切皆文件,目录也不例外,但目录的读写执行权限与普通文件的读写执行权限含义有所不同,如下所示
权限位 | 文件 | 目录 |
r | 可以读文件 | 可以查看目录中内容 |
w | 可以写文件 | 可以增删目录中内容 |
x | 可以执行文件 | 可以进入目录 |
1.2 特殊权限
1.1节描述了常用的权限位,但还有几个特殊的权限位需要知道,分别是s(suid),s(sgid), t(Sticky Bit)。首先看一下linux下的/usr/passwd文件和/tmp目录
xlzh@cmos:~$ ls -l /usr/bin/passwd
-rwsr-xr-x root root 9月 /usr/bin/passwd
xlzh@cmos:~$ ls -ld /tmp
drwxrwxrwt root root 3月 : /tmp
xlzh@cmos:~$
可以看到/usr/bin/passwd的第一组权限位和上一节有所不同,第三个标志位变成了s。当属主用户对文件设置了suid位后,其他用户在执行该文件的时候则具有等同于属主的权限。
还是以passwd命令为例,普通用户可以用passwd修改自己的密码,而用户密码的hash存储在/etc/shadow文件中,修改密码必然要修改此文件,我们看下此文件
xlzh@cmos:~$ ls -l /etc/shadow
-rw-r----- root shadow 2月 : /etc/shadow
xlzh@cmos:~$
发现只有root用户可以修改此文件,也就是说当普通用户执行passwd命令的时候,其权限变为root的权限,故可以修改/etc/shadow文件。
guid类似
SUID对目录没有影响,SGID对目录有影响,对于设置了SGID的目录,所有用户在该目录下新建的文件属主输入该用户,但GID是该目录所属的组,如下
xlzh@cmos:~$ sudo mkdir -m test
xlzh@cmos:~$ ls -ld test
drwxrwsrwx root root 3月 : test
xlzh@cmos:~$ cd test
xlzh@cmos:~/test$ touch .txt
-rw-rw-r-- xlzh root 3月 : .txt
而对于t,又叫粘着位,仅对目录生效。在具有t位的目录下,如果用户在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权力删除。/tmp目录则是最好的例子,每个应用都可以在tmp目录下新建删除自己的文件,但却不能删除其应用建立的文件。
那么如何修改文件的sst权限呢?还是使用chmod命令,由第一节我们知道可以用十进制数值设置UGO对文件的访问权限,同样对于特殊权限位,也可以使用。只需在原来的数值前面加上sst的十进制数值。有时候我们还会看到大写的SST,那是因为可执行位为0,所以显示为大写,例如
xlzh@cmos:~$ ls -l test
-rw-rw-r-- xlzh xlzh 3月 : test
/*为文件增加sst,仅做演示,实际上t为对文件不生效*/
xlzh@cmos:~$ chmod test
/*为文件加上了suid, sgid, Sticky Bit位*/
xlzh@cmos:~$ ls -l test
-rwsrwsrwt xlzh xlzh 3月 : test
/*去除文件的可执行位*/
xlzh@cmos:~$ chmod test
/*显示为大写*/
xlzh@cmos:~$ ls -l test
-rwSrwSrwT xlzh xlzh 3月 : test
xlzh@cmos:~$
1.3 掩码
先做一个实验,在linux下分别建立一个目录和一个文件,查看其权限位
xlzh@cmos:~$ mkdir dir
xlzh@cmos:~$ touch test
xlzh@cmos:~$ ls -ld dir
drwxrwxr-x xlzh xlzh 3月 : dir
xlzh@cmos:~$ ls -l test
-rw-rw-r-- xlzh xlzh 3月 : test
xlzh@cmos:~$
可以看到,新建的目录全显示775,新建的文件是664,为什么新建的文件和目录权限不是777呢?就是由于掩码的存在,当用户新建一个目录的时候,是777与掩码做与操作,当用户新建一个文件的时候,是666与掩码做与操作。可以用umask命令查看当前系统掩码
xlzh@cmos:~$ umask xlzh@cmos:~$
新建目录是777与007做掩码,结果正是775,新建文件是666与002做掩码,结果正是664。
当然,还可以通过umask命令修改系统掩码,新建文件的权限位也跟着改变。
2、Linux ACL权限管理
UGO权限管理方式只能对属主、同组用户和其他组用户进行权限管理,很难对每个用户或用户组进行权限管理。ACL就是为了这种局限性而生的。
ACL(Access Control List, 访问控制列表),它是对UGO权限管理的方式进行了扩展、可以对任意的用户/组分配读、写和执行权限。
其常用的命令有getfacl和setfacl。
2.1 设置ACL
首先看一下几种类型
类型 | 定义 |
ACL_USER_OBJ | 文件属主的权限 |
ACL_USER | 额外用户的权限 |
ACL_GROUP_OBJ | 文件属组的权限 |
ACL_GROUP | 额外组的权限 |
ACL_MASK | ACL_USER、ACL_GROUP_OBJ,ACL_GROUP的最大权限 |
ACL_OTHER | 其他组的权限 |
设置ACL的命令是setfacl,-m选项表示修改acl规则,使用方式是setfacl -m {u|g}:{user|group}:rwx;
u表示设置ACL_USER的权限,g表示修改ACL_GROUP的权限
例子如下
/*新建文件,查看文件权限位和ACL规则*/
root@cmos:/home/xlzh# touch test
root@cmos:/home/xlzh# ls -l test
-rw-r--r-- root root 3月 : test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw-
group::r--
other::r--
/*让xlzh用户对test文件有rwx的权限,并查看文件权限位和ACL规则*/
root@cmos:/home/xlzh# setfacl -m u:xlzh:rwx test
root@cmos:/home/xlzh# ls -l test
-rw-rwxr--+ root root 3月 : test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:xlzh:rwx
group::r--
mask::rwx
other::r--
/*让dhcpd组对test文件有rwx的权限,并查看文件权限位和ACL规则*/
root@cmos:/home/xlzh# setfacl -m g:dhcpd:rwx test
root@cmos:/home/xlzh# ls -l test
-rw-rwxr--+ root root 3月 : test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw- //ACL_USER_OBJ
user:xlzh:rwx //ACL_USER
group::r-- //ACL_GROUP_OBJ
group:dhcpd:rwx //ACL_GROUP
mask::rwx //ACL_MASK
other::r-- //ACL_OTHER root@cmos:/home/xlzh#
可以看到,当设置ACL规则后,ls 查看权限位,在权限位后增加了一个’+’号。
上述例子演示了如何给指定用户和指定组增加rwx权限,当然rwx权限和UGO权限一样,可以随意修改。
设置完成后,xlzh用户和dhcpd组的用户对该文件具有读、写、执行的权限。
2.2 ACL掩码
再看定义,ACL掩码定义了ACL_USER、ACL_GROUP_OBJ,ACL_GROUP的最大权限。举例如下
/*新建文件*/
root@cmos:/home/xlzh# touch test
root@cmos:/home/xlzh# ls -l test
-rw-rw-r-- root root 3月 : test
/*设置acl规则,使xlzh用户和dhcpd组内的用户具有rwx的权限*/
root@cmos:/home/xlzh# setfacl -m u:xlzh:rwx test
root@cmos:/home/xlzh# setfacl -m g:dhcpd:rwx test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:xlzh:rwx
group::rw-
group:dhcpd:rwx
mask::rwx
other::r--
/*查看文件的权限位,第二组权限发生变化*/
root@cmos:/home/xlzh# ls -l test
-rw-rwxr--+ root root 3月 : test
/*设置掩码,查看权限位和acl规则*/
root@cmos:/home/xlzh# setfacl -m m:r test
root@cmos:/home/xlzh# ls -l test
-rw-r--r--+ root root 3月 : test
root@cmos:/home/xlzh# getfacl test
# file: test
# owner: root
# group: root
user::rw-
user:xlzh:rwx #effective:r--
group::rw- #effective:r--
group:dhcpd:rwx #effective:r--
mask::r--
other::r-- root@cmos:/home/xlzh#
有上述例子可知两点:
1、当文件设置ACL规则后,权限位的第二组显示的不再是属主同组对该文件的访问权限,而是显示ACL的掩码。所以当ls看到权限位后面有‘+’号时,应该使用getfacl查看文件属主所在组的权限。
2、当修改ACL的掩码后,例如把掩码修改为r--,则可以看到ACL_USER,ACL_GROUP_OBJ和ACL_GROUP三行后面增加了#effective:r—,表示这三种类型实际生效的权限只有读权限,为什么会这样?再看ACL_MASK的定义:ACL_USER、ACL_GROUP_OBJ,ACL_GROUP的最大权限。即当把掩码修改为r--后,也就限制了三种类型最大的权限范围,只能小于掩码,不能大于掩码。
2.3 默认ACL
默认ACL仅对目录有效,如果对一个目录设置了默认ACL规则,则在该目录下建立的所有文件都继承此目录的ACL规则。实例如下
/*新建目录,查看ACL规则*/
root@cmos:/home/xlzh# mkdir dir
root@cmos:/home/xlzh# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
group::rwx
other::r-x
/*设置默认ACL规则,使xlzh和dhcpd对该目录下的所有文件具有rwx权限*/
root@cmos:/home/xlzh# setfacl -d -m u:xlzh:rwx dir
root@cmos:/home/xlzh# setfacl -d -m g:dhcpd:rwx dir
root@cmos:/home/xlzh# ls -ld dir
drwxrwxr-x+ root root 3月 : dir
root@cmos:/home/xlzh# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:xlzh:rwx
default:group::rwx
default:group:dhcpd:rwx
default:mask::rwx
default:other::r-x
/*进入文件,新建目录和文件,查看acl规则*/
root@cmos:/home/xlzh# cd dir
root@cmos:/home/xlzh/dir# touch file
root@cmos:/home/xlzh/dir# mkdir dir
/*xlzh和dhcpd对文件具有rwx权限*/
root@cmos:/home/xlzh/dir# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:xlzh:rwx #effective:rw-
group::rwx #effective:rw-
group:dhcpd:rwx #effective:rw-
mask::rw-
other::r--
/*xlzh和dhcpd对目录具有rwx权限,并且该目录继承了dir的默认权限*/
root@cmos:/home/xlzh/dir# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
user:xlzh:rwx
group::rwx
group:dhcpd:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:xlzh:rwx
default:group::rwx
default:group:dhcpd:rwx
default:mask::rwx
default:other::r-x root@cmos:/home/xlzh/dir#
上述实例有一点需要注意:
1、当为dir设置完默认ACl规则后,只是说dir目录下的所有文件继承该目录的所有ACL规则,并不是是说该目录已经具备了该ACL规则。例如上述设置完dir的ACl规则后。xlzh和dhcp组内的用户同样没有权限在dir目录下新建删除文件。除非执行以下命令,设置目录本身的ACL规则
root@cmos:/home/xlzh# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:xlzh:rwx
default:group::rwx
default:group:dhcpd:rwx
default:mask::rwx
default:other::r-x /*默认ACL是指继承给该目录下文件的ACL规则,而不是该目录本身的ACL规则*/
root@cmos:/home/xlzh# setfacl -m u:xlzh:rwx dir
root@cmos:/home/xlzh# setfacl -m g:dhcpd:rwx dir
root@cmos:/home/xlzh# getfacl dir
# file: dir
# owner: root
# group: root
user::rwx
user:xlzh:rwx
group::rwx
group:dhcpd:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:xlzh:rwx
default:group::rwx
default:group:dhcpd:rwx
default:mask::rwx
default:other::r-x root@cmos:/home/xlzh#
2.4 总结
1、普通ACL规则可以设置普通文件和目录文件,是对UGO文件权限方式的补充
2、默认ACL规则只对目录生效,且被该目录下的文件继承,而对该目录本身的权限,还需要使用普通ACL规则
3、设置ACl规则后,文件属组的权限位显示的acl规则的掩码,不再是原来的含义
4、ACL规则的掩码限制了ACL_USER、ACL_GROUP、ACL_GROUP_OBJ的最大权限
Linux UGO和ACL权限管理的更多相关文章
- 【linux日常】 ACL权限管理
ACL ((Access Control Lists) setfacl命令 这里引用一个非常详细的命令介绍. 要点: getfacl -R 递归获取acl权限,可以存储为文件以备还原 g ...
- Linux学习,ACL权限管理
1.setfacl 得到指定文件的ACL权限 -m 表示后续有参数,不可与 -x参数配合使用 -x 删除后续的acl参数,不可与 -m 配合使用 -b 删除所 ...
- Linux课程---10、权限管理(权限有哪几种)
Linux课程---10.权限管理(权限有哪几种) 一.总结 一句话总结: r 读 w 写 x 执行 1.drwxr-x--- 2 root root 4096 Jan 20 19:39 mnt ...
- Linux用户和文件权限管理
本文为原创文章,转载请标明出处 目录 用户管理 系统用户文件 添加用户 useradd 设置用户密码 passwd 删除用户 userdel 用户管理 usermod 用户组管理 系统用户组文件 添加 ...
- Linux用户及文件权限管理
Linux用户及文件权限管理
- linux的用户扩充权限管理acl和用户使用系统资源的限制
用户扩充权限管理 acl 1.扩充权限的方式 文件扩充权限 ACL 磁盘配额 2.文件扩充权限 1.安全位 安全位 ---set位 SUID SGID set仅可以加给 u.g, 如: ...
- Linux学习之ACL权限详解(十)
Linux系统ACL权限详解 目录 ACL权限简介与开启 查看与设定ACL权限 最大有效权限与删除ACL权限 默认ACL权限和递归ACL权限 ACL权限简介与开启权限 ACL权限简介 用户权限管理始终 ...
- Linux系统文件与目录权限管理
Linux文件目录权限管理 一.Linux文件属性及权限 1.Linux文件及目录权限及属性说明 (1)权限及属性说明 (2)文件权限说明 三种权限说明:r 读 read w 写 write x ...
- 第3章 Linux上文件的权限管理
3.1 文件/目录的权限 3.1.1 文件的权限 每个文件都有其所有者(u:user).所属组(g:group)和其他人(o:other)对它的操作权限,a:all则同时代表这3者.权限包括读(r:r ...
随机推荐
- 一张图看懂dex
最近在看dex文件格式,看的是飞虫大大的android软件安全与逆向分析一书,写的条理很清晰.相对于elf文件来说,dex文件格式简单了很多,但是提到某个字段,仍然难以想象其所处位置.所以一直想用思维 ...
- http status 源码
private static readonly String[][] s_HTTPStatusDescriptions = new String[][] { null, new String[] { ...
- 流输入练习——寻找Sb.VI codevs 3096
题目描述 Description 已知某开放授权人员名叫Serb,由于经常修改各种数据,因此开发人员们都喊他SB.现在他和许多人一起过飞机安检,排成了一长队列,请问SB.是否在队列中. 输入描述 In ...
- Mysql存储过程分析
为了搞明白为什么mysql的存储过程是高效的,我们需要理解mysql的执行流程是什么,当输入sql语句之后,mysql会先进行sql语句语法正确性检查,然后再进行编译,然后才执行,最后把结果返回.如下 ...
- 【译】神经网络与深度学习 Ch1-Section0
用神经网络识别手写数字 人类的视觉系统是是大自然的奇迹.考虑下面手写数字序列: 大多数人能够轻易地是识别出是504192.在我们大脑的每个半球都有一个基础的皮质,这就是我们熟知的V1区,它包含了14亿 ...
- Oracle11.2.0.4 RAC安装文档
1 环境配置 参考官方文档<Grid Infrastructure Installation Guide for Linux> 1.1 软件环境 操作系统: [root@howe1 ~]# ...
- 慕课linux学习笔记(六)常用命令(3)
Find 命令 #搜索文件 Find [搜索范围] [搜索条件] e.g. find / -name isnstall.log 搜索速度会非常慢 避免大范围搜索,会非常耗费系统资源 Find是在系统当 ...
- php随机获取金山词霸每日一句
header('Content-Type:text/html; charset=utf-8'); $nowyear=date("Y"); $nowmouth = date('m') ...
- pyopenssl
https://pyopenssl.readthedocs.org/en/stable/ pyopenssl是一个封装了openssl的python模块. 使用它可以方便地进行一些加解密操作. 1.产 ...
- Codeforces Round #277 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/486 A题.Calculating Function 奇偶性判断,简单推导公式. #include<cstdio> ...