大家好呀,这篇博客主要记录Linux权限相关知识,欢迎大家一起交流!
目录
shell命令及其原理
Linux权限的概念
什么是权限?
权限的本质
Linux中的用户
Linux中文件的权限
修改权限的做法
对比权限有无的表现
修改权限的第二套做法
文件类型
如何理解x
目录权限
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:介于用户和操作系统之间的命令行解释器,主要包含:
1)将使用者的命令翻译给核心(kernel)处理。
2)同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的 操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运 行出结果,通过shell解析给用户。
可能这样不是很好理解,那么下面讲一个有趣的故事:
如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的 且有让你心动的如花。你看上了如花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。
那么,为什么会存在外壳程序(shell程序)呢?主要原因有两点:
1.用户不善于和操作系统OS之间交互
2.shell外壳的存在,可以对请求进行合法性检查,变相的保护操作系统OS
那么,如果用户输入非法命令怎么办?
bash基本都会给我们创建一个子进程,这个子进程帮用户进行命令行解释,及时出错了也不影响操作系统,因为没有影响到bash。
那shell和bash有什么区别?还是以上面的媒婆故事举例,如果shell是媒婆,bash就是王婆,sh就是李婆。
权限,就是通过一定的条件,拦住一部分人,给另一部分人权利,来访问某种资源。(可以类比为vip或门禁)
权限和人有关,也和事物的属性有关。
Linux下有两种用户:超级用户(root)、普通用户。
超级用户:可以再linux系统下做任何事情,不受权限约束
普通用户:在linux下做有限的事情
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
那么,如何在超级管理员和普通用户之间互相身份切换?
普通用户变成root:
su:只是切换身份,并不会改变目录。(推荐)
su -:切换身份,会改变目录。
root变成普通用户:
su 用户名:从root变成普通用户。
sudo:指令提权,不想变成root,只是想以root的身份执行下一个工作。
Linux中有三种“人”:拥有者、所属组、other。Linux中具有组的概念,主要是在多人协作的时候更好的进行权限管理!
在新创建的文件中,我们打印出其详细信息,后面的文件信息我们都很容易理解,那么现在我们要了解一下蓝框中的信息代表什么。
第一位:表示文件的类型。-:普通文件 d:目录文件
剩下的一共是9个字符,为什么是9个呢?
文件的属性权限一般有三种:
1.r,读;2.w,写;3.x,可执行权限。
所以上面9个字符分别表示:拥有者有什么权限,所属组有什么权限,other有什么权限。三三为一组,分别对应拥有者,所属组,other。
那么,我们以拥有者权限的前三个字符为例,来详细看一下这三位具体代表什么。
第一个字符:是否具有读权限,如果是,就是r,否则,就是-
第二个字符:是否具有读权限,如果是,就是w,否则,就是-
第三个字符:是否具有可执行权限,如果是,就是x,否则,就是-
那么,我们该怎么理解test.txt这个文件对应的权限呢?
该文件的拥有者具备读、写、不能执行等权限;该文件所属组具备读、写、不能执行等权限;该文件的other具备读、不能写、不能执行等权限。所以以后我们描述文件权限时,要先确认是哪一个人,然后再确定这个人有哪些权限。
一个文件的权限,谁能修改?
a.文件的拥有者
b.root
修改文件权限的指令:
chmod u+-rwx,g+-rwx,o+-rwx,a+-rwx filename
可以对这些命令进行任意的组合。(u-user,g-group,o-other,a-all)
虽然文件的拥有者是自己,但自己给自己设置了权限,不能读、写、执行。
给拥有者加上写权限,并且写入内容给文件,可以看到文件大小发生改变,但是仍然不能读文件。
现在给文件加上读权限,就可以打印文件内容了。
因此,对于普通用户,自身要受到对应权限的约束,即便这个文件是自己的!
root不受权限约束!
因此,我们可以通过修改权限,只让自己和所属组有权限读写,other无权限读写,以此来保护文件。
权限存在的意义:保护普通用户的文件的一般的安全性!
现在,我把拥有者的rw权限去掉,但此时ghs还是所属组,为什么不让我读写了呢?因为,在用户身份识别时,只识别一次!(首先和拥有者匹配,匹配成功了,就不和所属组再匹配)
把文件给被人是强制的,需要指令提权,推荐直接使用su,把自己变成root。
更改用户角色的指令:
chown name filename
chgrp name filename
chown name1:name2 filename(同时更改拥有者为name1,所属组为name2)
那么,怎么不见修改other的指令呢?因为不需要,拥有者改了,所属组该改了,other自然就改了!
我们以拥有者为例,有这个权限就是1,没这个权限就是0,那么上图file.txt的拥有者权限就是110->6(8进制),对于所属组的权限就是110->6(8进制),对于other的权限就是100->4(8进制),所以,如果要表示这个文件的全部权限,可以直接采用664(8进制)的方案。
那么,可以使用000去掉所有人的所有权限。
使用777加上所有人的所有权限。
使用660批量加上去掉所有人的权限。
因此,使用
chmod 八进制 filename
可以达到修改权限的目的。
windows是如何区分文件类型的?后缀名。然而,Linux不通过后缀区分文件类型!【不是说Linux不用后缀】那通过什么区分呢?通过ls -l第一个属性列。
Linux文件类型:
-:普通文件,文本文件,可执行程序,库等都叫做普通文件
d:目录文件
b:块设备文件
c:字符设备文件--显示器本质就是字符设备
p:管道文件
l:链接文件
Linux系统不以文件后缀作为区分文件的类型,并不代表gcc不需要!!Linux系统!=gcc,Linux不区分文件类型,但是Linux上面的工具可能区分!我们在Linux对于文件后缀的态度:可以使用!
能执行 = 具有可执行权限+你是一个可执行文件
如果我们要进入一个目录,需要x权限。
目录的r权限:用户能否查看指定目录内的文件信息
目录的w权限:决定用户是否能在指定目录内新建,修改,删除文件
目录的x权限:决定用户能否进入到目录中
Linux创建文件的时候,为什么好像有默认权限?为什么是我们看到的样子?
创建的普通文件,起始权限是:0666,去掉x的
创建的目录文件,起始权限是:0777,包含x的
在Linux中,会存在权限掩码umask:
最终权限 = 起始权限&(~mask)
比如,666->110 110 110 ,
002->000 000 010,~umask->111 111 101,
那么,还有一个问题,
删除一个文件和该用户有没有该文件所在目录的w权限有关!
如果我们想在Linux下,由多个用户建立一个共享文件,来被大家共同访问,怎么办?
首先这个文件,不能在各自的家目录下创建,为什么?
因为,自己的家目录只对所有者有权限!!!我们只能在系统的非用户目录下创建!
那么,问题来了,当我们在系统的非用户目录下创建文件后,只要用户具有目录的写权限,那么他就可以随意删除别人的文件,不论这个文件是谁创建的!这好像很不科学啊,因此,为了解决这个不科学的问题,Linux中引入了粘滞位的概念。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除