【Linux】权限管理
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
1. shell命令以及运行原理
Linux严格意义上说的是一个操作系统我们称之为“核心kernel“ 但我们一般用户不能直接使用kernel。而是通过kernel的“外壳”程序也就是所谓的shell来与kernel沟通。
从技术角度 Shell的最简单定义命令行解释器command Interpreter主要包含
1. 将使用者的命令翻译给核心kernel处理。
2. 将核心的处理结果翻译给使用者
对比windows GUI我们操作windows 不是直接操作windows内核
而是通过图形接口点击从而完成我们的操作
比如进入D盘的操作我们通常是双击D盘盘符.或者运行起来一个应用程序。
shell 对于Linux有相同的作用主要是对我们的指令进行解析解析指令给Linux内核。反馈结果在通过内核运行出结果通过shell解析给用户
。
实际上Shell是一个命令解释器它解释由用户输入的命令并且把它们送到内核。当我们输入一些非法指令时候shell会拒绝执行所以它可以帮助我们保护操作系统。其实一般而言shell本身并不执行对应的指令。而是通过派生子进程
的方式执行用户输入的指令。这么做其实也是为了保护shell。其实Windows的图形化界面。本质上也是一种外壳程序。
所以综上所述shell存在的意义有两点
帮忙进行命令行传递和返回结果
保护操作系统
2. Linux权限的概念
Linux下有两种用户超级用户root和普通用户。那么超级用户和普通用户分别又有什么不同他们之间又有着什么样的关系呢
超级用户 可以再linux系统下做任何事情不受限制
普通用户 在linux下做有限的事情。
超级用户的命令提示符是“#”普通用户的命令提示符是“$”
💕 su 指令
命令su [用户名]
功能切换用户
例如要从root用户切换到普通用户user则使用 su user。 要从普通用户user切换到root用户则使用 su rootroot可以省略此时系统会提示输入root用户的口令
这里我们需要注意的是如果我们要是普通用户切换成root用户时su 后面的root可以省略。同时如果我们想要再次切换回我们原来的用户那么可以按键盘上的 Ctrl + D
键来切换回去或者输入指令su 用户名
来完成。
3. Linux权限管理
3.1 文件访问者的分类
Linux下的文件访问者可以分为以下三类
文件拥有者文件和文件目录的所有者 u—User
文件所属组文件和文件目录的所有者所在的组的用户 g—Group
other 其他用户除了拥有者和所属组之外的用户称为other
对于文件拥有者和其他用户这两者都很好理解那么什么是文件所属组呢
如图所示假定公司要求做一个产品并打话考核一下A、B两个小组且两个小组所做的工作是一模一样的A组创建了一个目录A_codeB组创建了一个目录B_code在这里如果张三写好了一个模块且只开放给组内的成员看那么作为同为一个组的成员的王五就可以看到他所写的内容但是另一个小组的李四则看不到他所写的内容所以这样看来A组就相当于文件所属组其他组的用户是无法访问张三所写的内容的。
3.2 文件类型和访问权限
当我们用ll
指令来显示我们所在的用户下的所有文件详细信息时就会发现有着好多文件信息的标志。
但是我们有没有发现最前面还有10个字符呢那么最前面的10个字符又是什么意思呢
文件类型
drwxrwxr-x
其实前10个字符代表了文件的属性每一个字符都是有他的意义所在的首先第一个字符就代表了文件的类型。那么在Linux操作系统中不使用文件的后缀来区分文件类型的而是用文件属性中的第一列中的第一个字符
来区分文件的类型。
在这里我们可以来看一个有趣的事情
一我们先创建一个名字为test.c的文件。然后在里面写一个简单的C语言代码来打印 hello world
然后我们修改一下这个可执行程序a.out
的后缀名然后再来运行一下。
二在这里我们可以发现程序仍然可以运行。这里我们就可以证明了在Linux中文件类型和后缀名是没有关系的。
三如果我们要是把源文件的后缀名改了的话然后再使用gcc这个编译器去编译的话就会发现编译不通过会报错这又是什么原因呢
其实原因也很简单因为gcc是Linux中安装的一款软件这款软件在进行编译的时候他会通过文件后缀名来识别文件类型。在这里我们可以把Linux文件的后缀看成是文件名的一部分因为我们可以根据文件名来判断文件的类型。
💕 Linux中常见的文件类型
d 文件夹
- 普通文件
l 软链接类似Windows的快捷方式
b 块设备文件例如硬盘、光驱等
p 管道文件
c 字符设备文件例如屏幕等串口设备
s 套接口文件
file指令
💕 file指令
命令file [选项] 文件或目录
功能辨识文件类型
常用选项
-c 详细显示指令执行过程便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。
下面我们来看一下file指令的用法
文件权限
刚才我们已经介绍了Linux下文件的类型第1个字符代表的是文件的类型那么我们现在再来看一下后9个字符所代表的含义吧。他们所代表的含义和文件权限又有什么样的关系呢
文件自身具有的权限属性具有四种r
、w
、x
和-
。这四种属性的含义如下所示
r
读—— Read对文件而言具有读取文件内容的权限对目录来说具有浏览该目录信息的权限w
写—— Write对文件而言具有修改文件内容的权限对目录来说具有删除移动目录内文件的权限x
执行—— execute对文件而言具有执行文件的权限对目录来说具有进入目录的权限-
——表示不具有该项权限
这里我们把后9个字符分为了三组前三列表示的是拥有者权限中间三列表示的是所属组权限最后三列表示的是other权限。
4. 文件访问权限的设置
4.1 chmod指令
💕 chmod指令 修改拥有者、所属组、和other的相关权限
功能设置文件的访问权限
格式chmod [参数] 权限 文件名
other R -> 递归修改目录文件的权限
说明只有文件的拥有者和root才可以改变文件的权限
💖 chmod命令权限的格式
chmod 用户符号 +/-=权限字符
- +向权限范围增加权限代号所表示的权限
- -向权限范围取消权限代号所表示的权限
- =向权限范围赋予权限代号所表示的权限
- 用户符号
u拥有者
g拥有者同组用
o其它用户
a所有用户
下面我们来举几个例子
一给拥有者 + 可执行x
的权限
二对全部用户都 - r
的权限
💖 3位八进制数字修改文件权限
这里我们可以使用三位八进制数字来修改文件的权限三位数字按照顺序分别表示拥有者、所属组、other的权限。
在这里我们需要知道的是这三位八进制数字中的每一个数字都是由相应的三个二进制数字转换而来的。
比如说拥有者具有1 0 0
这三个二进制数字他所代表的八进制数字就是4表示拥有者仅仅具有读r
文件的权限所属组具有0 1 0
这三个二进制数字他所代表的八进制数字就是2表示所属组仅仅具有写w
文件的权限other具有0 0 1
这三个数字代表的八进制数字是1表示了other仅仅具有执行x
文件的权限。
那我们就可以用指令将这三个数字连接起来421给文件赋予权限。
这里我们来总结一下分别总结一下r w x
的权值
读取权限
r
=> 4
写权限w
=> 2
执行权限x
=> 1
权限值的总和即在三个段中的每一个中的读取写入和执行都占给定文件或目录的完整权限。
4.2 chown指令—修改文件拥有者
💕 chown指令
命令chown [参数] 用户名 文件名
功能修改文件的拥有者
chown指令的作用是修改文件的拥有者这里我们先来演示一下
这里我们打话将cjl.txt
这个文件的拥有者从Chenjiale改为Chenyuhang发现并不能修改成功其实这也是显而易见的因为就算在生活中我们要将一个东西给别人的时候也得经过别人同意。
当然Linux中也是这样的既然我们普通用户无法将文件拥有者修改当然了我们还有root呢root在Linux中就充当的是超级管理员的身份他是可以强制帮我们将文件管理者修改。
这里我们可以看到当我们用su指令
切换成root身份时就可以很轻松的将文件拥有者修改掉了。
4.3 chgrp指令—修改文件所属组
💕 chgrp指令
命令chgrp [参数] 用户组名 文件名
功能修改文件的所属组
常用选项
-R 递归修改文件或目录的所属组
同样的如果我们打话将文件所属组修改也必须要用su
指令来切换成超级管理员的身份来修改。
当然了我们也可以将chown和chgrp这两个指令连在一起用用法为sudo chown 用户名:用户名 filename
。
这里我们需要注意的是这些权限约束的是普通的用户对于root而言是不受这些权限的约束的。
4.4 umask指令
💕 umask指令
命令umask
功能查看或修改文件掩码
常用选项
umask 权限值
umask指令的作用是查看或修改文件掩码新建文件夹默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask则实际创建的出来的文件权限是: mask & ~umask
。
5. 目录权限
目录的三种权限分别有不同的功能
可读权限
r
如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
可写权限w
如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件
可执行权限x
如果目录没有可执行权限, 则无法cd到目录中
这里我们一定要注意如果如果要是一个目录没有了可执行权限x
那么将不能进入该目录并且也无法查看该目录下的文件信息。
6. 粘滞位
💕 背景
在使用Linux的时候未来可能会有一些共享目录被普通的用户共享用来保护普通用户产生的临时数据。
但是在这里是有一个问题的也就是说共享的文件是可以被别人随便删除的想要文件不被人删除我们可以将该共享目录的w
权限给关闭但是如果要是将w
权限关闭那么别的用户将也无法在这个目录下创建文件那这个文件就达不到共享的目的了。所以为了解决这一问题就有了粘滞位
这一概念。
我们先在root用户下创建一个共享文件夹public
然后A用户先在其中创建一个test.c
的文件然后把other的r
权限关掉然后B用户去读该文件时发现不能够读但是B用户去删除的时候却发现可以成功。
为了让大家共享文件且用户创建的文件不能被随意删除。这里引入了粘滞位
那么下面我们来演示一下粘滞位的用法
root用户下 chmod +t public
这样我们就成功给public文件夹设置了粘滞位。
当我们设置好粘滞位后除了root这个超级管理员外就发现别人想要删除我们的文件夹时是删不掉的了。