Linux权限与特殊权限
目录5.1 权限讲解5.1.1 什么是权限5.1.2 为什么要管理权限5.1.3 权限的分类5.1.4 Linux的文件属于谁?5.1.5 文件属主、属组、其他用户5.1.6 所属者的表达方式5.1.7 文件没有权限进行修改的三种方式5.1.8 文件权限查看的两种方式5.1.9 提供授权的三种方法在Linux系统中默认目录只能给到最大权限755在Linux系统中默认文件只能给到的最大权限为644r、w、x单个出现对于目录来说什么作用没有r-x 决定用户能否进入目录,查看下面的文件rwx决定用户是否可以删除、创建、改名的动作5.2.0 案例说明5.2 特殊权限(Suid、Sgid、Sicky)5.2.1 什么是特殊权限5.2.1 Suid基础原理5.2.2 自定义文件设置Suid5.2.3 Suid的作用5.2.4 Sgid基础原理5.2.5 Sbit粘滞位基础原理
5.1 权限讲解
5.1.1 什么是权限
Linux是多用户,多任务的,当多个用户一起使用Linux服务器时,它们对机器上的文件操作,权限都是怎么样的,所有文件都是可以读取、写入、修改、执行的吗?在Linux系统中,一切皆文件,所以得进行一些权限管理。
5.1.2 为什么要管理权限
保护服务器数据、文件、进程等
不要莫名其妙的背黑锅,权限限制(你作为运维,要限制其他用户的权限,不要伤害你的机器,否则就背黑锅)
针对不同部门,不同员工的工作职责,分工不同,权限应该做好限制
针对来自外来的恶意攻击进行防御
5.1.3 权限的分类
权限针对文件 File
权限针对目录 Directory
读r,read
表示可以查看文件内容
表示可以(ls)查看目录中存在的文件名称
写w,write
表示可以更改文件的内容:vim修改,保存退出
表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir)
执行x,executable
表示是否可以执行文件,一般指二进制文件,或者脚本文件
表示是否可以进入目录中(cd)
5.1.4 Linux的文件属于谁?
d r-- r-- r-- 2 root root 6 Jan 13 18:25 kylin
- rw-- rw-- r-- 1 root root 6.1M Jan 13 18:34 kylin
文件类型 属主 属组 其他人权限 文件连接数 属主 属组 文件大小 文件最后修改时间 文件名
Linux中的每一个文件,都有自己的主人,并且有权限限制,限制主人的读、写、执行权限
限制其他人的读、写、执行权限
限制组内的读、写、执行权限
Linux文件的三个角色
user:属主
group:属组
other:其他人
[!CAUTION]
特例,root,即使文件查看到的权限是空,root仍然可以做任何事情,权限控制是针对普通用户而言的
5.1.5 文件属主、属组、其他用户
属主:表示文件的创建者,拥有者,也可以理解为,某个用户对这个文件拥有的权限
一个文件只能有一个主人,一部手机只能有一个主人
你可以对你的手机做任何的事情,其他人你可以禁止 他碰你手机
你可以对你的Linux文件进行读、写、执行,也可以禁止别人对你的文件做任何操作
属组:文件所属的用户组,拥有者,可以理解为某一组的用户,对这个文件的权限
user:属主是任鹏宇,权限是允许读、写、执行
group:属组是运维组,权限是读、写、不可执行
其他用户:表示跟该文件一点关系没有的人,既不是创建者,也不是属组者
其他用户通常为除了该文件的属主属组的其他用户,该用户与该文件没有任何关系,通常修改权限主要是修改其他用户权限
5.1.6 所属者的表达方式
文件的所属角色有user、group、other,如何使用Linux命令去查看,设置,文件的所属角色
u属组:
用u表示文件的属主,u是个缩写,全称为the user who owns it(拥有它的用户)是谁
默认是文件的创建者,就是文件的属主
g属组:
g用来表示文件属组,默认是创建该文件的用户
o其他人:
用o表示,既不是文件的创建者,也不是文件属组里的用户,那么就是其他人的角色
all角色:
在后续使用Linux命令,修改文件权限时,除了会用到u、g、o,还会使用all(缩写a),表示一次性对三个角色设置权限
root用户:
Linux中的root用户是特殊用户,是系统的超级管理员,有最大权限,可以任意修改Linux文件,因此权力越大,责任越大。
5.1.7 文件没有权限进行修改的三种方式
第一种方式:更换文件的主人
在不修改文件权限的情况下,可以更换属主,相当于将文件卖给了另一个人
第二种方式:更换文件的属组
在不修改文件权限以及属组的情况下,如果该文件属组有读写执行的权限,那么加入该组也可以拥有该权限
第三种方式:更换文件权限
不修改属主属组则需要修改文件的权限来对文件进行操作
5.1.8 文件权限查看的两种方式
第一种方式:使用 ll 命令查看
[root@kylin-ren-class ren]# ll
总用量 68
-rw-r--r-- 1 root root 40 1月 7 20:17 第三行内容.txt
第二种方式:使用 stat 命令查看
[root@kylin-ren-class ren]# stat /ren
文件:“/ren”
大小:266 块:0 IO 块:4096 目录
设备:fd00h/64768d Inode:34158027 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
5.1.9 提供授权的三种方法
第一种方法:更改属主,言简意赅就是更换主人,你就拥有了和创建主人一样的文件权限
# 递归操作文件目录
chown -R [新属主].[] 文件名
第二种方法:更改属组,简而言之就是加入文件的小组,小组成员都有对该文件相应的权限
# 使用chown,注意只能超级用户使用,使用sudo提权也可以
chown -R [].[新属组] 文件名
# 使用chgrp,只能改属组,普通用户可以使用,但是必须该用户是该组的一员
chgrp -v [新组] 文件名 # -v是显示更改过程
第三种方法:更改文件权限,将文件的其他用户的权限进行相应修改即可
# 使用 ugo 的方式进行修改
u 表示属主
g 表示属组
o 表示普通用户
语法结构:
chmod ugo+w file #全部成员都加入写的权限
chmod uo+x file #属主和普通用户加入执行的权限
chmod a+x file #a表示所有,所有用户都加入执行权限
chmod u=rx file #先清空后赋值
# 使用数字的方式进行授权
读:4
写:2
执行:1
文件权限哪个亮加哪个
语法结构:chmod [数字][数字][数字] 文件
案例229. 授权属主为 rwx权限
[root@kylin-ren-class ren]# chmod u+wrx 你好.txt
[renpengyu@kylin-ren-class ren]$ ll
总用量 8
-rwxrwxrwx 1 root root 0 1月 9 21:10 你好.txt
案例230. 授权属主位 r-- 权限
[root@kylin-ren-class ren]# chmod u-wx 你好.txt
[renpengyu@kylin-ren-class ren]$ ll
总用量 8
-r--rwxrwx 1 root root 0 1月 9 21:10 你好.txt
案例231. 先清空权限,再给属主授 rw- 权限
# 先清空是指先清空u的权限,然后给权限,不是ugo全部清空,注意注意!!!
[root@kylin-ren-class ren]# chmod u=r-- 你好.txt
[renpengyu@kylin-ren-class ren]$ ll
总用量 8
-r-------- 1 root root 0 1月 9 21:10 你好.txt
案例232. 使用ugo方式授权文件的权限为u为rw,g为空,o为空
[root@kylin-ren-class ren]# chmod u=rw,g=,o= 你好.txt
[root@kylin-ren-class ren]# ll
总用量 8
-rw------- 1 root root 0 1月 9 21:10 你好.txt
案例233. 使用数字进行授权rw-r--r--的权限
[root@kylin-ren-class ren]# chmod 644 你好.txt
[root@kylin-ren-class ren]# ll
总用量 8
-rw-r--r-- 1 root root 0 1月 9 21:10 你好.txt
[!WARNING]
在Linux系统中默认目录只能给到最大权限755
在Linux系统中默认文件只能给到的最大权限为644
[!CAUTION]
r、w、x单个出现对于目录来说什么作用没有
r-x 决定用户能否进入目录,查看下面的文件
rwx决定用户是否可以删除、创建、改名的动作
5.2.0 案例说明
1.[oldboy@lzy oldboy]$ cat /etc/shadow cat: /etc/shadow: Permission denied
## 用户本身没有权限,普通用户不能进入,加入x权限才行,得加入rx权限才可以
2.[oldboy@lzy oldboy]$ echo '#' >> /etc/passwd -bash: /etc/passwd: Permission denied
## 文件对于该用户没有写的权限,所以得授权用户对/etc目录授权写的权限,还有进入查看rx的权限
3.[oldboy@lzy oldboy]$ touch / etc/passwd.txt touch: cannot touch ‘/etc/passwd.txt’:Permission denied
## 用户本身没有权限,普通用户不能进入,加入x权限才行,touch是创建的动作得有rwx才能,所以需要给7的权限
4.[oldboy@lzy oldboy]$ rm -rf /etc/shadow rm: cannot remove ‘/etc/shadow’: Permission denied
## 删除需要rwx权限,还有就是/etc/默认没有对普通用户进行写的权限
5.[oldboy@lzy oldboy]$ ls /root/ ls: cannot open directory /root/: Permission denied
## 没有rx的权限,进入目录需要x的权限,查看目录下的内容需要r的权限,还有就是root目录是root的家目录,本身没有对普通用户进行开放
5.2 特殊权限(Suid、Sgid、Sicky)
5.2.1 什么是特殊权限
Linux系统的9位基本权限 rwx rwx rwx,但是有时候会发现系统一些关键的文件,存在一些没见过的权限字符。
比如:这个文件允许用户自己去修改自己的密码
/usr/bin/passwd
[root@CentOS7-01 /]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
所以除了基本的权限还有三位特殊权限,一共是12位权限
suid(setuid)
sgid(setgid)
sbit(sticky)
特殊权限对照变
类别
suid
sgid
sicky
字符表示
S
S
T
出现位置
用户权限位x
用户组权限位x
其他用户权限位x
基本权限位有x
s
s
t
数字表示法
4 (4777)
2
1
八进制表示法
4000
2000
1000
生效对象
用户位
用户组
其他用户
[!CAUTION]
1.suid:如果用户权限位是 rwx ---> rws 否则是 rwx- ---> rwS
2.sgid和sicky与suid同理,都是最后一位x位置上发生变化
5.2.1 Suid基础原理
suid通过s字符标识,存在于用户权限位的x的权限对应位置
如果某文件,用户权限位本身就有x权限,给该文件设置suid权限时,则以小写s标识,否则就是大写的s字符
给文件设置s权限对应的数字表示法是4,八进制数下可以用4000
suid同样也用chmod设置权限可以用字符法、数字法两种标识
5.2.2 自定义文件设置Suid
[root@kylin-ren-class ren]# chmod u+s 你好.txt
[root@kylin-ren-class ren]# ll
总用量 8
-rwSr--r-- 1 root root 0 1月 9 21:10 你好.txt
5.2.3 Suid的作用
SUID特殊权限仅适用于可执行文件,例如二进制文件、/usr/bin下目录下的命令文件/usr/bin/ls
只要用户对没有SUID的文件有执行权限,那么当用户执行此文件时,会以文件属主的身份去执行此文件
一旦文件执行结束,身份的切换也随之小时
简而言之就是让普通用户,执行命令时,临时获得root的权限
解释关于Linux的用户创建:
用户创建完用户之后,需要修改密码,执行passwd命名
但是passwd命令需要读取,修改/etc/passwd、/etc/shadow文件,这些文件都是属于root
如何可以让普通用户使用passwd修改自己的密码,则可以让普通用户临时获得root的身份进行密码文件的更改
该原因就是设置suid的一个根本原因,且suid特殊权限,只能用在二进制可执行文件上
5.2.4 Sgid基础原理
对于二进制命令来说,Sgid的功能和Suid基本一样,只不过是一个设置文件属主的权限,一个是设置属组的权限,和9位基本权限rwx概念一样
Suid是获得文件属主的权限,Sgid是获得文件属组的权限
Sgid主要用于文件夹,为某个目录设置Sgid之后,在该目录中的创建的文件,都以(目录的属组)权限位准,而不属于创建该文件的用户权限,这就是实现了多个用户可以共享一个目录的作用
简单总结:
一个普通的文件夹,普通用户ren进入之后,创建文件,user,group都属于ren;gaioge进入之后创建文件,user,group都属于giaoge
当一个文件夹设置了Sgid,普通用户ren进入之后,创建文件,user属于ren,group属于文件夹的属组;giaoge进入后,创建文件,user属于giaoge,group属于文件夹的属组
红帽案例234. 将sgid和红帽认证考题结合练习
1.创建一个共享目录/home/admins
mkdir /home/admins
2.要求该目录属组是adminuser,adminuser组内成员对该目录的权限是可读可写可执行
groupadd adminuser
chgrp adminuser /home/admins
chmod g=rwx /home/admins
3.其他用户均无任何权限(root特例)
chmod 0='' /home/admins
4.进入/home/admins创建的文件,自动继承adminuser组的权限
chmod g+s /home/admins
[root@kylin-ren-class /]# ll /home/admins/
总用量 0
drwxr-sr-x 2 root adminuser 6 1月 11 15:37 我是文件夹
-rw-r--r-- 1 root adminuser 0 1月 11 15:37 我是文件.txt
[root@kylin-ren-class /]# touch /home/admins/我是文件夹/我继承了属性.log
[root@kylin-ren-class /]# ll /home/admins/我是文件夹/我继承了属性.log
-rw-r--r-- 1 root adminuser 0 1月 11 16:03 /home/admins/我是文件夹/我继承了属性.log
5.2.5 Sbit粘滞位基础原理
在一个权限是777的文件夹下,所有用户可以进行rwx的操作,也就意味着可以随便删除其他人的资料!这很危险,所以产生出一个粘滞位来防止这个问题的发生
简而言之就是,当目录有了粘滞位特殊权限,则个目录除了root用户特殊以外,任何用户都只能删除,移动自己的创建的文件,而不能影响到其他人
其中在Linux中/tmp临时目录就是使用的是粘滞位
案例235. 没有粘滞位,且目录的权限是777时,进行操作,然后在使用粘滞位来操作看看使用其他用户有权限进行操作
[renpengyu@kylin-ren-class tmp]$ touch 我是任鹏宇.txt
[pengyu@kylin-ren-class tmp]$ echo 我是鹏宇 > 我是任鹏宇.txt
-bash: 我是任鹏宇.txt: 权限不够
[pengyu@kylin-ren-class tmp]$ rm -f 我是任鹏宇.txt
rm: 无法删除 '我是任鹏宇.txt': 不允许的操作