✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨
✨ 个人主页:余辉zmh–优快云博客
✨ 文章所属专栏:Linux篇–优快云博客
文章目录
一.Linux下用户的分类
1.超级用户
- 作用:拥有系统的最高权限,可执行所有操作(包括修改系统文件,安装软件,管理用户等),类似于管理员身份。
- 特点:用户名为
root
,家目录为/root
,权限不受限制,误操作可能会导致系统崩溃或数据丢失。 - 使用场景:系统维护,安装全局软件(这个后面会讲),修改核心配置等。
- 注意:日常操作不建议直接使用
root
。
2.普通用户
- 作用:供日常使用,权限受限,仅能操作自己的文件和授权的资源。
- 特点:用户名为创建用户时的名,家目录为
/home/用户名
,无法修改系统级文件后配置。 - 使用场景:日常办公,开发,运行普通应用程序等。
创建普通用户:useradd [用户名]
设置用户密码:passwd [用户名]
(注意密码要输入两遍)
删除普通用户:userdel [用户名]
3.两个用户之间的切换
Linux中所有的用户都要有密码,无论是root
还是其他,即便是多个普通用户,也都要设置密码,当然通过密码可以实现用户之间的切换。
1.从普通用户到超级用户:
-
su
:从普通用户切换到超级用户,但是还是在普通用户的账号上。 -
su -
:从普通用户登录到超级用户的账号上。
注意:这两个都是要输入root
用户密码。
2.从超级用户到普通用户:
su [普通用户]
:从超级用户直接切换到普通用户上,不需要输入密码。
3.从普通用户到其他的普通用户:
-
su [其他普通用户]
:需要输入对应切换到的普通用户的密码。
4.普通用户暂时对一条命令进行提权:
sudo [command]
:只对command
这一条指令提权,不切换到超级用户,需要输入当前普通用户的密码。
二.Linux下的权限问题
首先需要理解什么叫做权限?
这里举一个例子,比如现在有一个校长叫做张三,张三作为校长可以进入校长办公室,但是小明是一个学生,他想要进行校长办公室但是不能进入因为他的身份是学生,不是校长,而张三又为什么能进入校长办公室,是因为他的身份是校长,而不是张三他这个名字。
所以什么叫做权限?用大白话来说就是一件事情是否允许被你做。
- 权限认证的是身份(权限和”人“有关)。
- 权限也和事物的”属性“有关。
上面这两句话如何理解,需要先了解后面的内容。
1.文件的类型
文件的类型通常用文件的后缀来区分,但是再Linux
系统中文件名后缀没有直接的意义,也就是说不用后缀进行区分(注意:没有意义不代表用不到)。
Linux
系统下文件类型的划分根据ll
指令列出的详细信息中的第一个开头字符决定:
_
:普通文件(可以是文本,可执行程序,库)d
:目录文件b
:块设备文件(磁盘文件,读取时是一整块)c
:字符设备文件(键盘,显示器文件等,输入输出是按字符为单位)p
:管道文件(用来进行通信的)
前面提到Linux
系统中的文件名后缀没有意义,但是不代表用不到,比如:gcc是一款编译器软件,只能编译后缀为c或者cpp的普通文件,虽然Linux
下不用后缀名区分,但是不代表其他Linux
系统上运行的软件不需要后缀,又运行软件来决定需不需要后缀。因此Linux
系统中如何看待后缀:看用户需求即可。
2.权限身份
如何理解权限和”人“有关?
这里的"人"不光是某个特定的用户,还是一种权限身份,在Linux
系统下,文件和目录的权限管理有三种权限身份划分:
- 拥有者(
own
):创建文件后目录的用户,默认拥有最高控制权,这个文件属于谁的,谁就是拥有者。 - 所属组(
group
):文件或者目录所属的用户组,组内成员可共享特定的权限。 - 其他人(
other
):既不是拥有者,也不在所属组中的用户,属于其他人,可以理解为这个文件不属于谁的。
上面的这三种表示的是身份,而上面有讲到用户的分类,可以是超级用户,也可以是普通用户,这两个叫做具体的人,超级用户可以是拥有者也可以是所属组,也可以是其他人;普通用户可以是拥有者也可以是所属组,也可以是其他人。
只有身份+具体的人才能具备权限,如果只有身份,没有具体的人担任,就没有权限可以行使;如果只有具体的人没有身份依然没有权限可以行使。(还是以上面的那个校长为例,张三这个具体的人担任校长这个身份才能进入校长办公室,如果没有这个身份,就不能进行;相反,如果只有校长这个身份而没有具体的人担任,也不能行使校长的权限。)
因此权限和”人“有关,这里的”人“其实就是身份+具体的人。
补充:指令ll
列出的文件详细信息中,数字后面的第一个用户名表示的是拥有者,第二个用户名表示的是所属组。
当一个用户查看当前文件时,用户名和拥有者,所属组对比,如果存在对应的用户名,说明有权查看,如果都没有说明当前用户的权限身份是其他人,不能查看。
3.文件的权限属性
指令ll
列出的文件详细信息中,在第一个字符串中除了开头的字符表示文件的类型,剩下的九个字符表示的是文件对应的权限属性。
r
:可读权限w
:可写权限x
:可执行权限-
:对应的权限位置没有权限
在这九个字符中每三个为一组,分别对应拥有者权限,所属组权限和其他人权限,而每一组中的三个位置又分别是读权限(r/-
),写权限(w/-
),执行权限(x/-
)。
每个位置是什么含义都是确定的。
每个位置只有是或者否,具有指定的权限。
4.权限的修改
在Linux
系统下对权限的修改有两种,一种是对权限属性的修改,另一种是对权限身份的修改。
1.权限属性的修改:
两种方式:
-
chmod [权限身份 +/- 权限属性] [目标文件]
:修改指定权限身份对目标文件的权限属性(其中+
表示增加对应的权限,-
表示删除对应的权限)权限身份可以是:
u
:表示拥有者g
:所属组o
:其他人a
:所有的权限身份
权限属性可以是:
r
:可读w
:可写x
:可执行
举例:
1.将text.c文件编译为可执行文件a.out,执行一遍,输出结果;之后将可执行文件a.out的拥有者的权限属性
x
删除,这时候当前用户作为拥有者就不能再执行该文件2.先在text.c文件中写入,然后读取,之后将拥有者和所属组的权限属性的读写全部删除(中间用逗号隔开),删除后当前拥有者就不能再写入和读取
-
chmod [八进制数] [目标文件]
前面提到每个权限属性位置只有是或者否两种情况,因此可以用二进制0和1表示,然后每三个为一组转换成三个十进制数,三个数就是用八进制表示的对应的权限
以下面为例:
拥有者 所属组 其他人
r w r
r w -
r w -
1 1 1
1 1 0
1 1 0
7
6
6
举例:
将拥有者和所属组的权限属性的读写全部删除(中间用逗号隔开),删除后当前拥有者就不能再写入和读取,之后用八进制的方式修改权限属性为664,修改后,拥有者和所属组就能读写
2.权限身份修改:
-
仅修改拥有者为其他用户:
sudo chown [目标用户] [目标文件]
-
仅修改所属组为其他用户:
sudo chgrp [目标用户] [目标文件]
-
同时修改拥有者和所属组为其他用户:
sudo chown [拥有者目标用户]:[所属组目标用户] [目标文件]
三.补充内容
1.起始权限
以上面图片中的为例,为什么我们创建文件的默认权限是我们所看到的样子?为什么普通文件的权限默认是rw-rw-r--(664)
?为什么目录文件的默认权限是rwxrwxr-x(775)
?
**默认给普通文件的起始权限其实是rw-rw-rw-(666)
;默认给目录文件的起始权限其实是rwxrwxrwx(777)
。至于为什么和我们所看到的默认权限不同,是因为存在权限掩码(umask:0002
)**的问题.
权限掩码umask
将0002转换成二进制就是000 000 010(这里只用到九位即可),凡是在权限掩码中出现的权限都不会在最终的文件权限中出现。
注意:起始权限和权限掩码之间不是经过减法运算得到的最终权限,而是 最终权限=起始权限&(~umask)
举例:
起始权限:
r w - r w - r w -
r w x r w x r w x
1 1 0 1 1 0 1 1 0
1 1 1 1 1 1 1 1 1
umask:
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 0
~umask:
1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 0 1
最终权限:
1 1 0 1 1 0 1 0 0
1 1 1 1 1 1 1 0 1
八进制:
6 6 4
7 7 5
因此可以用umask
来限定对应文件的最终权限,比如只能写不能读和执行
2.目录权限
如果是一个普通文件,所对应的权限比较好理解,其实就是字面意思,读,写,可执行。但是目录文件的读,写,可执行权限有什么意义呢?
目录文件的读,写,可执行权限意义:
-
r
:是否允许我们查看指定目录下的文件内容(在当前目录d1下,可以查看d2目录下的文件内容,但是删除目录d1的拥有者的可读权限后,再次查看就不能查看。)
-
w
:是否允许我们在当前目录下进行创建,更改和删除(先在d1目录下创建一个目录d2,然后删除目录d1拥有者的写入权限,删除后就不能在d1目录下创建新的目录,并且不能删除目录)
-
x
:是否允许用户进入对应的目录(删除d1目录拥有者的可执行权限后,就不能进入到d1目录)
这就是为什么目录文件的起始权限是rwxrwxrwx(777)
。
3.粘滞位
普通用户自己的家目录权限是700,在自己的家目录下创建的文件,别人都看不到!!!
但是有时候,可能存在多个用户之间想要进行文件的数据共享,如果是在某个用户的家目录下创建的该共享文件,其他用户依然看不到,因此要建立一个共享目录,不在任何一个人的加目录下,所以只能在根目录下。
在根目录下创建一个共享目录shared
,创建完后的初始权限为rwxr-xr-x
,拥有者和所属组都为超级用户,当其他用户使用该共享目录时以其他人的身份使用该共享目录,但是其他人的权限属性只有r-x
,所以先更改一下共享目录的权限属性。
更改共享目录的权限属性:
更改完后其他用户就可以以其他人的身份使用共享目录。
在共享目录下用户zmh01创建了一个文件text.c,可以在该文件中写入和读取:
而其他用户zmh02在该共享目录下,同样可以看到用户zmh01创建的文件text.c,但是只能读取并不能写入,因为其他人的权限属性只用可读:
但是又有了新的问题,如果是在共享目录下,其中一个用户创建的文件,如果设置为其他用户的权限属性为r--
,那其他用户就只能读该文件,按理来说不能对该文件进行更改和删除,因为其他用户对该文件的权限属性没有w
,但是其他用户依然可以删除:
这里用户zmh02将用户zmh01创建的文件删除:
为什么没有对应权限依然能删除,这是因为一个文件能否被删除删除,并不由文件本身决定,而是由这个文件所处的目录决定!
用户zmh01的文件是在共享目录下创建的,共享目录的权限属性:
共享目录的其他人的权限属性是rwx
,其中前面提到目录的w
权限意义是创建,删除和更改,因此在共享目录下,用户之间可以互删各自创建的文件。
如果不想让其他人删除自己的文件,这时候可能会觉得将共享目录的w
权限去掉,但是同时也会导致无法在该共享目录下创建文件,这时候就体现不出共享目录的共享特点!
所以真正的解决方法是粘滞位:
粘滞位t
是一种特殊的x权限(在其他人的x权限属性上),给目录设置(一般是共享目录),大家可以在目录上进行各自文件的增删查改,只允许文件拥有者或者root
用户能删除这个文件,其他人一概不允许。
将共享目录的其他人的权限属性上加上t
:
这时候用户zmh01创建的文件用户zmh02就不能再删除:
补充一点:根目录/
下有一个tmp
目录,是唯一一个带粘滞位的目录,可以做为共享目录使用。
以上就是关于Linux下的权限问题的讲解,如果哪里有错的话,可以在评论区指正,也欢迎大家一起讨论学习,如果对你的学习有帮助的话,点点赞关注支持一下吧!!!