Linux 权限管理与文件属性详解
概述
本文主要介绍 Linux 中的文件权限,包括认识什么是权限,认识文件属性和文件权限,学习指令 sudo、chmod、chgrp、chown 等,还有认识目录权限,缺省权限以及粘滞位。
一、权限的概念
1. 什么是权限
在现实生活中,可以通过常识确定:权限是限制人的。人=真实的人 + 身份角色,也就是权限会给不同身份的人不同限制。目标事物的属性也会影响权限。比如你不能在短视频软件上写代码,也不能在写代码软件上看短视频。总之,权限 = 人 + 事物属性。最终影响你能还是不能做一件事。
2. 认识人——用户
**Linux 下有两种用户:超级用户(root)、普通用户。**超级用户:可以在 linux 系统下做任何事情,不受限制。普通用户:在 linux 下做有限的事情。超级用户的命令提示符是'#',普通用户的命令提示符是'$'。
3. su 指令:切换用户
1. root 用户下: su [普通用户] 可以直接切换,无需密码。
2. 普通用户下: 直接使用 su 或者使用 su -,然后输入 root 账户密码即可切换。
su:只切换身份,不改变路径。
su -:重新登录 root 账户,进入 root 家目录,并且显示上次登录时间。
3. 普通用户之间的切换: su [用户名],然后需要输入对方账户密码(所在路径不会切换)。
快捷键:Ctrl + D
快速切换成上一个用户,本质是 exit 指令。
二、sudo 提权
如果我们想以普通用户的身份去执行更高权限的命令,就需要使用 sudo。 sudo 就是提权,获取更高权限,一般放在指令最前面使用。比如我们以普通用户创建一个文件,再使用 sudo 提权创建一个文件,可以明显看到文件属性中用户名称的变化,所以 sudo 提权本质就是以 root 身份去执行命令。但这里有一个疑问?我们使用 sudo 提权后,系统要求我们输入当前用户的密码,而不是 root 账户的密码,这是为什么呢?
配置文件——sudoers
其实如果是新创建的用户,是无法使用 sudo 提权的,如:系统提示无法执行命令,并提到了一个文件——sudoers,其实这就是一个配置文件。该文件只能使用 root 账号才能打开,其实这文件就相当于一个白名单,只有写入了该名单的账号才能执行 sudo 指令。该文件位于 /etc/sudoers,我们使用 root 账户打开。在该文件的 100 行左右,就能查看该白名单了,当我们将 user1 添加进白名单后,user1 就能正常使用 sudo 指令了。(建议学完 vim 的使用后再进行配置修改)。
这样大概能理解为什么使用 sudo 需要输入当前普通用户的密码了吧,因为配置文件时 root 已经默许了,输入当前用户密码只是确实是当前用户在操作。
sudo 的使用场景:
目前我们比较常见的使用场景就是下载软件时使用了。比如 sudo yum install ... / sudo apt install ...。
普通用户使用 sudo 并输入密码后,短时间(大概 15min)以内再次使用 sudo 是不需要输入密码的。
三、文件属性和访问权限
前面说过,权限=角色 + 事物属性,而在 Linux 中,一切皆文件,文件的属性就和权限密切相关。
1. 对文件属性的基本了解
首先通过 ll 就可以快速查看文件的属性。现在我们来认识文件的这些属性:关于后面 3 列:文件大小、修改时间、文件名,这些是我们比较熟悉的属性就不多说了。我们先具体认识一下文件类型有哪些:
- d:目录(文件夹)
- -:普通文件
- c:字符设备文件,例如屏幕等串口设备
- b:块设备文件,例如硬盘、光驱等
- p:管道文件
- l:链接文件,类似 Windows 的快捷方式
2. 认识拥有者和所属组
第一列用户名代表的就是该文件的拥有者,一般谁创建就是谁;第二列用户名就代表该文件的所属组,默认是创建者单独一组,不过可以修改。Linux 中的角色分 3 类:文件拥有者、文件所属组、other。other 不需要存储,只要是拥有者或者所属组就一定不是 other,所以 other 不显示。注意角色是一层身份,它需要依附于具体的人,人 = 真实的人 + 身份角色。所属组存在的原因,是多人使用同一台服务器时,便于分组管理权限,比如某些文件哪些人可看那些人不可看就可以通过所属组实现。接下来我们来看具体的访问权限:


