1. 用户类型
Linux 下有两种用户:超级用户(root)、普通用户。
超级用户:可以在 Linux 系统下做任何事情,不受限制。 普通用户:在 Linux 下做有限的事情。
超级用户的命令提示符是 #,普通用户的命令提示符是 $。
使用 su 命令切换用户。
- 从普通用户切换到 root 用户使用
su root(root 可以省略)。注意此时虽然用户切换了但家目录还是原用户的家目录,相当于在原家目录下换了一个用户。 - 从普通用户切换到 root 可以使用
su -指令,相当于重新登录,家目录发生变化。 - 可以使用
exit或Ctrl+d来返回原用户。 - 也可使用
su user直接返回普通用户,家目录不变。
总结:普通用户切换到其他用户 (包括 root) 需要输入目标用户的密码,而 root 用户切换到其它用户直接切换不需要密码。
1.2 Sudo 提权
当我们执行某条指令时需要提升权限怎么办?用指令 sudo command。
为什么提权反而是要求输入自己账户的密码?因为 root 超级用户并非人人可用,我们需要在 sudo 的配置文件 sudoers 中输入自己信息获得认可,相当于白名单。
新建的用户无法执行 sudo,除非将普通用户添加到系统信任的白名单里面。
查看配置文件权限,发现只有读权限,所以需要 root 用户来修改。打开配置文件,找到白名单条目,复制并粘贴加入自己的用户名。保存修改时使用 wq! 强制保存退出。
加入白名单后,账号就可以用 sudo 提权以 root 的身份来执行指令。
1.3 权限定义
权限就是一件事是否允许被你做。
-
权限认证的是身份(和人有关)。 人(具体用户)包括:root,普通用户。 权限身份 包括:拥有者,所属组,其他人。为什么需要所属组?因为需要组内协同的同时,不给其他人权限。 人和权限身份的关系不是割裂冲突的,而是需要相结合的,权限身份需要一定的人来承担。
-
权限也和事物的属性有关。 从文件的属性出发包括:
- r(read):读取权限,允许用户读取文件内容或列出目录中的文件。
- w(write):写入权限,允许用户修改文件内容或向目录中添加/删除文件。
- x(execute):执行权限,允许执行文件(对于目录,表示可以进入该目录)。
-:对应的权限位置,没有权限。
2. 文件类型与访问权限
文件类型:
-:普通文件:文本,可执行程序,库基本属于普通文件。d:目录文件。b:块设备文件:磁盘文件。c:字符设备文件:键盘,显示器文件。p:管道文件:用来进行通信的。
注意:Linux 系统中文件名后缀没有直接意义(不代表不适用后缀),在 Linux 系统上运行的其他软件可能需要后缀如编译器 gcc。
通过 ls -l 查看文件详细信息,可得文件对应部分的属性。
- 可以发现权限身份信息中没有其他人的信息,因为用户在访问文件前需要登录,访问时比对权限身份若既不是拥有者也不是所属组,那么就是其他人。其他人的信息太多所以没必要列举,另外 root 不受权限约束。
- 绿色事物属性的权限部分,人的权限身份和事物的属性结合起来了,每个位置是什么含义都是确定的,第一个为读,第二个为写,第三个为可执行,每个位置只有是或否具有该权限。
3. 权限设置与修改
3.1 chmod 命令
使用 chmod 指令,全称是 change mode,可对文件和目录的权限进行修改。
格式:chmod [参数] 权限 文件名
-
-R:递归修改目录文件的权限。 说明:只有文件的拥有者和 root 才可以改变文件的权限。 -
u(user):文件或目录的所有者。 -
g(group):文件或目录所属组的成员。 -
o(others):其他用户。 -
a(all):所有用户。
可用符号来修改:
+:添加权限。-:移除权限。=:设置权限(覆盖现有权限)。
注意:只有文件拥有者和 root 才可以改变文件的权限。
将上述的参数和权限名组合起来使用指令。
对单个权限身份的属性进行添加。
对单个权限身份的属性进行移除。
对多个权限身份的属性进行添加。
三个权限身份间要用 , 相隔,也等价于 a+rwx。
同理只要把 + 变成 - 可以实现单个或多个权限身份的属性移除,同时属性 ± 的数量也可以自己控制。
3.1.2 权限表示法
由于每一个属性只存在具有或没有权限的两种状态,所以可以用二进制来表示每一属性的状态,有三个属性,三位刚好可以用 8 进制来表示三个属性各种状态的组合。
例如全部移除。 全部添加。
3.2 chown 命令
功能:修改文件的拥有者。
格式:chown [参数] 用户名 文件名
作为普通用户没权限直接修改文件。 需要 root 权限,或普通用户使用 sudo 提升权限执行该指令。
注意:修改文件拥有者后,自己的身份权限变成所属组。
3.3 chgrp 命令
功能:修改文件或目录的所属组。
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组。
同理可得相同操作,可在更改拥有者后更改所属组,完成后自己的身份权限变成其他人。普通用户没权限更改,需要 sudo 提权或使用 root 超级用户。
可以使用 chown 拥有者:所属组 文件或目录,一次性更改人的权限信息。 chgrp 不能进行该操作。
3.4 权限冲突处理
进行身份认证的时候,只能选择一个角色进行认证。
文件拥有者和所属组都是 ywb,所以从前往后就只认证 ywb 为拥有者,不再往后认证。
3.5 默认权限与 Umask
知识储备:默认普通文件的起始权限是 666,二进制为 110 110 110; 目录是 777,二进制为 111 111 111。
我们创建时所看到的: 普通文件是 664,二进制为 110 110 100。 目录文件是 775,二进制为 111 111 101。 最终权限与起始权限不同中间肯定发生了某种转化,了解权限掩码。
3.5.1 Umask 掩码
凡是在 umask 中出现的权限,不会在最终的文件权限中出现。
普通用户默认的 umask 为 0002,第一位代表八进制数不计入计算。 超级用户默认掩码值为 0022。
最终权限 = 起始权限 & (~umask),还可以通过 umask 0xxx 来设置掩码。
权限掩码的应用:重要!!! 当我们想或不想让创建的文件或目录具有某种权限,那么就更改对应的权限掩码,应为最终权限需要经过与运算所以会遵循上述所说在 umask 出现过的权限不会在最终文件中出现。
3.5.2 File 命令
功能说明:辨识文件类型。
语法:file [选项] 文件或目录…
常用选项:
-c详细显示指令执行过程,便于排错或分析程序执行的情形。-z尝试去解读压缩文件的内容。
4. 目录权限
r: 读权限并不会影响我们进入目录,但限制我们查看目录下文件列表。w: 是否允许我们在当前目录下进行创建、更改、删除。x: 如果目录没有可执行权限,则无法 cd 到目录中。
普通用户自己的家目录权限是 700,在各自家目录创建的文件,别人都看不见。 但是有时多个用户间需要文件数据的共享,所以这就要求所建立的共享文件,不能在任何一个人的家目录下可以在根目录下创建共享目录,作为共享用户的我们身份权限都为其他人,只需通过根目录进行其他人权限的添加即可。 这里会有一个问题? 通过测试,发现属于自己的文件在共享文件中可以被其他人删除,这说明一个文件能否被删除,并不由文件本身决定,而是由这个文件所处的目录决定。 可以通过修改目录其他用户的写权限来禁止删除他人文件操作,但同时也禁止了在该目录下创建文件,失去了共享目录的意义。 需要我们引入一个新的权限位—粘滞位。
在根目录下创建共享目录需要 root 用户,其他用户没有读写权限。
注意:
目录的可执行权限是表示你可否在目录下执行命令。如果目录没有 -x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目,即使目录仍然有 -r 读权限(易错,认为有读权限就可以进入目录读取目录下的文件)。
4.1 粘滞位
t 就是粘滞位,添加之后原来的 x 变为 t,t 是一种特殊的可执行权限,允许用户新建文件,但禁止互删。
粘滞位意义: 一般给共享目录设置,大家可以在共享目录中进行各自文件的增删查改,只允许文件拥有者或 root 能删这个文件,其他人不允许,t 是一种特殊的 x 权限。
我们不一定需要自己在根目录下创建共享目录,系统中自带了一个共享目录 tmp,唯一一个有粘滞位的目录并且所有权限打开,可以将临时文件存入其中。


