目录
根据上篇博客,我们得知俩种用户:超级用户root、普通用户
相互转换的时候,需要用到su或者su -
如果不切换用户,就想让普通用户以root的身份,执行对应的指令,该怎么去做呢?
解决方法:需要将当前用户添加到系统的文件/etc/sudoers中。这里先不展开说明。后面会做补充。我们暂时使用root,root的权限是最大的,可以随便切换到其他普通用户。也就不存在没有权限的问题了。
一、Linux权限(what)
1、用户分类
Linux下有两种用户:超级用户 (root) 与 普通用户
超级用户:可以再linux系统下做任何事情,几乎不受权限的限制;
普通用户:在linux下做权限范围内的事情;
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”;
2、超级用户
Linux 切换用户的指令是:su;
在 Linux 中,如果我们要从超级用户切换到普通用户,直接 “su username” 即可,没有任何限制
但是如果我们要从普通用户切换到超级用户,就需要输入 root 密码;普通用户切换到 root 用户有两种方式:
- su:切换到root的当前目录
- su-:直接切换到root的根目录
注:Linux 出于安全考虑,从键盘输入的密码在终端上是不会回显的,也就是说我们输入密码时屏幕不会显示任何东西(所以密码写的时候 一定得小心)
3、用户提权 sudo
二、Linux文件权限:人+文件属性
1、文件访问者的3类
什么是权限:定义:一点事情是否允许被谁做
在 Linux 下,文件的访问者被分为三类:
- 所有者:文件和文件目录的所有者 – u (user);
- 所属组:文件和文件目录的所有者所在的组的用户 – g (group);
- 其他用户:除所有者和所属组用户之外的用户 – o (other);
小疑问:这个所属组出来的意义是什么捏??
解答:如果没有所属组的话 那么团队之间的代码是不可以共享的 除了你自己以外 公司的所有人都
是others 很不方便团队之间的交流
人不等于角色:人是生命 角色就是user group other 这俩组概念不冲突,是互相补充的
2、文件类型和访问权限
2.1 ll中第一列字母到底是什么意思?
那么现在 xshell 启动!!
这些前面的东西到底是什么?
这是文件第一列的符号表示
在在inux中,是通过ll显示的众多属性列中的第一列的第一个字符来区分文件类型的
注意:
Linux区分文件与文件的后缀无关,但是不代表不可以使用后缀区分文件类型,但是仅仅是给
用户看的,Linux不通过这个方法来辨别可以用 是给人看的 是给用户做一个提示符号来展示
的 后缀的本质其实就是文件的一部分
d:目录文件
-:普通文件(源代码,库文件,可执行程序,文档压缩包等等)
l:链接文件(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如键盘,显示器)
s:socket文件
第一波字母 叫做文件类型!! windows的文件是在后缀
小插曲:
gcc test.txt 为什么就不可以过?? 不是说不管后缀吗??
Linux系统不管 但不代表gcc工具对文件后缀没有影响
2.2ll中后面九个字符什么意思??
文件拥有者、所属组和其他用户的权限,其中文件的权限一共分为三类:
r – 读权限:Read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限;
w – 写权限:Write 对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限;
x – 可执行权限:execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限;
其中对应位置上有代表权限的字符说明该用户拥有对应权限
如果显示 - 则代表该用户没有对应权限;
三、文件权限值(就是后九个字符)的表示方法
1、字符表示法
2、八进制数值表示法
在Linx中,之后修改权限chmod得写成八进制,所以有了八进制数值表示法
这里二进制的意思就是:1代表该权限拥有,0代表该权限不存在
四、修改文件权限(how)
1、chmod修改权限
语法:chmod [-r] u/g/o ± r/w/x 文件名;
功能:设置文件的访问权限;
常用选项:
- -R 递归修改目录文件的权限
注意:只有文件的拥有者和root才可以改变文件的权限;
1.1chmod 指令权限值的格式
常用选项:
用户符号:
- u:拥有者;
- g:拥有者同组用户;
- o:其它用户;
- a:所有用户;
+/-/= 的意义:
- +:向权限范围增加权限代号所表示的权限;
- -:向权限范围取消权限代号所表示的权限;
- =:向权限范围赋予权限代号所表示的权限;
showtime
1、对单个用户 ± 权限
chmod u+x file.txt
chmod u-r file.txt
chmod g-rw test.txt
hmod o+rw test.txt
2、对多个用户 ± 权限(用一个逗号隔开)
chmod u-rwx,g-rwx test.txt
chmod u+rw,g+rw,o-rw test.txt
3、对于所有用户
chmod a-rwx test.txt
1.2三位八进制数字
文件的权限一共三种 – 读写执行,所以用三个二进制位就可以表示全部情况,如果用八进制则只需要一位
show~time
2、chown ch是change缩写 修改user的人
格式:chown [参数] 用户名 文件名;
功能:修改文件的拥有者;
常用选项:
- -R 处理指定目录以及其子目录下的所有文件
注意:当我们使用 chown 指令将属于我们的文件赋给别人时,需要获得别人的同意,所以在一般情况下我们是不能改变文件的拥有者的;只有 root 不受权限的约束,可以直接将属于 A 的文件赋给 B,而不需要征得 A 和 B 的同意
yzpq就是 user thj就是所属组
3、chgrp 修改所属组的人
格式:chgrp [参数] 用户组名 文件名;
功能:修改文件或目录的所属组;
常用选项:
- -R 递归修改文件或目录的所属组;
注意:和修改文件的拥有者一样,我们也不能直接修改文件的所属组,需要征得别人的同意,而 root 不受权限约束
4、umask查看或修改文件掩码
格式:umask 权限值;
功能:查看或修改文件掩码;
Linux下文件的默认权限如下 – 普通文件的默认权限是0666,目录文件的默认权限是0777,其中第一位数字代表这是三位八进制数,后面三位数字分别代表拥有者、所属组和其他人对文件的权限;但是我们发现,我们平时创建的文件的权限和上面的好像并不相同:
通过计算:rw-:110是6; r-- :100是4;rwx:7 ;r-x:101是5
所以文件在现实中不是我们预料的那种方式出牌
(一会我们来讲一个面试题,为什么目录要设置成777)
这是因为创建文件或目录的时候除了受默认权限的约束之外,还要受到 umask (文件掩码) 的影响;假设默认权限是mask,则实际创建的出来的文件权限是:
mask & ~umask
&:与运算,全部为1 才为1 有0则0
不是减法 不是减法 不是减法!!!!!!!!!!
注意:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限;超级用户默认掩码值为0022,普通用户默认为0002
权限掩码的作用:权限掩码:因为不同用户的默认umask不同,文件和目录的默认分别是666和777,所以根据用户的需求屏蔽掉不希望给别人的权限,这就是权限掩码的作用
经过大佬指点,我对权限掩码有了更多的理解,以及上升到权限管理:
权限管理:权限掩码简化了权限管理的过程。通过使用权限掩码,系统管理员可以为每个文件或目录分配特定的权限集合,而不需要单独为每个用户或用户组设置权限。这样可以减少管理复杂性,提高效率。
show~time
修改umask值设置后,我们发现我我们的目录就是777了
5、file查看文件类型
file一个文件名 就相当于它ll前面翻译之后代表的东西
五、 目录的权限
面试题:如果我们要进入一个目录,需要什么权限??
去掉 r权限不影响进入目录!!!
去掉x权限就不可以cd mkdir!! 但也不代表能进去就可以做事情(读或者写)
w权限:就是你进来了你能不能进行操作
这也就是为什么目录必须是777开始的:因为所有的目录被创建出来,一般都要能够被进入,也就是x权限一定得在,所以如果我们要进入一个目录,就必须有可执行权限!!
注意事项:
1.目录的可执行权限是表示你可否在目录下执行命令;
2.如果目录没有可执行权限,则无法对目录执行任何命令,甚至无法 cd 进入目录, 即使目录仍然有读权限;(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
3.如果目录具有可执行权限,但没有读权限,则用户可以执行命令,可以 cd 进入目录,但由于没有目录的读权限,所以在目录下即使可以执行 ls 命令,但仍然没有权限读出目录下的文档;
六、粘(nian)滞位
公共目录:root创建,张三李四都可以操作,但可能给予他们的权限不同
不同的用户需要在一个公共的目录下进行临时文件的增删查改,这个公共目录通常由 root 用户创建,然后将目录权限修改为777
问题:
但是这里出现了一个问题:由于这个公共目录的权限是777,所以任何一个用户都可以删除此目录下的文件,无论该文件是否属于自己
我去!喵的可以互删!!!!!
为了出来上面这种不科学的情况,Linux 引入了粘滞位的概念
粘滞位是权限的一种特殊情况,它不影响不同用户在公共目录下的读写执行操作,但是它可以禁止不同用户之间互删文件;粘滞位设置的方式很简单,只需要在已有权限基础上加上 t 即可,并且添加时不用指定用户,Linux 会自动识别。
chmod +t 公共目录文件名字
注:当一个目录被设置为 “粘滞位” 以后,该目录下的文件只能由文件的所有者或者 root 删除,其余用户不能删除。