个人主页:Lei宝啊
愿所有美好如期而遇
目录
前言
在开始Linux权限理解前,我们先来理解一下shell命令以及运行原理。
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel),但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
我们通过shell远程登录到云服务器上进行操作,买的云服务器,安装的Centos 7版本的Linux系统,用户通过shell外壳与Linux操作系统进行交互。
那么我们为什么不能直接与操作系统进行交互,而是要通过shell外壳呢?
有两个原因:
1、操作难度,用户的水平可能不足以直接与操作系统进行交互。
2、安全性,用户如果发出不安全的指令,比如使操作系统有挂掉风险的指令,那么shell外壳就可以安排一个子进程让他去执行,就算挂掉也不会影响进程。
那么shell外壳是什么呢?
命令行解释器,我们登录的时候,可以看到这样的东西:
这个就是命令行解释器,也就是我们的shell,当然,我们可以试着查看他。
bash就是shell的一种吗,就好像shell是媒婆,bash就是王婆那样。
那么怎么办我们也就知道了。
shell对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
Linux权限的概念
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受限制
普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
命令:su [用户名]
功能:切换用户。
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。
接下来我们来看看他们间的切换
root使用su切换普通用户后当前目录时不变的,普通用户su切换超级用户后当前目录也不变。
普通用户使用su -切换root时就是重新登录root。
从普通用户退回root。
1.文件访问者的分类(人)
拥有者:user(文件和文件目录的所有者)
所属组:group(文件和文件目录的所有者所在的组的用户)
其他人:other(其它用户)
2.文件类型和访问权限(事物属性)
文件类型
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
文件夹即目录,开头为d
普通文件包括:图片,文本文件,源代码,视频,库,可执行文件等,开头为-
软链接,开头为l
其他不做介绍,了解一下就好
基本权限
读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件以及创建文件的权限
执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“—”表示不具有该项权限
3.文件权限值的表示方法
...
user只有只读权限,无法向文件写入。
user只有写权限,不可读取。
拥有执行权限的文件a.out(我们通过执行gcc指令出来的a.out,此时a.out是可执行文件)
但是拥有执行权限就可以执行权限了吗?(我们通过添加x权限出来的file,并不是可执行文件)
我们看到尽管我们有了执行权限,但是由于file不是可执行文件,所以不可执行。
4.文件访问权限的相关设置方法
chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
① 用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
看普通文件的权限
去掉test.c文件所有的权限
添加权限
再将权限全关掉,之后我们测试=给权限
,
②三位8进制数字
前三位,中三位,后三位按二进制换算为8进制
chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
但是我们如何同时修改拥有者和所属组呢?
有没有细心的老铁发现我们创建文件和目录时他们默认有的权限转换为八进制是多少吗?
文件为644,目录为755
当然,你的可能和我不一样,这就要提到我们的umask掩码,
umask
功能:
查看或修改文件掩码
新建普通文件默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
我们取掩码后面三位转换为二进制:000 010 010
新建普通文件默认权限转换二进制:110 110 110
新建目录默认权限转换为二进制为:111 111 111
掩码有一的地方对应着新建文件相同位置改为0,则结果为:110 100 100和111 101 101,转为8进制也就是644和755
现在我们设置一下umask的值
777和666,结果是显而易见的
file指令
功能说明:辨识文件类型。
语法:file [选项] 文件或目录...
Linux系统不区分大小写,但是他的指令区分。
目录的权限
接下来我们来看目录的权限
目录的拥有者去掉自己目录dir的r权限后,无法查看dir目录下有什么文件。
去掉拥有者目录dir的w权限后,无法在该目录下创建文件,删除文件,改名,以及移动操作,但是可以做写入操作。
去掉拥有者目录的x权限后,无法进入该目录
粘滞位
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
那么为什么要提出粘滞位这个概念呢?
进入root的根目录,tmp这个目录时共享目录,仔细看他的权限,不是x而是t,t就是粘滞位
接下来我们正式回答为什么有粘滞位的这个问题:
假设有两个普通用户,他们都在一个云服务器上,有一天他们想要在这上面查看对方的一个文件,
显然,没有权限,无法查看,那么有什么办法解决呢?于是Linux给出了方法,就是共享目录tmp,谁都可以看,谁都可以改里面的文件,谁也可以进入目录。
但是就根据我们的rwx权限而言,我张三建的文件,你李四是不是也可以删?那我不想让你删,但是现有的权限又允许删,所以Linux就搞出了粘滞位t,这样你别人想删就不行了。
关于权限的总结
文件访问者分拥有者,所属组和其他,文件类型分普通文件,目录,软链接等,目录和文件的访问和修改等需要权限,我们通过chmod,chown等修改权限,而root不受权限影响,最终我们通过一个共享目录引出了粘滞位这个概念
root几乎可以无视权限问题,普通用户设置的权限在root那里是没有用的