什么是Linux权限

Linux权限

文章目录

  • Linux权限
      • 一、root账号与普通账号
      • 二、Linux权限管理
      • 三、权限权值表示方法
      • 四、文件访问权限的设置方法
      • 五、粘滞位
      • 六、权限总结

前言:

  我们在学习Linux的时候,我们知道在Linux下一切皆文件,而不同的文件对于不同的用户有不同的操作权限,有些重要的东西不能让别人随意修改,所以我们就需要给文件加上权限,保证文件的私密性,那么话不多说,开启我们今天的主题!

在这里插入图片描述


一、root账号与普通账号



  在Linux下有两种用户:一种是 超级用户(root),一种是 普通用户

区别 超级用户普通用户
操作范围可以在Linux系统下做任何事情在Linux系统下做有限的事情
命令行提示符‘#’‘$’

在这里插入图片描述

  如果我们当前账号是root账号,想要切换为普通用户,我们只需要这个命令:

su 普通用户名//登录普通用户

在这里插入图片描述

  这样就能切换用户了,但是如果我们当前用户是普通用户,我们想要切换到root账户只需要:

su root//使用后要加上密码

在这里插入图片描述

  我们从普通用户切换为root账号时,需要输入root的密码,且在输入密码的时候,我们是看不到密码的。当密码输入完成时,回车就可以切换为root账号了。

  我们还有一种方法可以从普通用户切换为root账号:

su -//切换root账号

在这里插入图片描述

  在普通账号中,我们只能查看操作自己的工作目录,我们不能看到别人账号下的工作目录,同样,更不能查看root账号的工作目录。

在这里插入图片描述
  如果我们并不想要在root账号下执行命令,但是我们还想要root账号的权限,这个时候我们就可以使用:

sudo 命令//进行root级别权限的指令

在这里插入图片描述
  但是sudo命令在普通账号下并不是默认就有的,需要在root账号下添加可使用sudo命令的成员名单。这个部分目前我们有所了解即可,以后我们会详谈。

总结:

  1、Linux下账号分为root用户和普通用户,root用户的权限最大,可以做任何事情,而普通用户只能做有限的事情。
  2、root切换普通用户使用su + 用户名,普通用户切换为root账号时,需要su root或者su - 然后输入root密码回车即可切换。
  3、普通用户想执行更高权限的命令需要在使用命令前加上sudo


二、Linux权限管理


  • Linux当中,权限的类型一般有r(读),w(写),x(执行)
  • 日常生活中不同身份的人干不同的事,在Linux当中,有着 拥有者,所属组,其他组 三类用户对象,每个文件都可以对这三类用户设置不同的权限。

在这里插入图片描述

  为了区分这个文件属于谁,在我们圈出来的地方,第一个表示拥有者第二个就表示所属组。但是这里并没有显示other组,这是因为我们不清楚other是谁,如果将来有用户来访问我的文件,那么在这个文件当中other就会显示出来。

  一般我们在详细查看系统文件的时候会很容易发现这些:

在这里插入图片描述

  其实前面的这些字母与-就是一个 文件的属性,表示 文件的类型和访问权限,属性的 第一位表示文件类型

  文件属性的第2-10位,表示 文件的权限,权限的前三位 表示文件所有者的权限,权限的 中间三位 表示文件所属组的权限,而权限的最后三位表示其他用户的权限。

在这里插入图片描述

文件类型分类:

d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件


三、权限权值表示方法


文件的基本权限:

1、读权限(r),r也就是READ的首字母,具有读取文件内容的权限;对于目录来说,具有浏览该目录信息的权限。
2、写权限(w),w也就是WRITE的首字母,具有修改文件内容的权限;对于目录来说具有删除移动目录内文件的权限。
3、执行权限(x),Execute的第二个字母,具有执行文件的权限;对目录来说具有进入目录的权限。
4、“ - ”表示不具有该权限。

我们知道了权限三三为一组,一般权限分为如下几种情况:

  • r-- 表示只读
  • --x 表示仅可执行
  • -wx 表示可写可执行
  • rwx 表示可读可写可执行
  • -w- 表示仅可写
  • rw- 表示可读可写
  • r-x 表示可读可执行
  • --- 表示无权限

  文件的权限也可以用二进制来表示,比如一个文件的权限为:rw-,那么该权限对应的二进制就是110。权限为rwx那么二进制就是111,无权限二进制表示为000。而3位比特位也可以使用8进制来表示一位数,那么我们也可以根据不同权限列出不同进制的表示方式:

权限符号八进制二进制
r4100
w2010
x1001
rw6110
rx5101
wx3011
rwx7111
---0000

  有了以上这些我们就能很轻易的分析出我们对一个文件拥有哪些权限。从而可以做具体的事情了。


四、文件访问权限的设置方法



  有一些文件我们不想让别人看到,或者不想让别人对本文件进行操作,也就是说,我们想要对文件的权限进行更改,达到我们想要的效果。其实在Linux当中有这样一条命令:

chmod命令

功能: 设置文件的访问权限。
格式: chmod[选项] 权限 文件名

常用选项:

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

用户标识符与权限字符:

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

我们有如下文件:

在这里插入图片描述

  现在我们想要对file.txt的other组的可读权限给删除,我们只需要:

chmod o-r file.txt//将其他组的可读权限删除

在这里插入图片描述
  如果我们又想要将other组的可读权限恢复,且还想加上可执行权限,我们只需要:

chmod o+rx file.txt

在这里插入图片描述

  这时我们突然又想要将file.txt文件所有权限都置为空,我们只需要:

chmod u-rw,g-rw,o-rx file.txt

在这里插入图片描述

  我们想要恢复权限,仅仅将上面命令的-改为+即可。

  如果我们要对一个文件的三个组有相同的权限管理请求,则我们可以使用a选项来进行批量处理文件权限:

chmod a+r file.txt

在这里插入图片描述

  我们看到所有文件都具有是否可执行这个选项,那么我们的文件拥有了可执行权限就一定能执行吗?我们将file.txt文件属性全部开放,再对该文件写入一些内容:

在这里插入图片描述

  那么我们执行这个文件:

在这里插入图片描述

  我们会发现文件并不能执行,所以我们可以得出结论:一个文件具有可执行的权限,但是这个文件并不一定是可执行的,还需要保证这个文件是一个可执行程序。

  除此之外,我们还可以使用8进制来对一个文件的权限进行管理,按照上面给出的8进制数进行对文件的权限的管理:

在这里插入图片描述


  如果我们需要修改一个文件的拥有者,我们就需要用到下面的命令了:

一、chown命令

功能:修改文件或目录的所属组
格式:chown [参数] 用户组名 文件名

  使用方法也很简单,只需要:

sudo chown 用户组名 文件名

在这里插入图片描述

注意: 普通用户在使用chown命令时,需要使用sudo命令。原因也很简单,我们想要将自己的文件给别人,别人也是需要确认的,不然怎么知道你给的是不是什么病毒?但是你是root账号或者使用sudo命令可以强制将文件 拥有者更改。

二、chgrp命令

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名

常用选项:

  • -R 递归修改文件或目录的所属组

在这里插入图片描述

  要更改所属组也需要进行sudo或者在root账号下使用该命令。

  我们有对应的更改所属组与拥有者的命令,但是并没有更改other组的命令,这是因为我们在更改拥有者与所属组的同时,other是在不断变化的,说白了,其实更改拥有者与所属组就已经将other更改,所以不需要更改other的命令。

如果我们感觉一个一个更改拥有者与所属组很麻烦,我们也可以使用:

chown 拥有者:所属组 文件名

在这里插入图片描述
  这样更改就方便了许多。

  我们前面说了,文件属性的首尾表示文件的类型,但是文件的类型这么多,可能会记混,有没有什么办法能详细查看该文件到底是什么文件的命令呢?Linux下有一个file命令:

file命令

功能:查看文件类型的详细信息
格式:file [选项] 文件或目录

常用选项:

  • -c 详细显示指令执行过程,便于排错或程序执行的情况。
  • -z 尝试去解读压缩文件的内容。

在这里插入图片描述

  使用file命令就可以显示文件的详细类型。


五、粘滞位

  关于Linux的权限问题,我们有这样三个问题:

一、对于一个目录而言,如果要进入一个目录,需要什么权限?

答案:

  • x决定我们是否可以进入目录。
  • r决定我们是否可以对目录信息进行查看。
  • w决定是否可以在目录下新建和删除文件。

二、为什么我们创建的普通文件默认权限不是777而是664,目录文件默认权限不是777而是775?

  我们在创建一个普通文件时,我们的默认权限转化为8进制就是664,当我们创建一个目录文件时,我们的默认权限是775,为什么他们的默认权限不是777?

在这里插入图片描述

  这是因为我们系统根据不同种类的文件进行了分类,有些文件不需要的属性就不会去加,或者由其他应用程序来加,或者由用户需要时自己添加,一般我们的普通文件里是不需要进行可执行的,所以在创建普通文件时就默认没有这个选项,目录同理。

  那么按理来说,我们的普通文件的权限应该是666,目录文件权限应该是777,但是我们看到的目录文件权限是775,普通文件权限是664啊。其实这是因为Linux存在一种叫做权限掩码————umask

umask命令

功能:
  查看或修改文件掩码
  新建文件夹默认权限=0666
  新建目录默认权限=0777
  但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是:mask & ~umask
格式: umask 权限值(8进制)

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

  实际上,起始权限去掉umask值,就是我们的默认权限了,这里的去掉并不是单纯的减法,而是 按位与运算(&)

在这里插入图片描述
  当然,umask值是可变的,可调整的,直接使用:

umask 3位8进制数

在这里插入图片描述
  我们将两个新建文件属性翻译为8进制对比,也就说明了umask的值修改成功。

  我们将一个普通文件全部的权限置为0,再将文件拥有者和所属组全部置为root,但是我们在普通用户下却能将root的文件给删除了:

在这里插入图片描述
  我们发现居然可以删除这个文件,普通用户可以删除root文件,这是很严重的问题,这很不科学。
  为了解决这个问题,在Linux中引入了粘滞位:

粘滞位:

  给目录中的other设置的一个权限位,具有x的意义,同时也进一步对目录权限就进行特殊限定:
给目录的文件,只有root或者文件的拥有者有权利进行删除,其他人一概不允许。

  使用形式:

chmod +t 目录名

  如果我们想要将粘滞位删除,我们只需要将+改为-即可:

chmod -t 目录名

六、权限总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

在这里插入图片描述
  如果对你有帮助的话,还望能留下三连支持一下博主~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/263655.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【杂项】程序的执行目录和程序的当前目录

当32位应用程序运行时,系统将为它分配一个4GB的地址空间,加载模块会会分析该应用程序的输入信息,从中找到程序将要访问的动态链接库信息,在用户机器上搜索这些动态链接库,进而加载它们,搜索的顺序依次是 程…

最短路径问题

BFS: Dijkstra: Floyd: 多个中转点:可以解决负权值带权图; 总结:

什么是高防IP,高防IP该如何选择。

高防IP,指的是高防御能力的IP地址。在互联网的世界里,网络安全问题成为一个重要的话题。作为一个用户,你是否曾遇到过被黑客攻击造成的网站瘫痪、信息泄露等问题?如果你是一个企业,你是否考虑过自己公司的网站和业务的…

Unity DOTS中的baking(一) Baker简介

Unity DOTS中的baking(一) Baker简介 baking是DOTS ECS工作流的一环,大概的意思就是将原先Editor下的GameObject数据,全部转换为Entity数据的过程。baking是一个不可逆的过程,原先的GameObject在运行时不复存在&#x…

vscode 编译运行c++ 记录

一、打开文件夹,新建或打开一个cpp文件 二、ctrl shift p 进入 c/c配置 进行 IntelliSense 配置。主要是选择编译器、 c标准, 设置头文件路径等,配置好后会生成 c_cpp_properties.json; 二、编译运行: 1、选中ma…

Kubernetes -Kubernetes中的Network组件

Network是Kubernetes体系中的重头戏,相比于其它组件来说也比较难,因为Kubernetes中所有的Pod或者服务之间一定是需要进行网络通信的,如果不能解决网络通信的问题,那可以说整个Kubernetes体系中的Pod是没有灵魂的。 所以必须要把N…

最新接口自动化测试面试题

前言 前面总结了一篇关于接口测试的常规面试题,现在接口自动化测试用的比较多,也是被很多公司看好。那么想做接口自动化测试需要具备哪些能力呢? 也就是面试的过程中,面试官会考哪些问题,知道你是不是真的做过接口自…

【K8S in Action】服务:让客户端发现pod 并与之通信(1)

服务是一种为一组功能相同的 pod 提供单一不变的接入点的资源。当服务存在时,它的 IP 地址和端口不会改变。 客户端通过 IP 地址和端口号建立连接, 这些连接会被路由到提供该服务的任意一个 pod 上。 pod 是短暂,会删除增加,调度…

从零开发短视频电商 在AWS SageMaker已创建的模型列表中进行部署

1.导航到 SageMaker 控制台。 2.在 SageMaker 控制台的左侧导航栏中,选择 “模型” 选项。 3.在模型列表中,找到您要部署的模型。选择该模型。 4.点击 “创建端点” 选项或者点击 “创建端点配置” 选项都可以进行部署。 选择创建端点进去后还是会进行…

[MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录:不要在乎别人怎么看你,因为他们根本就没有时间,他们只关心他们自己。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法 MySQL数据库 存储引擎 前言MySQL体…

Java-JDBC-连接数据库

数据库 数据库是一种数据存储结构,它允许使用各种格式输入、处理和检索数据——不必在每次需要数据时重新输入它们。数据库具有以下主要特点: 实现数据共享。减少数据的冗余度。数据的独立性。数据实现集中控制。数据的一致性和可维护性,以确…

nginx多ip部署

1.修改网卡信息自定义多个IP 进入/etc/sysconfig/network-scripts,编辑ifcfg-ens33网卡文件。将dhcp动态分配修改成static,同时添加ip地址子网掩码、网关和DNS。 修改完成后重启网卡,systemctl restart network 2.修改nginx配置文件 有几个…