云计算学习笔记——Linux用户和组的归属权限管理、附加权限、ACL策略管理篇
《云计算学习日记Day11》—— 从零开始的云计算之旅
今天是系统学习云计算的第十一天,记录了关于我的云计算学习,后续将每日更新我的笔记。欢迎大家一起来学习,如果内容有遗漏和错误,还请大家多多指正和包涵,谢谢大家。
基本权限和归属
权限和归属概述
权限和归属
- 访问权限:
- 读取:允许查看内容-read r
- 写入:允许修改内容-write w
- 可执行:允许运行和切换-excute x
- 对于文本文件:
- r:cat、less、grep、head、tail等
- w:vim、>、>>等
- x:shell和python…
- 对于目录:
- r:ls命令查看目录内容等
- w:能够创建、删除、修改等目录的内容
- x:能够cd切换到此目录下(进入此目录)
- 归属关系:
- 所有者:拥有此文件/目录的用户-user
- 所属组:拥有此文件/目录的组-group
- 其他用户:除所有者、所属组以外的用户-other
解析文件/目录权限
执行ls -l …. 查看
- 输出信息,包括七个字段
[root@bogon ~]# ls -ld /root
dr-xr-x---. 16 root root 4096 8月 21 10:59 /root
dr-xr-x---. | 16 | root | root | 4096 | 8月 21 10:59 | /root |
---|---|---|---|---|---|---|
权限位 | 硬连接数 | 属主 | 属组 | 大小 | 最后修改时间 | 文件/目录名称 |
- 权限位字段解析:共10个字符,分为4部分
类型 | User权限 | Group权限 | Other权限 | ||||||
---|---|---|---|---|---|---|---|---|---|
d | r | w | x | r | - | x | r | - | x |
- | r | w | - | r | - | - | r | - | - |
- Linux中判断用户具备的权限:
- 1.查看用户,对于该数据所处的身份
- 2.查看相应身份的权限位
权限控制
设置基本权限
- 命令:chmod
- 格式:chmod 身份[+-=][rwx] 文件…
- 常用命令选项:-R:递归修改权限
- 权限位也可以用八进制数表示
-
r w x分别对应4 2 1,user group other权限分别求和表示
r w x r - x r - x 4 2 1 4 0 1 4 0 1 7 5 5
-
使用字符权限形式设置基本权限
[root@bogon ~]# mkdir /opt/test #新建一个目录
[root@bogon ~]# ls -ldh /opt/test #添加选项-ld查看目录详细信息
drwxr-xr-x. 2 root root 6 8月 21 12:44 /opt/test#使用chmod更改权限位
#u-w:User权限减去 写 的权限
#g+w:Group权限添加 写 的权限
#o=rwx:给Other赋予 rwx 的权限
[root@bogon ~]# chmod u-w,g+w,o=rwx /opt/test
[root@bogon ~]# ls -ldh /opt/test #再次查看信息,观察权限位变化
dr-xrwxrwx. 2 root root 6 8月 21 12:44 /opt/test
使用数字权限形式设置基本权限
[root@bogon ~]# ls -ld /opt/test #先观察现在的权限位
dr-xrwxrwx. 2 root root 6 8月 21 12:44 /opt/test
[root@bogon ~]# chmod 755 /opt/test #使用数字权限形式更改权限
[root@bogon ~]# ls -ld /opt/test #再次观察权限位变化
drwxr-xr-x. 2 root root 6 8月 21 12:44 /opt/test
-R 递归修改权限
#首先创建一个目录,并分别查看他们的基本权限设置
[root@bogon ~]# mkdir -p /opt/test/test1/test2
[root@bogon ~]# ls -ld /opt
drwxr-xr-x. 3 root root 18 8月 21 12:44 /opt
[root@bogon ~]# ls -ld /opt/test
drwxr-xr-x. 3 root root 19 8月 21 12:58 /opt/test
[root@bogon ~]# ls -ld /opt/test/test1
drwxr-xr-x. 3 root root 19 8月 21 12:58 /opt/test/test1
[root@bogon ~]# ls -ld /opt/test/test1/test2
drwxr-xr-x. 2 root root 6 8月 21 12:58 /opt/test/test1/test2#使用-R选项递归更改目录/opt的基本权限
[root@bogon ~]# chmod -R 777 /opt#再次查看/opt目录下所有内容的基本权限设置
[root@bogon ~]# ls -ld /opt
drwxrwxrwx. 3 root root 18 8月 21 12:44 /opt
[root@bogon ~]# ls -ld /opt/test
drwxrwxrwx. 3 root root 19 8月 21 12:58 /opt/test
[root@bogon ~]# ls -ld /opt/test/test1
drwxrwxrwx. 3 root root 19 8月 21 12:58 /opt/test/test1
[root@bogon ~]# ls -ld /opt/test/test1/test2
drwxrwxrwx. 2 root root 6 8月 21 12:58 /opt/test/test1/test2
文件/目录的默认权限
新建文件/目录的默认权限
- 一般文件默认均不给x执行权限
- 其他取决于umask(权限掩码)设置
- 新建目录默认权限为755
- 新建文件默认权限为644
[root@bogon ~]# umask #查看默认配置
0022 #022和755向对应,试着找找他们之间的关系规律
[root@bogon ~]# umask -S #查看默认配置
u=rwx,g=rx,o=rx
[root@bogon ~]# umask 0000 #对数字进行修改
[root@bogon ~]# umask -S #再次查看默认配置
u=rwx,g=rwx,o=rwx
[root@bogon ~]# mkdir /test #创建新的目录和文件验证是否成功更改
[root@bogon ~]# touch /test/t.txt
[root@bogon ~]# ls -ld /test
drwxrwxrwx. 2 root root 19 8月 21 19:11 /test
[root@bogon ~]# ls -l /test
总用量 0
-rw-rw-rw-. 1 root root 0 8月 21 19:11 t.txt
[root@bogon ~]# umask -S u=rwx,g=rx,o=rx #用字母的方法进行更改
u=rwx,g=rx,o=rx
[root@bogon ~]# umask #验证一下
0022
或者另一种配置方法:
#修改家目录配置文件
[root@bogon ~]# vim /root/.bashrc
#在文件中新增配置,指定权限掩码
umask 077
- 创建新的文件夹时,可以直接设置权限
- 利用mkdir的-m选项
[root@bogon ~]# mkdir /test01
[root@bogon ~]# mkdir -m 777 /test02
[root@bogon ~]# ls -ld /test0?
drwxr-xr-x. 2 root root 6 8月 21 19:19 /test01
drwxrwxrwx. 2 root root 6 8月 21 19:19 /test0
归属控制
设置归属关系
- 命令:chown
- 格式:
- chown 属主 文件….:只修改所有者
- chown 属主:属组 文件….:修改所有者和所属组
- chown :属组 文件….:只修改所属组
- 常用命令选项:
- -R:递归修改归属关系
[root@bogon ~]# mkdir -p /A/B #创建目录/A/B
[root@bogon ~]# echo 123 > /A/B/C.txt #创建文件/A/B/C.txt
[root@bogon ~]# tree /A
/A
└── B└── C.txt1 directory, 1 file
[root@bogon ~]# useradd user01 #创建用户
[root@bogon ~]# groupadd group01
[root@bogon ~]# ls -ld /A
drwxr-xr-x. 3 root root 15 8月 21 19:34 /A
[root@bogon ~]# ls -ld /A/B
drwxr-xr-x. 2 root root 19 8月 21 19:34 /A/B
[root@bogon ~]# ls -l /A/B/C.txt
-rw-r--r--. 1 root root 4 8月 21 19:34 /A/B/C.txt
[root@bogon ~]# chown -R user01:group01 /A
[root@bogon ~]# ls -ld /A
drwxr-xr-x. 3 user01 group01 15 8月 21 19:34 /A
[root@bogon ~]# ls -ld /A/B
drwxr-xr-x. 2 user01 group01 19 8月 21 19:34 /A/B
[root@bogon ~]# ls -l /A/B/C.txt
-rw-r--r--. 1 user01 group01 4 8月 21 19:34 /A/B/C.txt
附加权限
附加权限概述
特殊权限的作用
- 特殊权限
- 叠加于权限位的u、g、o分组之上
- 用来传递程序执行身份、限制目录写入权
特殊权限分类
类别 | 字符表示 | 数字表示 | 叠加位置 |
---|---|---|---|
Set UID | s | 4 | User的x位 |
Set GID | s | 2 | Group的x位 |
Sticky Bit | t | 1 | Other的x位 |
Set UID
Set UID概述
- SUID权限
- 占用所有者(User)的x位
- 显示为s或S,取决于属主是否有x权限
- 仅对可执行的程序有意义
- 当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应权限
SUID权限测试
下面我们来进行SUID的权限测试
测试流程:
我们找到mkdir命令程序的位置,复制到/opt下的test,这样我们通过输入/opt/test可以实现和命令mkdir一样的作用
然后我们通过运行和修改/opt/test和它的SUID权限,观察修改前后其他用户使用的它时创建的目录的变化
#首先我们查找命令mkdir的程序所在位置,并把他copy到/opt/test
[root@bogon ~]# ls /opt
[root@bogon ~]# which mkdir
/usr/bin/mkdir
[root@bogon ~]# cp /usr/bin/mkdir /opt/test#复制完成后,查看/opt/test的基本权限,这里是755
[root@bogon ~]# ls -l /opt
总用量 72
-rwxr-xr-x. 1 root root 69952 8月 21 21:20 test#在我们修改之前,先让用户zhangsan使用/opt/test在/opt目录下创建新目录,这里发现没有权限原因是父目录/opt的Other的权限是rx,并没有w的权限,所以说会出现创建不成功、报错权限不够的情况
[root@bogon ~]# su - zhangsan
[zhangsan@bogon ~]$ /opt/test /opt/test01
/opt/test: 无法创建目录 “/opt/test01”: 权限不够
[zhangsan@bogon ~]$ exit
注销#这里再次进入root超级管理员,给/opt/test添加SUID权限
[root@bogon ~]# chmod u+s /opt/test#使用超级管理员root的身份创建目录/opt/test01
[root@bogon ~]# /opt/test /opt/test01#再次进入用户zhangsan,让zhangsan使用/opt/test创建目录/opt/test02,结果显示创建成功,也就是说,我们通过给程序/opt/test添加SUID权限,除了程序的属主之外的其他用户也可以使用
[root@bogon ~]# su - zhangsan
[zhangsan@bogon ~]$ /opt/test /opt/test02#查看/opt下的子目录的详细信息,我们可以看到,root创建的/opt/test01属主是root、属组是root,但是,zhangsan创建的/opt/test02属主是root但是属组是zhangsan
[zhangsan@bogon ~]$ ls -l /opt
总用量 72
-rwsr-xr-x. 1 root root 69952 8月 21 21:20 test
drwxr-xr-x. 2 root root 6 8月 21 21:21 test01
drwxr-xr-x. 2 root zhangsan 6 8月 21 21:22 test02
它可以赋予没有权限的用户更多的权限,可以参考一下sudo命令
Set GID
Set GID概述
- SGID权限
- 占用属组的x位
- 显示位s或S,取决于属组是否有x权限
- 对目录有效
- 在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份
SGID权限测试
测试流程:
首先我们创建一个新目录,在创建一个新的组,让这个组成为这个目录的属组,在这个目录先创建新的子目录1,然后修改目录的group权限为s,再创建新的子目录2,观察他们的归属关系的区别
[root@bogon ~]# mkdir /test
[root@bogon ~]# ls -ld /test
drwxr-xr-x. 2 root root 6 8月 25 08:49 /test
[root@bogon ~]# mkdir /test/test1#创建组TEST
[root@bogon ~]# groupadd TEST
[root@bogon ~]# chown :TEST /test#设置目录/test的权限
[root@bogon ~]# chmod g+s,o+w /test
[root@bogon ~]# ls -ld /test
drwxr-srwx. 3 root TEST 19 8月 25 08:49 /test
[root@bogon ~]# su - zhangsan
[zhangsan@bogon ~]$ mkdir /test/test2
[zhangsan@bogon ~]$ exit
注销#作比较
[root@bogon ~]# ls -l /test
总用量 0
drwxr-xr-x. 2 root root 6 8月 25 08:49 test1
drwxr-sr-x. 2 zhangsan TEST 6 8月 25 08:51 test2
通过上边的实验测试结果我们可以发现,有SGID权限的目录在创建子目录和文件时,新目录和文件的属组和父目录相同
在这里我想到一个问题,就是之前学到的chown -R递归设置归属关系的命令,它也可以让子目录和子文件的属组和属组和父目录一样,那这两个命令不是就一样了吗?
其实他们之间还是有区别的,只不过是功能有些类似:
chown:递归修改目录中已有的内容的属组和属主,但是,修改之后在创建新的内容的属组和属主不能确定
SGID权限:给目录设置SGID权限之后,再创建子目录或文件,他们的属组和父目录一样,但是原有的子目录或文件的属组不会发生改变
通俗来讲,他们两个的作用对象不同,一个是已经有的目录或文件,一个是还没被创建的目录或文件
Sticky Bit
Sticky Bit概述
- 粘滞位,Sticky Bit权限
- 占用其他人(Other)的x位
- 显示为t或T,取决于其他人是否有x权限
- 适用于目录,用来限制用户滥用写入权
- 在设置了粘滞位的文件夹下,即使用户有写入权限,也不能删除或改名其他用户文档
Sticky 权限测试
测试流程:
我们先创建两个用户和一个测试目录,然后让其中一个用户创建文件,让另一个用户去修改,再为这个目录设置Sticky Bit权限,让另一个用户去修改,最后对比结果
#先准备好两个用户
[root@bogon ~]# id zhangsan
用户id=1000(zhangsan) 组id=1000(zhangsan) 组=1000(zhangsan),10(wheel)
[root@bogon ~]# id honey
用户id=1001(honey) 组id=1001(honey) 组=1001(honey)#做好准备工作,创建目录和文件
[root@bogon ~]# mkdir /test
[root@bogon ~]# chmod 777 /test
[root@bogon ~]# su - zhangsan
[zhangsan@bogon ~]$ touch /test/t.txt
[zhangsan@bogon ~]$ touch /test/t2.txt
[zhangsan@bogon ~]$ mkdir /test/test1
[zhangsan@bogon ~]$ mkdir /test/test2
[zhangsan@bogon ~]$ exit
注销#登录另一个用户honey对张三用户的文件进行修改
[root@bogon ~]# su - honey
[honey@bogon ~]$ cat /test/t.txt#第一个结果
[honey@bogon ~]$ rm /test/t.txt
rm:是否删除有写保护的普通空文件 '/test/t.txt'?y
[honey@bogon ~]$ rm -r /test/test1
rm:是否删除有写保护的目录 '/test/test1'?y
[honey@bogon ~]$ ls /test
t2.txt test2
[honey@bogon ~]$ exit
注销#修改权限
[root@bogon ~]# chmod o+t /test
[root@bogon ~]# ls -ld /test
drwxrwxrwt. 3 root root 33 8月 25 11:28 /test
[root@bogon ~]# su - honey#第二个结果
[honey@bogon ~]$ cat /test/t2.txt
[honey@bogon ~]$ rm /test/t2.txt
rm:是否删除有写保护的普通空文件 '/test/t2.txt'?y
rm: 无法删除 '/test/t2.txt': 不允许的操作
[honey@bogon ~]$ rm -rf /test/test2
rm: 无法删除 '/test/test2': 不允许的操作
ACL策略管理
ACL策略概述
ACL策略的作用
- 文档归属的局限性
- 任何人只属于三种角色:属主、属组、其他人
- 无法实现更精细的控制
- ACL访问策略
- 能够对个别用户、个别组设置独立的权限
- 大多数挂载的EXT3/4、XFS文件系统默认已支持
设置ACL权限
Linux中判断用户具备的权限
- 首先查看该用户或者组是否有ACL策略
- 查看用户,对于该数据所处的身份,顺序:所有者>所属组>其他人,原则是匹配即停止
- 查看相应身份的权限位
定义ACL控制策略
-
命令:setfacl
-
格式:setfacl [选项] u:用户名:权限 文件….
setfacl [选项] g:组名:权限 文件….
-
选项:
- -m:定义一条ACL策略
- -x:清除指定的acl策略
- -b:清除所有已设置的ACL策略
- -R:递归设置ACL策略
#创建一个测试目录,把other的权限设置为0
[root@bogon ~]# mkdir /test
[root@bogon ~]# touch /test/t.txt
[root@bogon ~]# chmod 770 /test#用户zhangsan属于other,正常来说是没有rwx权限的,我们可以测试一下
[root@bogon ~]# su - zhangsan #这里结果也确实是没有权限
[zhangsan@bogon ~]$ cat /test/t.txt
cat: /test/t.txt: 权限不够
[zhangsan@bogon ~]$ cd /test/t.txt
-bash: cd: /test/t.txt: 权限不够
[zhangsan@bogon ~]$ exit
注销#设置ACL权限,给用户张三在/test中有rwx的权限
[root@bogon ~]# setfacl -m user:zhangsan:rwx /test
[root@bogon ~]# su - zhangsan #设置好后测试一下
[zhangsan@bogon ~]$ cd /test
[zhangsan@bogon test]$ echo 123 > t.txt
-bash: t.txt: 权限不够
[zhangsan@bogon /]$ mkdir /test/test1
[zhangsan@bogon /]$ ls /test
test1 t.txt
但是我们可以发现一个问题,虽然我们的用户张三获得了目录/test的rwx权限,但是并没有获得/test/t.txt的wx权限,所以说不能对t.txt文件进行wx操作,但是我们可以对他进行删除等基于他的父目录的操作