本文主要介绍linux系统中的权限管理和用户切换机制。权限是限制用户操作的关键,理解和正确使用权限有助于维护系统安全。

前言
本节主要讲解Linux的权限管理。权限是控制用户行为的机制,例如,你可以在力扣上刷题,但不能听音乐,这是由平台的权限设置决定的。如果你是VIP用户,你可以在QQ音乐上听任何音乐,而普通用户只能听非VIP的音乐。
概述
Linux系统中有两种类型的用户:
- 超级用户(root):可以在Linux系统中执行任何操作,不受限制。
- 普通用户:在Linux系统中只能执行有限的操作。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
用户切换
用户之间可以通过以下命令进行切换:
- 命令:
su [用户名] - 功能:切换到指定用户。
从root用户切换到普通用户user,使用su user。从普通用户user切换到root用户,使用su或su root,此时需要输入root用户的密码。
示例:超级用户切换到普通用户
从root用户切换到普通用户gwj:
[root@iZf8zhv7mi2thjdxsptkb8Z ~]# su gwj [gwj@iZf8zhv7mi2thjdxsptkb8Z root]$ whoami gwj [gwj@iZf8zhv7mi2thjdxsptkb8Z root]$

示例:普通用户切换到超级用户
从普通用户gwj切换到root用户,直接使用su,并输入root用户的密码:
[gwj@iZf8zhv7mi2thjdxsptkb8Z root]$ su Password: [root@iZf8zhv7mi2thjdxsptkb8Z ~]# whoami root [root@iZf8zhv7mi2thjdxsptkb8Z ~]#

另一种切换方式
除了su命令,还可以使用su -命令。两者的区别在于,前者仅切换用户身份,不改变当前路径,而后者会切换到root用户的家目录。
使用sudo提升权限
普通用户可以通过sudo + 命令来临时提升权限,输入的是普通用户的密码:
[gwj@iZf8zhv7mi2thjdxsptkb8Z root]$ whoami gwj [gwj@iZf8zhv7mi2thjdxsptkb8Z root]$ sudo whoami [sudo] password for gwj: gwj is not in the sudoers file. This incident will be reported. [gwj@iZf8zhv7mi2thjdxsptkb8Z root]$

初次使用sudo时会有如下提示:

Linux权限的理解
权限是角色与事物属性的结合。例如,某人有QQ音乐的会员身份,可以听会员专享的音乐,这是因为他有会员身份,而不是因为他叫什么名字。
因此,权限 = 角色 + 事物的属性。
Linux权限管理
文件访问者分为:
- 文件和目录的所有者(u - User)
- 文件和目录的所有者所在组的用户(g - Group)
- 其他用户(o - Others)
文件属性可以通过ls -l命令查看,属性从第二个字母开始,三个为一组。

权限字符表示:
-
r:可读 -
w:可写 -
x:可执行 -
-:不具备该权限

权限值:
- 读(r/4):对文件可读取内容,对目录可浏览信息。
- 写(w/2):对文件可修改内容,对目录可删除或移动文件。
- 执行(x/1):对文件可执行,对目录可进入。
文件权限值表示方法:
- 字符表示法:

- 8进制数值表示法:

文件类型:
-
d:文件夹 -
-:普通文件 -
l:软链接 -
b:块设备文件 -
p:管道文件 -
c:字符设备文件 -
s:套接口文件
在Linux中讨论权限时,首先要确定当前用户是谁,然后查看文件的拥有者和所属组,判断当前用户的身份,最后查看该身份下的权限。权限与身份和文件属性相关。
权限修改
使用chmod命令可以设置文件的访问权限:
- 格式:
chmod [参数] 权限 文件名 - 常用选项:
R- 递归修改目录文件的权限
只有文件的拥有者和root用户可以改变文件的权限。
示例:对text.txt文件进行权限修改
初始权限:
-rw-rw-r-- 1 gwj gwj 0 Dec 10 15:02 text.txt

给拥有者添加执行权限:
chmod u+x text.txt

从所属组删除写权限:
chmod g-w text.txt

从拥有者删除执行权限,给所属组添加写权限,给其他人添加写和执行权限:
chmod u-x,g+w,o+w,o+x text.txt

给所有用户添加读、写、执行权限:
chmod a+rwx text.txt

使用8进制数值修改权限:
chmod 777 text.txt


chown命令
用于修改文件的拥有者:
- 格式:
chown [参数] 用户名 文件名
示例:
chown nanqiao text.txt

同时修改文件的拥有者和所属组:
chown gwj:nanqiao text.txt

chgrp命令
用于修改文件或目录的所属组:
- 格式:
chgrp [参数] 用户组名 文件名 - 常用选项:
-R- 递归修改文件或目录的所属组
示例:
chgrp gwj text.txt

umask命令
用于查看或修改文件掩码:
- 新建文件的默认权限为
0666 - 新建目录的默认权限为
0777
实际创建的文件和目录权限会受到umask的影响:
- 实际权限 = 起始权限 & (~umask)
格式:
umask 权限值
超级用户默认掩码值为0022,普通用户默认为0002。
普通用户创建的文件默认权限为664,目录为775。

通过umask查看掩码:

掩码会影响初始权限,凡是在权限掩码中出现的权限,不会出现在最终文件权限中:
666 -> 110 110 110 002 -> 000 000 010 ~umask: 111 111 101 666 -> 110 110 110 111 111 101 按位与& 110 110 100 -> 664
file命令
用于辨识文件类型:
- 语法:
file [选项] 文件或目录... - 常用选项:
-
-c:详细显示指令执行过程 -
-z:尝试解读压缩文件的内容
-
使用sudo分配权限
- 修改
/etc/sudoers文件分配权限:
chmod 740 /etc/sudoers vi /etc/sudoers
格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令
- 使用
sudo调用授权的命令:
sudo –u 用户名 命令
目录权限
- 可执行权限:没有可执行权限无法进入目录。
- 可读权限:没有可读权限无法查看目录中的文件内容。
- 可写权限:没有可写权限无法在目录中创建或删除文件。
注意:只要用户具有目录的写权限,就可以删除目录中的文件,无论是否有该文件的写权限。因此引入了粘滞位的概念。
粘滞位
当一个目录被设置为“粘滞位”(用chmod +t),则该目录下的文件只能由:
- 超级管理员删除
- 该目录的所有者删除
- 该文件的所有者删除










