人这一辈子很多时间都活在别人的记忆里,而爱人的记忆,就是我们来时的路。
------🧡
目录
👓①、赋予sudoer文件写的权限(需要在root账号下操作)
🏆一、shell
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
1、将使用者的命令翻译给核心(kernel)处理。
2、同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的 操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。
shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
简单来说,我们程序员把命令(需求)交给shell,shell去和操作系统交互,当用户输入非法指令,shell直接拒绝掉。shell存在的意义:变相的保护操作系统。shell在执行命令时,它是通过派生子进程(bash)的方式执行用户的指令,而shell本身并不执行对应的指令。
🏆二、Linux用户
Linux下有两种用户:超级用户(root)、普通用户。
🐱超级用户:可以在Linux下做任何事情,不受限制;
🐱普通用户:在Linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$".
🖊1、su指令
su指令用于用户间的切换,使用su从普通用户切换到root用户,需要输入root密码,而从root用户切换到普通用户,不需要密码,很自由。
这里,强烈不建议root和普通用户密码一样,因为我们在切换用户会出现问题,比如:
🖊 2、su -指令
su -指令也可以切换到root用户,但是要注意和su之间的差异。
1、su路径不变,把自己变成root。
我们可以看到,当只使用su时,我们从普通用户切换到root用户下普通用户所在的路径。简单来说。
2、su -回到家目录
当我们使用su -时,就从普通用户切换到/root目录下。
🖊3、root切换
👓①exit退出
👓 ②su
👓 ③Ctrl+d
这种比较挫,不建议,因为就是退出登录,然后ssh重新登录。
🖊4、提权
在现实生活中我们有这种场景,我不是root用户,但是我想以root的权限去执行命令。这时候就要提到一个指令:sudo指令。
sudo作用:只要加上sudo,与sudo最近的指令就会以root的身份执行指令。sudo指令一般是普通用户使用,root本身就是超级用户,不需要用sudo。
这里不知道大家注意到一个问题了没有,我想短暂提权,为什么要我输入普通用户的密码,如果仅仅输入普通用户的密码就能提权,那我普通用户不就可以恣意妄为了吗?不着急,如果你的普通用户没加入到系统的可信任名单,你提权还是会失败的。
比如这里:
跳出这个,说明我们需要将当前用户,添加到可信任名单,也就是添加到/etc/sudoers中。
具体怎么添加呢?博主找个没被添加的用户给老铁演示一下:
👓①、赋予sudoer文件写的权限(需要在root账号下操作)
sudo chmod u+w /etc/sudoers
👓②、编辑sudoers文件,给对应的用户添加sudo权限
sudo vi /etc/sudoers
进去后应该看到这样的界面:别乱动,千万别乱动!!!
这里不要用鼠标的滚轮上下翻动,那无效,用键盘的上下键进行翻阅,往下翻,大概在八十多行找到这样的文本:
这是博主已经给Gyh用户添加到可信任名单了。
我们照猫画虎,按i/a键就可以编辑:
然后,按【ESC】键退出编辑。
再按:wq就可以保存退出,这时候我们就成功把用户Zed添加到可提权的可信任用户名单里面了。
🏆三、文件访问者的分类
文件和文件目录的所有者:u--user
文件和文件目录的所有者所在的组的用户:g --grouper
其他用户:o--other
🏆四、文件类型和访问权限
🖊1、文件类型
我们常用的Windows系统通常通过文件的后缀来区分文件类型,比如图片就以.jpg .png等为后缀,文本通常以.txt为后缀,可执行程序以.exe后缀等等...但是在Linux下区分文件类型和文件后缀没有关系。
Linux以文件属性的第一个字符代表文件类型!!
Linux文件类型:(第一个字符)(常见的)
-:普通文件(源代码,库文件,可执行程序,文档压缩包);
d:目录文件
c:字符设备文件
b:块设备
l :链接文件
p:管道文件
可能光谈论文件类型比较抽象,博主就举几个例子来让老铁直观感受一下:
👓①c:字符设备文件
它通常指比如键盘,显示器等。可以看一下Linux下的字符设备文件。
👓②b:块设备
最直观的块设备:磁盘。上篇博客提过,df - h指令就是具体查看磁盘。
👓③l:链接文件
链接文件在Windows下最直观的就是软件的快捷方式,就是典型的链接文件。
👓④p:管道文件
除了之前博客介绍的| 管道,管道还有很多形态。
通过管道,我们可以实现用户间的交互。
那既然Linux不以后缀区分文件类型,是否就意味着我们就命名文件就随便写,不加后缀呢?
再举两个例子来感受一下:
我这里成功编译了a.out文件,我们修改一下名字,看它是否还执行:
仍旧执行,印证了后缀在Linux下就是文件名的一部分。但是毕竟这样很不舒服我们查看文件的类型。再来看一个例子:
这里可能有的老铁要困惑了,既然Linux文件类型和后缀无关,为什么我用gcc编译器编译test.c文件可以成功,改成test.txt名字就会报错:无法识别文件类型呢?
这里有个误区需要提醒大家:
Linux系统对文件识别与后缀无关,但是不代表gcc等工具识别文件和文件后缀没有关系!!!gcc等工具可能要看文件后缀。
所以,😂,综上所述,为了我们看着舒服,方便识别文件类型,也方便各种工具使用,我们在命名时最好还要加上后缀!!
🖊2、访问权限
介绍完了文件属性中第一个字符代表文件类型,那么剩下的9个字符什么意思呢?
???
首先要说明一下‘r’、‘w’、‘x’、‘-’分别是什么含义。
👓①基本权限
r: Read对文件而言,具有读取文件内容的权限;对目录而言,具有浏览改目录信息的权限。
w: Write对文件而言,具有修改文件内容的权限;对目录而言具有删除移动目录内文件的权限
e:execute对文件而言,具有执行文件的权限;对目录而言具有进入目录的权限。
- :表示不具有该项权限。
👓②三种角色的权限
了解了基本权限,我们再把这九个字符分成三组。
这三个位置是固定的,就是r-w-x的位置,有就有相应的字符,没有就是-.
🏆3、如何操作权限
操作权限涉及两方面:
1、设置文件属性 ---- chmod指令
2、设置文件所属角色 --chown、chgrp指令
👓①chmod指令
功能:设置文件的访问权限。
格式:chmod 角色 +/- 权限 文件。
常用选项:
R ->递归修改目录文件的权限。
注意:只有文件的拥有者和root才能改变文件的权限!!
🐂+:向权限范围增加权限代号所表示的权限。
🐂 -:向权限范围取消权限代号所表示的权限。
🐂=:向权限范围赋予权限代号所表示的权限。(基本不用)
🐂用户符号:
u:拥有者
g:所属组
o:其他用户
a:所有用户
示例:
这里只显示了对单个角色的权限操作。如果我想同时操作多个角色的权限呢?
比如我想同时去掉拥有者和other的所有权限,怎么操作?
只要在中间加上逗号就可以了。
👓②chmod a-/+ 权限 文件名
a:表示all ,就是全体角色,对全体角色权限操作。
👓③没有权限
操作完权限,我们来演示一下没有权限会发生什么:
但是不知道有老铁注意到没,好像有问题,上面虽然我不是拥有者,我把读和写的权限去掉了,但是我不仅是拥有者,我还是所属组啊,所属组有读和写的权限,为什么我不能读和写呢?
这里要说到Linux匹配权限的规则:从左到右先匹配拥有者,再匹配所属组的。
但是other有个例外,那就是root用户。
root账号非常重要!!!!!!!!!!!
🏆4、设置文件所属角色
除了文件属性权限的修改,我们还能修改拥有者和所属组。
👓①、chown
使用方式:chown 角色 文件名
比如我把test.txt 文件给了用户Zed。
但是给文件也要征得别的用户同一。这里我们用root权限,强制给。
强制给方式:root的话直接: chown 角色 文件名
普通用户: sudo chown 角色 文件名(先把自己加入可信任名单)
👓 ②、chgrp
chgrp 授予的所属组 文件名
这里其实chown可以满足同时改拥有者和所属组。但是不能单独改所属组
🏆5、改权限的数字方式
如果用二进制的方式改文件,是否可行呢?
我们将前一种通过指令改权限的方式称为 ugo + rwx方案。
而把数字方式称为八进制方案。rwx相应位置给1或0,再转化为八进制就能实现给或收权限!!
👓①Linux底层的权限设计
那这里还有一个问题,为什么我们创建的目录或普通文件,默认权限是我们所看到的样子呢?也就是为什么目录和普通文件创建出来就是
我们还需要了解Linux的相关规定:
Linux规定:
创建目录的起始权限是:777
创建普通文件的起始权限是:666
但我们创建的也不是777 和666啊?
还要介绍一个东西:权限掩码:umask 。Linux规定,凡是在umask中出现的权限都必须在起始权限中去掉!
umask默认是 0002.
那要是我不想他的起始权限是这样子,我想让他的起始权限修改,怎么操作?
我们可以修改umask。
那么还有一个问题:去掉umask是做减法吗?
👓 ②最终权限
最终权限=起始权限 & (~ umask)
&:按位与
~:按位取反
那么是不是这样子的,我们可以验证一下:
👓 ③进入目录的权限
最后一个问题,我们如果要进入一个目录,需要什么权限?是r(读)吗?是x(执行)吗?
这里也印证了为什么系统规定一个目录必须从777开始的。
👓④file指令
file指令用于辨识文件类型。
🏆六、粘滞位
👓①公共目录
Linux系统中有很多用户,有时我们为了工作交流的需要,可能需要消息共享和信息传递,所以我们需要在一个公共的目录下,进行临时文件的创建(增删查改)。
在根目录下,tmp目录就是一个公共目录,它可以放置很多用户的临时文件。如果我想创建一个公共目录可以吗?显然是可以的,这个文件应该是由root用户创建的,如果是非root用户,需要sudo提权创建。
我们看到在公共目录下,Zed用户的文件是禁止其他用户看到的。
那么,其他用户肯定不能查阅这个文件,那么我们可以删除这个文件吗?
我们看到Gyh用户不可以访问这个文件,但是竟然可以删除这个文件,一个没有访问权限的人有权删除一个文件。
看似不合理的删除,其实很合理,为什么呢?因为这是个公共目录,任何用户都可以对文件进行操作,所以这个删除是很合理的。因为删除文件的权限是目录的权限,和文件本身没有任何关系!!!
但是站在用户的角度,让我们很不舒服,我们想达到在公共目录中,大家可以各自进行rwx操作,但是禁止互删文件!!
所以就有了粘滞键。
👓②粘滞位
#粘滞位 对文件有保护作用。
当一个目录被设置为”粘滞位“(用chmod+t),该目录下的文件只能由
1、超级管理员(root)删除
2、该目录下的所有者删除
3、该文件的所有者删除。
粘滞位操作:chmod +t +公共目录
注意粘滞位是为了解决目录权限的问题,所以要给目录设置,而非文件。
最后奉上两幅图: