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

简介: 【Linux】权限(shell运行原理、概念,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),则该目录下的文件只能由


  • 超级管理员删除
  • 该目录的所有者删除
  • 该文件的所有者删除

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






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


目录
相关文章
|
23小时前
|
监控 Shell Linux
Linux的Shell脚本详解
Linux的Shell脚本详解
|
2天前
|
Linux 数据处理 数据库
深入解析Linux命令id:理解用户身份与权限
`id`命令在Linux中用于显示用户身份(UID, GID和附加组)。它查看系统用户数据库获取信息。参数如`-u`显示UID,`-g`显示GID,`-G`显示附加组,结合`-n`显示名称而非ID。用于确认命令执行者身份,确保权限正确。在脚本中使用时注意权限管理,遵循最小权限原则。
|
4天前
|
安全 Linux Shell
Linux基础——Linux权限详解
Linux基础——Linux权限详解
5 0
|
13天前
|
Ubuntu Java Linux
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
|
存储 IDE Unix
用了这么久 Linux ,才知道这些概念。。。
我们大家应该知道,Linux 和 UNIX 中的文件系统是一个以 / 为根的树状式文件结构,/ 是 Linux 和 UNIX 中的根目录,同样它也是文件系统的起点。所有的文件和目录都位于 / 路径下,包括我们经常听到的 /usr、/etc、/bin、/home 等。在早期的 UNIX 系统中,各个厂家都定义了自己文件系统的命名构成,比较混乱,而且难以区分。
用了这么久 Linux ,才知道这些概念。。。
|
1天前
|
存储 监控 安全
深入探索Linux的journalctl命令:系统日志的利器
**journalctl 深入解析:Linux 系统日志的强大工具** journalctl 是 Linux 中用于查询和管理 systemd 日志的命令行工具,与 systemd-journald 配合收集广泛的信息,包括内核消息和服务日志。它提供实时追踪、过滤、导出等功能,如 `-f` 实时监控,`-u` 过滤特定服务日志,`-k` 显示内核消息,`--since` 和 `--until` 选择时间范围。在实际应用中,结合权限管理、日志空间控制和有效过滤,journalctl 成为系统管理员诊断和优化系统的得力助手。
|
1天前
|
数据挖掘 Linux Perl
Linux命令join:高效处理文本数据的利器
`join`是Linux文本处理的强兵,用于基于共同字段合并两个已排序文件。它按字典序比较字段,支持自定义分隔符,且能处理未匹配行。`-a`显示未匹配行,`-e`指定空字段替换值,`-j`设置共同字段,`-o`定制输出格式,`-t`定义字段分隔符。在数据分析时,务必先排序文件,并根据需求调整参数。可与`sort`、`cut`等命令配合使用。
|
1天前
|
监控 数据挖掘 Linux
Linux命令jobs:后台任务管理利器
`jobs`是Linux终端的利器,用于管理和查看后台任务。它显示当前会话中的作业状态,如运行、停止,可通过`Ctrl+Z`暂停任务,`bg`放后台,`fg`回前台。参数`-l`显示PID,`-n`显示最近状态变化的作业。`jobs`帮助高效监控和管理长时间运行的命令,如在数据分析时。记得使用正确任务编号,谨慎使用`kill`,并定期检查任务状态。
|
1天前
|
消息中间件 运维 监控
Linux命令ipcs详解:IPC对象的全面洞察
`ipcs`命令详解:Linux下用于洞察IPC(消息队列、信号量、共享内存)对象的工具。它列出系统中的IPC资源,显示详细信息,如ID、所有者、权限等。参数如`-m`、`-q`、`-s`分别显示共享内存、消息队列和信号量信息。结合`-l`或`-c`可调整输出格式。定期检查IPC状态有助于系统管理和性能优化。需注意权限和谨慎操作。
|
1天前
|
消息中间件 Linux 数据处理
Linux命令ipcrm详解:轻松管理IPC对象
`ipcrm`是Linux下用于删除IPC(进程间通信)对象的命令,如消息队列、共享内存和信号量。它通过指定对象ID或键值进行操作,如`-m ID`删除共享内存,`-q ID`删除消息队列,`-s ID`删除信号量。使用时需注意确认对象未被使用,以免影响系统运行。结合`ipcs`命令检查对象详情,并可定期清理不再需要的IPC对象以优化系统资源。

热门文章

最新文章