【Linux基础篇】:揭秘Linux权限问题--如何设置与管理,让系统更安全

✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨
✨ 个人主页:余辉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下的权限问题的讲解,如果哪里有错的话,可以在评论区指正,也欢迎大家一起讨论学习,如果对你的学习有帮助的话,点点赞关注支持一下吧!!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值