Linux 权限

发布于:2025-08-07 ⋅ 阅读:(14) ⋅ 点赞:(0)

目录

什么是权限?

为什么要有权限?

理解Linux中的权限:权限 = 人 + 文件属性

用户

角色

文件权限属性

三个常考问题

权限相关命令


什么是权限?

关于某人做某事,能or不能的问题。这里讨论的是用户访问资源的能力。

为什么要有权限?

Linux作为多用户的操作系统,分为root和普通用户,权限有助于用户管理,从而利于维护和稳定系统的秩序、保证系统和谐使用、保护资源。

理解Linux中的权限:权限 = 人 + 文件属性

用户

用户就是使用操作系统的人,具体到每一个账号。用户分为root和普通用户,root就是管理员,而普通用户就是除管理员外的账号。

root作为管理员,是操作系统中具有特权的人--不受权限的制约。但对于普通用户,权限就是用来限制普通用户的。

细节:【1】用户访问文件时,确定自己相对文件的角色,只会验证一次。

角色

当我们了解了用户后,还要认识到:每个人都在扮演角色,不同的角色有不同的权限大小。

eg.甲作为校长能做校长才能做的事,是因为甲这个人,还是因为甲是校长?显然。

由上还能看出:角色由用户扮演,权限依附于角色。所以用户想要拥有某权限,就要先扮演某角色。

在Linux中的角色分为:拥有者、所有组、其他。他们对于某个文件所具备的权限只有三个:r(可读)、w(可写)、x(可执行)。

细节:【2】文件拥有者具有修改文件权限的能力。

讨论:为什么要有所属组group这个角色?-->大厂有“赛马”机制,几个团队竞争一个项目。如果文件的角色只区分拥有者和other,只有文件拥有者可以动文件,而自己的队友以及竞争对手都是other,这怎么团队合作?

文件权限属性

文件属性中包含三个角色的权限,三三一组作为文件权限属性。

第一个表示的是文件类型,没写默认是普通文件、动静态库、可执行、文本等文件,d是目录,p是管道文件,l是链接文件,c是字符文件、b是块设备文件。

正确表达一下文件的权限信息:拥有者zkz对该普通文件zkz.txt具有可读可写的权限;以此类推。

文件权限属性还有一种表达方式:文件权限值。

有权限代表1,没有则为0,三个数一组构成一个八进制数表示某角色的权限,三个八进制就能表示清楚一个文件的权限信息。

例子:zkz.txt的权限值为664,test目录的权限值为775。6 -> rw-;7 -> rwx。 

细节:【3】文件可执行权限

文件权限中的可执行权限表示了可不可以的问题,表明一个文件是可以or不可以被执行的,但实际上,普通文本文件怎么能执行?所以文件可执行权限决定可不可以执行的问题,但文件本身是否是可执行文件决定其能不能执行。

所以一个文件可执行,需满足两个条件:自身是可执行文件 + 有可执行权限。

三个常考问题

【1】进入目录跟什么权限有关?

首先去掉可读权限r

再去掉可写权限w

 

经过控制变量,显然进入目录与其可执行权限相关,但我们也顺便见识了目录权限的含义。

目录可读权限:用户是否能够查看目录下的文件属性。

目录可写权限:用户是否能够新增文件、删除文件、修改文件名:即修改文件属性。新增是写入文件属性,删除是删除文件属性,文件名也是文件属性。

目录可执行权限:用户能否进入目录。 

(先这样粗浅理解可读可写权限)

注意:目录rw权限不会限制用户对已有文件的内容进行操作。

【2】新创建文件的默认权限属性为什么是我们所见的那样?文件664or目录775

新建文件的起始权限值为666,新建目录的起始权限值为777。

Linux系统为了进行细粒度控制权限,设置了权限掩码(用umask查看和修改)。

最终权限值 = 起始权限 & (~umask权限掩码)

【3】对于我而言没有权限的文件,我能能删吗?

能删,原因在第一个问题已经解释了:删文件跟目录的权限有关,与文件本身权限无关。

来看这样一个场景:文件共享

 因为普通用户不能进入其他用户的家目录,涉及隐私安全问题,所以要共享的文件不能放在某个普通用户的家目录里。

为了能够实现共享,我们可以在系统目录中创建一个专门用来共享文件的目录,这里大家都能进来。假如共享文件的是甲乙二人,有一天丙到了这个共享文件夹,他是可以恶意删除甲乙的共享文件的!!

这怎么行?为了解决这种场景,Linux搞出了粘滞位的概念。

root将test目录拥有者和所属组改为root,zkz成了别人。由于root用chmod +t test设置了粘滞位,所以root创建的haha.txt现在不能被zkz恶意删除了。

粘滞位使得第三人无法在有可写权限的情况下恶意删除被人的文件,为共享文件提供了安全保证。 只有root、目录所有者、文件所有者能删。

权限相关命令

【1】root可通过adduser、userdel、passwd三条命令对普通用户的账号进行管理(新建、删除、密码设置)。

【2】su命令可以进行用户的切换。

特别的,root可以切换成任何普通用户而无需密码。但普通用户的账号切换是需要密码的,无论是切换成普通用户还是root。

这符合我们认知

【3】sudo可以让普通用户以root的身份执行命令。--提权

注意:只有root把该普通用户放入了sudoers白名单文件中才行,且需要输入原普通账号的密码进行确认。

这反常识,但细想合理:n个普通用户同时要提权,root只有一个人,没办法分身,做不到这件事。要解决这个问题,只能让root自己决定要信任的用户,将其放入白名单sudoers中,允许其进行提权,这是在通过放权解决问题。(用户输入自己的密码起到的是一个提醒确认的作用。)

【4】chown、chgrp用于修改用户的文件角色。但注意,给别人文件需要经过别人的同意,否则甩锅可太容易了。

【5】chmod可以用来修改权限属性。

【6】umask可以查看和设置权限掩码。


网站公告

今日签到

点亮在社区的每一天
去签到