Linux中权限系统
目录
简介:
文件和文件目录的权限:
ls -l 结果解析:
修改文件权限:
数字法:
字母法:
命令chown:
命令su
su和su - :
详细对比
环境变量:
什么是环境变量??
环境变量举例:
什么叫环境变量不纯净??
举个危险的例子:
重要总结!!:
简介:
权限是对文件和文件目录之间的一套管理规则
这种规则决定了不同角色可以对文件做什么事情
文件和文件目录的权限:
文件:
r:读权限,用类似cat命令去查看文件时需要该权限
w:写权限,使用vim进行编辑,删除时需要用到该权限
x:执行权限,将文件交给内核处理并运行文件中的内容
r--:只具有读权限,可以通过vim往里面写但是,:wq不能保存退出,:wq!可以强制保存
退出
-w-:只具有写权限,但是在这个状态不能从vim写,
因为你使用vim写时必须先要读取文件里的数据
可以使用echo加重定向往文件写内容
--x:不能读不能写,不能执行,因为你要执行文件里的内容,也得先知道文件里的内容,也
就是得先读取文件里的内容
文件目录(和文件权限有点不同):
r:读权限,类似通过ls查看(不能ls -l)目录下的文件名需要用到这个权限。
w:写权限,就是对目录内的的东西操作,比如创建删除等对文件的操作
x:执行权限,cd进目录需要该权限,ls -l也需要该权限
r--:只有读权限,不能cd进目录,也不能ls -l(需要x),可以ls -ld查看目录信息
-w-:只有写权限,不能ls ,可以touch 路径创建文件,但是还是不能cd
--x:只有执行权限,只可以cd进目录,ls,ll,touch,rm都不行
ls -l 结果解析:
例如:查看文件test1
现在对结果一列一列说:
-:
这个位置代表文件类型:
-:代表普通文件
d:目录文件
l:链接文件
b:block块设备文件,提供带缓冲的随机访问,按照快数据访问
c:字符设备文件,提供无缓冲的串行输入输出,一次处理一个字符
s:套接字文件,进程间的通信文件
p:命名管道,先进先出的特殊文件,用于进程间的通信
后面的九列分为三个部分:
rw-:这个代表文件所属用户的权限,
r--:这个代表文件所属组的权限
r--:这个是其他用户对该文件拥有的权限
.:这个点是特殊权限符。
1:这个是共享文件数量,硬链接数量
root:文件所属用户
root:文件所属组
0:这代表文件的大小
oct...:代表更改文件的时间
test1:文件名
修改文件权限:
命令: chmod
数字法:
chmod 数字 文件名
数字如何确定权限?现在来举个例子:
1.rw- r-- r-- (有权限就是1,没有权限-就是0) 转化位二进制:110 100 100
2.再将二进制三组每一组都化为10 进制,就是 6 4 4
3.所有设置rw- r-- r--就是 chmod 644 test1
如图设置test权限为rwxr-xr-x
字母法:
首先要明白
u代表第一段权限(用户)
g代表第二段权限(组)
o代表第三段权限(其他用户)
案例:
如图语法,等号后面有什莫权限就在对应的部分增加权限,
如果等号后面啥都不写,则对应段权限为---
比如
本来是rwxr-xr--,使用了chmod o= test 变成了rwxr-x---
当然还有第二中比较方便:
列出原本权限:
u用户对应的权限是rw-,现在为他增加一个x权限
chmod u+x test1
去掉则是:
chmod u-x test1
命令chown:
chown student:studentGroup test1
命令su
su - 用户名(完全切换或者登录式切换)
su 用户名(不完全切换或者是非登录切换)
su和su - :
详细对比
特性 | su (不完全切换) | su - (完全切换) |
---|---|---|
全称 | Substitute User (替代用户) | Substitute User Login (以登录方式替代用户) |
环境变量 | 继承 了当前用户的环境变量。 | 完全重置 为目标用户的环境变量。 |
工作目录 | 保持在当前目录。 | 切换 到目标用户的家目录。 |
Shell 模式 | 非登录 Shell。 | 登录 Shell。 |
读取的配置文件 | 通常只读取 ~/.bashrc 。 | 会读取目标用户的所有登录配置文件,如: - /etc/profile - ~/.bash_profile - ~/.bash_login - ~/.profile |
体验 | 像是“借用”了目标用户的身份,但还穿着旧用户的“工作服和环境”。 | 像是 完全重新登录 到目标用户的账户,拥有一个全新的会话。 |
以以下的代码为例:
[zhangsan@server ~]$ su
密码:
[root@server zhangsan]# pwd # 注意:目录没变,还在 /home/zhangsan
/home/zhangsan
就是zhangsan想用root用户的权限,在自己的目录下做一些事情。
注:意思zhangsan希望以root用户的身份,但保持当前的工作目录和环境变量,来执行操作。
环境变量还是zhangsan的
但是一般使用:
su - root #进入root用户
cd /home/zhangsan
因为直接su有风险,导致环境变量不纯净
环境变量:
什么是环境变量??
环境变量就像是程序的身份证和工作证
-
我是谁? (
USER=zhangsan
) -
我在哪? (
PWD=/home/zhangsan
) -
我该去哪找工具? (
PATH=...
) -
我该说什么语言? (
LANG=zh_CN.UTF-8
)
环境变量举例:
$ echo $USER # 当前用户名
zhangsan
$ echo $HOME # 家目录位置
/home/zhangsan
$ echo $PATH # 命令搜索路径
/usr/local/bin:/usr/bin:/bin
$ echo $PWD # 当前目录
/home/zhangsan
什么叫环境变量不纯净??
场景再现:
# zhangsan用户的环境
[zhangsan@server ~]$ echo $PATH
/home/zhangsan/.local/bin:/usr/local/bin:/usr/bin:/bin# 使用 su 切换到root
[zhangsan@server ~]$ su
密码:
[root@server zhangsan]# echo $PATH
/home/zhangsan/.local/bin:/usr/local/bin:/usr/bin:/bin # 看!还是zhangsan的PATH!
不纯净就是:身份是root但是环境还是zhangsan的
举个危险的例子:
zhangsan是恶意用户他在自己目录下放了
/home/zhangsan/.local/bin/ls # 这是个恶意程序!
现在root用户执行ls会先把在zhangsan的环境下寻找
# 使用 su(不纯净环境)
[root@server zhangsan]# ls # 系统会先搜索 /home/zhangsan/.local/bin/ls
# 💥 中招!root执行了恶意程序!
重要总结!!:
zhangsan恶意用户写的这个/home/zhangsan/.local/bin/ls,这个ls根本是假的ls,他的作用以及不
是查询了,而是其他恶意操作名字叫ls
但是root还是会去找这个假的ls导致出现危险操作!!!