目录
- 一、核心基础
-
- [1. Linux用户分类](#1. Linux用户分类)
- [2. 权限核心公式](#2. 权限核心公式)
- [3. 用户切换命令](#3. 用户切换命令)
- 二、文件/目录权限详解
-
- [1. r/w/x 权限的本质区别](#1. r/w/x 权限的本质区别)
- [2. 权限的表示方法](#2. 权限的表示方法)
-
- [2.1 字符版](#2.1 字符版)
- [2.2 数字版](#2.2 数字版)
- 3.实操命令:权限怎么改?
-
- [1. chmod:修改权限(最常用)](#1. chmod:修改权限(最常用))
- [2. chown:修改拥有者](#2. chown:修改拥有者)
- [3. chgrp:修改所属组](#3. chgrp:修改所属组)
- [4. 权限掩码umask](#4. 权限掩码umask)
- [5. Linux中如何创建多用户共享文件](#5. Linux中如何创建多用户共享文件)
一、核心基础
1. Linux用户分类
Linux中分为两类用户:超级用户 root 和普通用户,命令提示符区别(root # / 普通用户 $)
2. 权限核心公式
权限 = 人(u/g/o) + 事(事务属性/操作权限)
访问者有三类:拥有者(u -- user)、所属组(g -- group)、其他(o -- other)
操作:读(r)、写(w) 、x -- 对于普通文件而言是执行权限,对于目录文件而言是进入权限
3. 用户切换命令
su [用户名]
-
普通用户切换到root用户 -- su root (其中root可省略)
[zhangsan@localhost ~] whoami zhangsan [zhangsan@localhost ~] su
Password: 这里的密码要输入root的密码
[root@localhost zhangsan]# whoami
root -
从root切换到普通用户 -- 无需输入普通用户的密码,直接切换,root是不受约束的
[root@localhost zhangsan]# whoami
root
[root@localhost zhangsan]# su zhangsan
[zhangsan@localhost ~]$ whoami
zhangsan
二、文件/目录权限详解
1. r/w/x 权限的本质区别
- 对于文件的含义:读内容/改内容/运行程序
- 对于目录的含义:查看指定目录内的文件信息/在目录内新建删除或修改文件/进入目录
思考:为什么普通用户能删除别人的文件甚至是root的,这合理吗?
合理的,删除文件的权限与该文件本身没有关系,而是和他所处的目录文件有关,先进入(x)、再删除(w)
2. 权限的表示方法
2.1 字符版
用 ls -l 查看文件权限,格式是 - rwx r-x r- -,拆成 3 段对应 u/g/o:
示例:- rwx r-x ---
文件类型 拥有者(u) 所属组(g) 其他人(o)
- rwx r-x ---

红色框的位置是文件类型,Linux通过这里来区分文件类型,而不是后缀,常见的有 - 表示普通文件,d表示目录文件,后面33为一组分别表示拥有者、所属组、其他
2.2 数字版
每个人都有三种权限位 - - -分别对应rwx,当有字符显示出现时就表示拥有权限,可用二进制1表示,- 表示无此权限用二进制0表示,则使用二进制位表示- - -为 000,rwx 为111
| 组合 | 字符权限 | 数字权限 | 含义 |
|---|---|---|---|
| r - - | 4 | 4 | 只读 |
| r w - | 4+2 | 6 | 读写 |
| r - x | 4+1 | 5 | 读+执行 |
| r w x | 4+2+1 | 7 | 读写执行 |
| - - - | 0 | 0 | 无权限 |
示例:rwxr-xr-- → 754;rw-r--r-- → 644 八进制表示
3.实操命令:权限怎么改?
1. chmod:修改权限(最常用)
两种写法:字符修改+数字修改
- 字符修改
chmod [u/g/o/a] [+/-/=] [r/w/x] 文件名
示例:
chmod u+x test.txt # 给拥有者加执行权限
chmod g-w file.txt # 给所属组减写权限
chmod a=rwx dir # 给所有人设置读写执行权限 a-all所有人
chmod o=rw file # 给其他人只设置读写权限

- 数字修改 -- 快速批量化设置
chmod 数字权限 文件名
示例:
chmod 755 file1.txt # 拥有者rwx,所属组r-x,其他人r-x
chmod 644 file2.txt # 拥有者rw-,所属组r--,其他人r--
chmod 777 dir # 所有人读写执行(慎用!)
2. chown:修改拥有者
chown 用户名 文件名
chown name1:name2 filename 修改文件的拥有者和所属组
chown zhangsan file.txt # 把file.txt拥有者改成zhangsan
chown zhangsan:users dir # 把dir拥有者改成zhangsan,所属组改成users
tips:需要注意的是普通用户不能直接改拥有者,咱也不能什么垃圾都给别人,是不是,但是可以使用指令提权sudo或者切换root直接强制给

3. chgrp:修改所属组
chgrp 组名 文件名
chgrp zhangsan dir # 把文件dir的所属组改成zhangsan组
4. 权限掩码umask


5. Linux中如何创建多用户共享文件
Linux上最简单、最临时的一种 "共享" 方式 --- 实现本机多用户之间的共享文件

/tmp 为什么能用来做 "共享" ?
- /tmp是全局临时目录,默认权限
rwxrwxrwx - 所有用户都能读、写、创建文件/文件夹
- 所以你在/tmp目录下创建文件,本机其他用户可直接访问
当我在整理过程中发现了一个问题:不是说我进不了其他用户的家目录吗?为什么我现在进来了?

为什么会出现上述这种情况?
核心原因是
su命令默认不切换工作目录,导致出现了 "能进入目录,但无实际权限" 的状态
Linux的目录权限校验逻辑是:
- 进入目录(cd操作):需要目的的执行权限(x)
- 列出目录的内容(ls/ll操作):需要目录的读权限(r)
上述操作的关键就是su继承了当前目录,跳过了cd的校验,但是在执行ll时是切实自己操作的,触发了权限校验( r )
除了上述我们所了解到的su直接切换到root身份执行 "高级指令" 以外,还要一个指令提权的操作sudo
sudo [指令] 对该指令进行提权,让该指令形同root执行
[zhangsan@localhost ~]$ sudo mkdir dir1
[sudo] zhangsan 的密码:
zhangsan 不在 sudoers 文件中。此事将被报告。
我们发现zhangsan无法执行sudo操作,zhangsan 为什么不能执行?
看到执行的报错原因 -- zhangsan不在sudoers文件中,所以没有sudo的权限
sudo是授权普通用户临时用root权限的命令- 只有在/etc/sudoers名单里面的用户,才能用
sudo,否则任何普通用户都能使用指令提权的话,那权限约束岂不是形同虚设
等后续我们将了vim的使用之后,我们再补充如何在/etc/sudoers文件中添加用户,使其拥有sudo提权的权限,sudo提权还有一个好处就是可以追溯该指令是谁执行的