拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Linux权限(一) 浅谈shell与内核的交互以及对权限的初识

目录一. shell 及其运行原理1.1 windows 和 linux 下的shell二. Linux 的权限2.1 linux 的用户2.2 添加\删除用户2.2.1 添加用户2.2.2 修改密码2.2.3 删除用户2.3 su 和 su -2.3.1 su2.3.1.1 代码示例 超级用户切换为普通用户2.3.1.2 代码示例 普通用户切换为超级用户2.3.2 su -2.3.3 切换用户的本质2.3.3.1 exit2.3.3.2 切换用户的本质2.4 sudo2.4.1 sudo 的白名单机制2.5 权限的深度认识2.5.1 权限的本质2.5.2 对权限的理解2.5.3 三大角色2.5.4 文件的三种权限属性2.4 chmod2.4.1 chmod命令权限值的格式2.4.2 代码示例2.4.3 相关小知识2.4.3.1 一次性修改多个角色权限2.4.3.2 修改文件权限的限制2.4.3.3 用户角色确定的唯一性2.4.3.4 root 权限不受控2.4.3.4 可执行权限 可执行2.4.4 数字表示法2.4.4.1 代码示例2.5 chown2.5.1 chown 使用注意事项2.6 chgrp2.6.1 chgrp 使用注意实现2.6.2 代码示例一. shell 及其运行原理Linux严格意义上说的是⼀个操作系统 我们称之为 “核心kernel“ 但我们⼀般用户不能直接使用kernel。而是通过kernel的“外壳”程序也就是所谓的shell来与kernel沟通。如何理解为什么不能直接使用kernel回答一Shell 是运行在操作系统内核之外的命令行解释器可以理解为操作系统的一层“外壳”。它为用户提供命令行界面负责接收并解析用户输入的命令然后执行内置命令或启动相应程序这些程序再通过系统调用与操作系统内核交互最后将执行结果显示给用户。回答二那我们不妨想想使用外壳程序有什么好处1. 方便用户操作。2. 当用户输入非法指令时shell 可以及时拦截下来保护操作系统内核。3. 当有新命令来时外壳程序本身并不会去执行而是让子进程去执行保护外壳程序本身。1.1 windows 和 linux 下的shellwindows 的外壳程序可以理解为是命令行外壳或者图形化界面外壳。linux 常用的命令行外壳是bash,linux 也有图形化界面但这里不再过多介绍。二. Linux 的权限2.1 linux 的用户linux 的用户可以分为两种超级用户root命令提示符为#可执行系统中任何操作如删除系统文件、修改权限不受限制普通用户命令提示符为$仅能操作自己权限范围内的文件如修改自己的文档受严格限制。2.2 添加\删除用户2.2.1 添加用户使用下面指令然后按照要求完成即可adduser 用户名2.2.2 修改密码使用下面指令然后按照要求完成即可passwd 用户名2.2.3 删除用户使用下面指令然后按照要求完成即可加上选项 -r 表示把用户账户和它的家目录一起删掉不加 -r 则只会删掉账号userdel -r 用户名2.3 su 和 su -2.3.1 susu 主要用于切换用户。2.3.1.1 代码示例 超级用户切换为普通用户su 用户名2.3.1.2 代码示例 普通用户切换为超级用户su2.3.2 su -su - 的用法和 su 别无二致我们来重点讲讲二者的不同su主要切换用户身份su -不仅切换身份还切换到目标用户完整的登录环境。举个例子假设我先以普通用户lzx的身份登录那么此时我所处目录应该是/home/lzxsu 切换至超级用户所处目录还是/home/lzx;su - 切换至超级用户所处目录变为/root2.3.3 切换用户的本质2.3.3.1 exit我们先来认识一下exitexit 就是用来退出当前用户和我们之前介绍的ctrl d比较相似。2.3.3.2 切换用户的本质当我们由普通用户切换至超级用户再按 ctrl d 或者 exit 退出登录时我们会发现并没有退出到登陆界面而是回到了普通用户那么我们也就明白了 su 和 su - 的本质并不是单纯的切换用户而是在外面又套了一层让执行角色发生了改变2.4 sudosudo 可以理解为是对命令进行提权以 root 权限执行。2.4.1 sudo 的白名单机制我们在使用 sudo 的时候往往会出现这样的错误也就是说未写入文件 sudoers 的用户不能对命令进行提权解决办法只能是让超级用户将该用户添加到文件 sudoers 当中2.5 权限的深度认识2.5.1 权限的本质权限就是限制一个用户能做什么不能做什么。2.5.2 对权限的理解权限首先限制的是角色权限要求目标必须具备对应的属性也就是说权限角色目标权限属性。2.5.3 三大角色目标权限属性好理解因为Linux下一切皆文件文件的权限属性大致可以分为读、写、执行。我们先来理解下角色。每个文件 / 目录都有三类 “访问者(角色身份)”对应不同的权限范围这是权限控制的核心uUser所有者文件当前的所有者。例如hello.txt的所有者是whb系统访问该文件时如果当前用户就是文件所有者就使用u对应的权限进行判断。gGroup所属组文件所属的用户组。例如hello.txt属于whb组如果当前用户不是所有者但属于该文件的所属组就使用g对应的权限。oOthers其他用户当前用户既不是文件所有者也不属于该文件的所属组时就按照o对应的权限进行判断。2.5.4 文件的三种权限属性权限对普通文件对目录r读读取文件内容如cat查看目录中的文件名如lsw写修改文件内容如vim、echo 修改目录项例如创建、删除、重命名文件/子目录x执行允许把文件作为程序执行如./a.out允许进入、访问该目录如cd2.4 chmodchmod 是Linux 中用来修改文件或目录权限的命令。常用选项- R递归修改目录文件的权限。2.4.1 chmod命令权限值的格式用户符号u拥有者g拥有者同组用o其它用户a所有用户用户表示符 / - / 权限字符增加指定权限-取消指定权限直接设置为指定权限2.4.2 代码示例这里就只演示u /-/2.4.3 相关小知识2.4.3.1 一次性修改多个角色权限我们也可以一次性修改多个角色的权限代码演示如下2.4.3.2 修改文件权限的限制普通用户只能修改自己的文件权限要么切换为超级用户 root要么使用 sudo.2.4.3.3 用户角色确定的唯一性Linux 在判断普通文件的u/g/o权限时身份匹配是有优先顺序且最终只选一类权限的先判断是不是所有者 ├─ 是 → 只看 u 权限 └─ 否 ↓ 再判断是不是属于所属组 ├─ 是 → 只看 g 权限 └─ 否 ↓ 最后看 o 权限2.4.3.4 root 权限不受控root 用户不受权限的约束2.4.3.4 可执行权限 可执行可执行 可执行权限 本身就是二进制可执行文件2.4.4 数字表示法由于r4、w2、x1可将三类访问者的权限用 “三位八进制数字” 表示所有者 所属组 其他用户格式chmod 数字权限 文件名。2.4.4.1 代码示例2.5 chownchown 是 Linux 中用来修改文件或目录的所有者。常用选项-R递归修改文件或目录的所有者。2.5.1 chown 使用注意事项chown 和 chmod 不同普通用户不能随把目录\文件的所有者变为其他人要么切换为超级用户要么使用 sudochown 也可以用来修改所有者和所属组(所有者变为lzx所属组变为study)代码如下chown lzx:study ./test.txt2.6 chgrpchgrp 是 Linux 中专门用来修改文件或目录所属组的命令常用选项-R递归修改文件或目录的所属组。2.6.1 chgrp 使用注意实现chgrp 和 chown 不同在特定情况下不用切换为 root 或者使用 sudo:这个文件/目录是你自己的并且你想改成的目标组是你自己所属的组之一。2.6.2 代码示例# 1. root将hello.txt的所有者改为zpw普通用户无此权限 [rootbite-alicloud ~]$ chown zpw hello.txt [rootbite-alicloud ~]$ ls -l hello.txt -rw------- 1 zpw whb 29 Oct 22 20:56 hello.txt # 所有者从whb变为zpw # 2. 普通用户whb直接修改无sudo权限不足报错 [whbbite-alicloud ~]$ chown whb hello.txt chown: changing ownership of hello.txt: Operation not permitted # 3. 普通用户whb用sudo修改hello.txt的所有者为litao需输入whb自己的密码且whb已在sudoers配置中 [whbbite-alicloud ~]$ sudo chown litao hello.txt [sudo] password for whb: # 输入whb的密码 [whbbite-alicloud ~]$ ls -l hello.txt -rw------- 1 litao zhangsan 29 Oct 22 20:56 hello.txt # 所有者从zpw变为litao # 4. 修改hello.txt的所属组为zhangsan需root或所有者 [rootbite-alicloud ~]$ chgrp zhangsan hello.txt [rootbite-alicloud ~]$ ls -l hello.txt -rw------- 1 zpw zhangsan 29 Oct 22 20:56 hello.txt # 所属组从whb变为zhangsan # 5. 假设whb是hello.txt的所有者且属于zhangsan组主组或附加组 [whbbite-alicloud ~]$ chgrp zhangsan hello.txt [whbbite-alicloud ~]$ ls -l hello.txt -rw-rw-r-- 1 whb zhangsan 29 Oct 22 20:56 hello.txt # 所属组从原组变为zhangsan # 6. 普通用户whb(此时他不是文件的所有者且目标组不在自身组列表中)用sudo修改hello.txt的所属组为whb组 [whbbite-alicloud ~]$ sudo chgrp whb hello.txt [whbbite-alicloud ~]$ ls -l hello.txt -rw------- 1 litao whb 29 Oct 22 20:56 hello.txt # 所属组从zhangsan变为whb
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门