一、linux下的用户分类
在linux下,用户分为两种,一种是超级用户,一种是普通用户。
**超级用户:**可以再linux系统下做任何事情,不受权限限制(制定规则,但不需要遵守规则)
**普通用户:**在linux下做有限的事情。(必须遵守相应的规则)
(超级用户的命令提示符是"#",普通用户的命令提示符是"$")
用户的切换:
su user:root →普通用户,不需要密码su root(简写su):普通用户→root,输入 root 的密码
注意事项:
1.root的普通用户的密码尽量不要相同
2.普通用户不能直接执行 yum 安装这类 root 专属命令。 sudo 命令:对单条命令临时获得 root 权限。
3.新建出来普通用户默认不能直接 sudo ! 需要把用户加入 sudo 信任白名单,修改 /etc/sudoers,系统才信任该用户,否则 sudo 报错。
二、linux权限的概念
我们在访问文件时,有三种身份:
2.1三种身份
u:拥有者 g:所属组用户 o:其他人
我们根据不同的场景来进行一下说明,比如说有一个组,张三是组员,王五是组长,李四是其他组的人,王五想要检查张三的工作,但是如果说修改others把权限放开,那么李四也能访问了,所以不行,我们只能把王五加入这个文件的属组,通过g组权限开放读取!!!达到的效果就是组内成员王五可以访问,但是李四就会被拦住了!!

2.2文件类型和访问权限


文件的各种类型汇总:

块设备文件所在路径:/dev/vda中,是按块读写的!!

2.3关于Linux中的后缀
Linux 内核本身不识别文件后缀;后缀是给人、给应用程序看的,而linux内核靠文件本身的内容来判断文件的类型,比如说:

虽然说内核不看后缀,但是软件,工具是看后缀的,例如gcc编译器,当文件为.c后缀时,gcc才能够把它当做c源码编译,但是当把.c后缀改为.txt后缀,gcc不认识.txt后缀,不知道这是c源码,直接报错,唯一的方法就是:gcc -x c t.txt,强制告诉gcc这是c源码!!
所以linux是否需要后缀,看的是用户的需求!具体:
- ✅对人:建议加后缀,方便我们识别文件!
.c代表 C 源码,.sh代表 shell 脚本,.txt文本。 - ❌对内核:后缀不生效,改后缀不会改变文件真实类型。
2.4文件的基本权限
文件的基本权限分为三种:r(read:可读) w(write:可写) x(execute:执行)

一些重点:
- 目录 w 权限不能单独生效,必须配合 x 权限。只有 w 没有 x,不能删除 / 新建文件。
-代表该位置没有权限,例如r--:只有读,没有写、执行。
所以每个位置都有只有是或者否,对应其指定的文件!!因此我们可以用1表示是,0表示否,每组都可以用一个八进制数字来表示。
2.5文件权限的表示方法
1、字符表示法

2、八进制表示法

我们在这里提供一些常用权限速记:

2.6文件访问权限的相关设置方法
第一个:chmod
作用:修改访问权限
需要注意的是只有文件所有者或者root才能修改权限,格式是**chmod [参数] 权限 文件名,常用的参数就是-R,**递归修改目录及其内部所有文件权限。
符号模式更改:
+:增加权限 -:取消权限 =:直接设置权限(将原有的覆盖掉)
权限字符就是rwx
示例:

八进制数字模式(直接设置权限)

chmod -R慎用,递归会把目录下所有子文件全部改权限,普通文件不该带上 x 执行权限。
第二个:chown
作用:修改文件拥有者
格式:chown 参数 用户名 文件名

注意事项:
我们要把文件给别人时,有两种方法:要么是别人同意,要么是sudo强制提权,而当文件的拥有者改变后,我们只能执行所属组的权限,而不能执行拥有者的权限!且无法再修改权限!!
第三个:chgrp
作用:只修改所属组
格式:chgrp 参数 用户组名 文件名

如果没有权限设计,那么人人都是root用户,就彻底乱套了
2.7文件掩码
概念:新建文件 / 目录的权限,不是随便来的,由 起始权限 & umask 掩码 共同决定。
起始最大权限:
文件起始的权限其实是666,目录起始的权限是777,因为文件起始是不允许被执行的,所以都变成了666,而目录起始是允许访问的,所以是777。
umask作用就是查看或修改文件掩码(凡是在umask中出现的文件,不会在最终的文件权限中出现!)
格式:umask 权限值(不带权限值就是查看,带的话就是设置)
看上去好像是默认权限减掉起始权限,但其实并不是这样的,因为我们要考虑这个权限本身就不存在的情况!! 所以无论原来的权限是0还是1,当umask为1时,都要变成0(将某位设置为0,我们要想到&)所以有1则为0而umask为0时,就不能影响原来的权限(如果用&,要想不改变,就得希望该位置是0,其他位置是1,所以可以想到~)
最终权限=起始权限&(~umask):底层是按位运算
超级用户默认掩码值为0022,普通用户默认为0002。
所以经过计算,我们能够得出我们看到的最终权限:
普通文件:664
目录文件:775

运算示例:

2.8粘滞位
我们需要明白一个道理,一个文件能不能被删除,不看文件本身权限,而是看它所在目录的权限!!
为什么家目录不能拿来共享?
用户家目录/home/cyx权限一般是drwx------ (700) ,导致其他用户没有任何权限,别人进不去,看不到里面的文件,不能做共享目录。所以共享目录一般放在根下!
共享目录场景:目录给所有人开放 w 权限,所有人都能创建、修改自己的文件;但所有人也能删除别人的文件,这是 bug,而粘滞位t就是来解决这种情况的!
符号格式:chmod +t 目录名
八进制格式:chmod 1777 /myshare_dir
作用(仅对目录生效,对文件无效):目录内,所有人都可以新建文件和修改文件,只有文件自己的拥有者和root用户才能够删除文件,其他用户就算有w权限,也不能够删除文件。


取消粘滞位的操作:chmod -t /myshare_dir
2.9注意点
每个用户只会匹配一组权限 (u /g/o,优先匹配靠前),如果当前用户是文件属主 (u) ,就只用u 位权限 ;哪怕你同时属于这个文件的属组 (g),g 的权限完全不生效。
例子:
假设我是拥有者,我也是所属组,而拥有者的权限是---,所属者的权限是rwx,但实际上我只能以拥有者的身份去执行我的权限!
结尾彩蛋:file命令
功能:分辨文件真实类型,不看后缀。
file 文件名
file -c 文件名 # 显示执行过程,调试用
file -z 压缩包 # 尝试解析压缩包内部文件
区别:
ll看的是文件类型标记 (‑ d l);file看文件内部真正格式(文本、可执行、压缩、脚本等)。