【Linux】权限(shell运行原理、概念,Linux权限)

🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343
🔥 系列专栏: https://blog.csdn.net/qinjh_/category_12625432.html

目录

shell命令以及运行原理

创建和删除用户

创建新普通用户

删除用户

Linux权限的概念

Linux权限管理

文件访问者的分类(人)

文件类型和访问权限(事物属性)

文件类型

基本权限

如何理解x?

文件访问权限的相关设置方法

chmod

chown

chgrp

umask

目录的权限

粘滞位


前言

💬 hello! 各位铁子们大家好哇。

今日更新了Linux的权限的内容

🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

shell命令以及运行原理

Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  • 将使用者的命令翻译给核心(kernel)处理。
  • 同时,将核心的处理结果翻译给使用者。
  • 帮助理解:如果说张三是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是张三村头漂亮且心动的MM如花。他看上了如花,但是有不好意思直接表白,就让家人找媒婆帮他提亲,所有的事情他都直接跟媒婆沟通,由媒婆转达他的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。

Shell外壳的存在,可以对请求进行合法性检查,变相的保护OS。

Shell是外壳程序的总称,bash就是具体的一款外壳程序。

创建和删除用户

当我们在第一次使用linux时最开始都是只有一个超级用户(root),而普通用户则是用过超级用户进行创建而形成的,所以我们首先来在超级用户下进行创建一个普通用户

创建新普通用户

第一步 :首先进入linux系统中输入指令 whoami 显示root则表示当前用户为超级用户,接下来我们就可以继续进行创建新的普通用户操作。


第二步:输入 adduser+要创建的用户名 ,接着我们passwd+用户名 设置该用户的密码,密码设置最少7位,不能太简单,不然会报错,这里建议字母+数字,再重复输入新密码(注意这里输入密码不回显)当出现all authentication tokens updated successfully则表示新用户已经创建成功,一般创建的新用户会在home目录下生成一个该用户名命名的文件夹。到这里我们的新普通用户就算是已经创建成功了。

删除用户

userdel -r+用户名

当我们想要对普通用户进行删除时,首先我们先切换超级用户root,然后我们使用指令 userdel -r+用户名 进行删除普通用户操作。
注意

不要使用userdel+用户指令进行删除,因为这样只会删除该用户,而不会删除home目录下的该用户的文件夹,相当于存在残留,没有删除干净。

当在进行一次userdel+用户操作时则显示不存在该用户,但是查询该home目录时还存在该文件夹,这时我们在adduser+用户名发现弹出警告说home目录中已经存在该文件夹,

如果不小心userdel +用户名 ,解决方法是:进行adduser+刚才的用户名 ,然后userdel -r+用户名,这样就能解决了。

Linux权限的概念

Linux下有两种用户:超级用户(root)、普通用户。

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是"#",普通用户的命令提示符是"$"。

命令:su [用户名]

功能:切换用户。

例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。

注意:从root切换到普通用户,不需要输入密码。从普通用户切换到root,需要输入密码。

Linux权限管理

当我们是普通用户时,创建的文件拥有者就是我们自己。如果想在普通用户身份下,创建拥有者是root的文件,可以使用sudo,进行提权,不过sudo的使用,需要进行配置,后面再说明。 上方不能进行提权是因为没有进行配置。

文件访问者的分类(人)

  • 文件和文件目录的所有者:u---User(中国平民 法律问题)
  • 文件和文件目录的所有者所在的组的用户:g---Group(不多说)
  • 其它用户:o---Others (外国人)

文件类型和访问权限(事物属性)

文件类型

d:文件夹

-:普通文件

l:软链接(类似Windows的快捷方式)

b:块设备文件(例如硬盘、光驱等)

p:管道文件

c:字符设备文件(例如屏幕等串口设备)

s:套接口文件

window中,如果把一个文件后缀名改了,可能就打不开文件了。但是linux不一样,即使修改了后缀,也能打开它 。

基本权限

i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限

ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

iv."---"表示不具有该项权限

如何理解x?

能执行=具有可执行权限+你就是一个可执行文件。

上图中,test.c具有可执行权限,但不是一个可执行文件,所以无法执行。

如果某文件是可执行文件,但它没有可执行权限,同样无法执行。

文件访问权限的相关设置方法

chmod

功能:设置文件的访问权限

格式:chmod [参数] 权限 文件名

常用选项:

  • R -> 递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才可以改变文件的权限

chmod命令权限值的格式

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限
  • 用户符号:
  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

上方是用chmod修改权限的例子。 这是第一种方式。
除了上方用o、g、u修改权限,还可以用八进制进行修改,如下:(第二种方式)


如果拥有者没有权限,也无法进行操作。但是root不一样,没有权限,也能照样操作文件。

上图中,我既是拥有者,也是所属组,但是我依然无法进行操作。那是因为对用户身份的识别只进行一次,此时我被识别为拥有者,就只有拥有者的权限,而没有所属组的权限。

chown

功能:修改文件的拥有者

格式:chown [参数] 用户名 文件名

我们想把拥有者修改为xjh,但是无法执行,因为chown的操作者必须是root。或者我们可以进行sudo进行提权,由于上方没有配置,所以无法进行提权。

chgrp

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

常用选项:-R 递归修改文件或目录的所属组

chgrp的使用和chown一样。

如果我们想一次性修改拥有者和所属组,只需在中间加上冒号即可。如上图。

umask

功能:

查看或修改文件掩码

新建文件夹默认权限=0666

新建目录默认权限=0777

但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & (~umask)

格式:umask 权限值

说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用 户默认为0002。

我们可以查看掩码,或者主动修改掩码

起始权限是0666,对应的权限应该是rw-rw-rw-。可上面的文件却不是 ,这就跟权限掩码有关了。

我们对掩码取反,再与默认权限进行按位与操作。最后结果就是rw-rw-r--了。

目录的权限

只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写 权限.那么,如何创建一个可以多人共享的目录呢?

首先可以确定的是,这个目录肯定不能在家目录里面。只能在根目录,此时只有root才能创建。

因为这是一个要共享的文件,我们还得把other的w权限打开。 这样其他用户就可以在里面创建文件了。

假设text.txt是张三创建的共享文件,李四与他进行共享,因为李四也需要写入,就打开了other的w权限。突然冒出了王五,他却把这个共享文件删了(因为王五也是other,share目录把other的w权限放开了)。那要怎样才能让这个共享文件可读可写,但不能别人删呢?这时就需要用到粘滞位。

粘滞位

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

  1. 超级管理员删除
  2. 该目录的所有者删除
  3. 该文件的所有者删除

粘滞位是针对目录的,针对other的。粘滞位就是加强版的x。

设置了粘滞位后,王五就不能删除这个目录里的文件了,便实现了共享。

相关推荐
一只小阿乐1 分钟前
window 服务器上部署前端静态资源以及nginx 配置
运维·服务器·nginx
bjzhang753 分钟前
docker部署tomcat网站服务器
服务器·docker·tomcat
Jay Kay37 分钟前
brpc中后端server挂在同一个命名服务和不同命名服务的区别详解
运维·服务器·brpc
程序员小白条39 分钟前
我的第二份实习,学校附近,但是干前端!
java·开发语言·前端·数据结构·算法·职场和发展
钟琛......41 分钟前
java中父类和子类的成员变量可以重名吗
java·开发语言
Linux运维技术栈44 分钟前
Nginx 动静分离原理与工作机制详解:从架构优化到性能提升
运维·nginx·架构
不脱发的程序猿1 小时前
Linux守护进程
linux·嵌入式
沐知全栈开发1 小时前
PHP 超级全局变量
开发语言
奈斯ing1 小时前
【prometheus+Grafana篇】PromQL核心函数解析:rate()与irate()函数详解
运维·grafana·prometheus
Deng9452013144 小时前
基于Python的职位画像系统设计与实现
开发语言·python·文本分析·自然语言处理nlp·scrapy框架·gensim应用