引言
这里以一个较为形象的例子作为对权限的理解,一村子里面有一媒婆,这媒婆呢专门负责说媒之事,村东头有一年轻小伙看上村西头的一漂亮姑娘,而小伙自己为人羞涩矜持,着实像个娘们,便拜托媒婆前去说媒,媒婆听后,二话不说就前去拜访村西头的那位姑娘,可人家姑娘根本不愿意,媒婆便实打实的跟小伙说了情况,隔了几天,在小伙极力坚持之下,又让媒婆前去一番,可得到的结果依然还是姑娘的拒绝,媒婆心想,这可咋办呢,这要在做不成不就坏了我名声吗?于是心生一计,找了一个实习生王婆来做这件事,那么这样不管实习生有没有做成功对媒婆来说就没有影响了。在以上这个例子里面,想说的是 ,在实习生来到之前,说媒的权限是在媒婆这里的,实习生王婆没有去说媒的权限,来了之后,就有了说媒的权限,那么这期间就会出现权限请求,权限下放的操作。
一、shell
Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel) “ ,但我们一般用户,不能直接使用kernel,其难度之高,复杂成分之高,是一般用户难以驾驭的。而是通过kernel的”外壳”程序,也就是所谓的shell,来与kerne|沟通。如何理解?为什么不能直接使用kernel?从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
●将使用者的命令翻译给核心(kernel) 处理。
●同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符或者运行起来一个应用程序) 。shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果通过内核运行出结果,通过shel解析给用户。就好比上面的例子,你是哪个羞涩矜持的小伙,shell就像媒婆,操作系统就像村西头的姑娘,你想要像姑娘告白,但又不好意思,就拜托媒婆前去提亲,媒婆将你的心意完完全全的转达给姑娘,而我们找到的媒婆姓王,所以我们叫他王婆,他不是媒婆这一行业,而是这个行业里面实实在在的一个实体,与他对应的我们称之为bash
综上:内核shell权限最高,由shell下放权限给每一个单独的bash,bash来执行我们的命令。
二、权限
Linux下有两种用户:超级用户(root) 、普通用户。
● 超级用户:可以再linux系统下做任何事情,不受限制
● 普通用户:在linux 下做有限的事情。
● 超级用户的命令提示符是“#”,普通用户的命令提示符是"$”。
1、su [用户名]
功能:切换用户
例如,要从root用户切换到普通用户user,则使用su user。
要从普通用户user切换到root用户则使用 su root (root可以省略),此时系统会提示输入root用户的口令。
需要注意的是,也可以用 su - 来进行切换到root用户,su 与 su - 他们之间的区别就是当前位置的不同
从下图就可以发现,两者的地址是不同的,su是处于当前目录,不会发生改变,su -则是回到/root目录
Ctrl + D
功能:从当前用户退回到上一个用户
与之同类功能的还有:
su username,会多创建一个用户,可以看到这里一共多了4个用户,就是因为之前的用户切换所造成的的,因此这种退出root的方法不是很建议
exit,直接退回,不会创建用户
2、短暂获取root权限
sudo(临时获取root权限,仅当前语句权限提升)
在默认情况下,sudo命令是无法使用的,需要在特殊文件中进行设置,将用户添加进信任名单才可以使用sudo命令
方法:
1、chmod 740 /etc/sudoers,将该文件权限进行更改,这里的内容属于改文章后面部分的内容,可以在将后面部分看完之后,在后头看就会很清晰了。
2、vim /etc/sudoer,进入该文件之后找到以下图片中的一行命令,按照图片中第100行的格式,将改行复制一份,将复制行的root更改成你的用户名即可
三、权限管理
1、文件访问者分类(人)
文件访问者根据人进行分类,分成了三大类
1、文件和文件目录的所有者: u--User
2、文件和文件目录的所有者所在的组的用户: g--Group
3、其它用户: 0---Others
2、文件类型和访问权限
在最左边这一列就是每个文件的类型和权限了,这也是本期我们关注的重点。
(1)、文件类型
文件夹
普通文件
软链接(类似Windows的快捷方式)
块设备文件(例如硬盘、光驱等)
管道文件
字符设备文件(例如屏幕等串口设备)
套接口文件
(2)、基本权限
u | g | o | ||||||
- | - | - | - | - | - | - | - | - |
r | w | x | r | w | x | r | w | x |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
数字表示法:为0则表示对应的权限没有,反之则表示有 字符表示法:r(可读)w(可写)x(可执行),将对应的字符跟上即代表具有该权限,如果不想拥有该权限,将其写为-即可 |
u(拥有者) | rwx(111)八进制表示法rw-(110)……无权限该位为0,反之为一 |
---|---|
g(所属组) | rwx(111)八进制表示法rw-(110)……无权限该位为0,反之为一 |
o(其他) | rwx(111)八进制表示法rw-(110)……无权限该位为0,反之为一 x位可替换为t(粘滞位) |
a(全部用户权限同时设置) | rwx(111)八进制表示法rw-(110)……无权限该位为0,反之为一 |
(3)、权限设置
权限是文件用来限制用户行为的一种方式,具体的权限就意味着不同的用户所做的事也是不同的。
1、chmod + u/g/o/a + rwx(可任意组合)/八进制 + 文件
这里我们以以下file.txt文件与test目录进行实验
可以看到初始情况下,文件的权限为rw-rw-r--
我们来对其权限进行以下修改
chmod u+x file.txt
就可以发现,该文件多了可执行的权限,既然能增加权限,那么能较少权限呢?
chmod u-wx file.txt
可以发现是同样可以的
那么再来依次尝试对所属组,其他用户进行相关操作:
那么可以一次性对一个文件的拥有者,所属组,其他用户同时更改权限吗?
答案是可以的
实验了字符形式修改权限,那么如何使用数字形式来修改权限呢?
chmod + ooo filename
此处的o指代的是八进制数,具体可参考上方权限表格
2、chown + R user file1,file2……
功能:修改文件/文件夹拥有者
chown user file1,file2……
可以修改权限了,那么我们能不能修改文件的拥有者或者所属者呢?答案是可以的。
在修改之前我们先像一个问题,你愿意其他人直接把他喜欢或者不喜欢的书直接就扔你手上撒手不管吗?也不跟你多说,扔给你转头就走。这种情况我们肯定会不同意的,操作系统也是如此,你直接把一个文件的拥有者或者所属组改成其他人或其他组这肯定会带来不必要的麻烦,因此我们需要先获得对方的同意,然后再进行修改,而不能直接修改。
但是普通用户该怎么获取同意呢?普通用户不行,需要获得root权限才可以修改,因此在进行权限修改的时候需要加sudo 或者是通过su 切换到root用户再来进行修改
sudo chown HBtest file.txt
3、chgrp + R user file1,file2……
功能:修改所属组
修改文件所属组,实现方式与chown一样,这里就不做过多展示了
4、umask
功能:查看文件掩码
新建文件默认权限=0666
新建目录默认权限=0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值,而是文件权限:664 目录权限:775。原因就是创建文件或目录的时候还要受到umask数值的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask,可以理解为做减法
八进制的666 - 002也确实是得到664,可以验证出确实是将umask的值减去了。
umask + 八进制数
通过实验就可以得出umask的值影响了文件/文件夹的默认权限
四、文件权限
可执行权限:如果目录没有可执行权限,则无法cd到目录中.
可读权限:如果目录没有可读权限,则无法用Is等命令查看目录中的文件内容.
可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件.
于是,问题来了~~
换句话来讲,就是只要用户具有目录的写权限,用户就可以删除目录中的文件,而不论这个用户是否有这个文件的写权限。这好像不太科学啊,我张三创建的一个文件,凭什么被你李四可以删掉?我们用下面的过程印证一下。
可以发现不仅不是该用户,不仅能往文件里面写东西,还能删除东西,这明显对于所有者来说,不够安全,而我们需要将这安全做到最大化,由此引出粘滞位t。
粘滞位:是一种特殊的功能,其主要作用于文件夹下,文件夹设置了该权限,other就只能创建和删除属于自己的文件,而不能删除或者修改不属于自己的文件,因此就满足了一个文件夹下有多个用户文件共存的要求。
chmod o+t 目录
这样就将该目录设置有粘滞位的权限。其他用户就不能删除不属于自己的文件或文件夹了。
本次分享就到此结束了,大家如果对改文章有新的见解或疑问,欢迎你们的留言或私信!!