Linux(二)权限问题

权限的概念

在计算机系统中,权限(Permission)是指系统对某个用户或用户组能够执行哪些操作的约束和规定。简单来说,权限决定了"谁能做什么"。

在Linux系统中,权限是保障系统安全和数据完整性的核心机制。通过权限控制,系统可以限制不同用户对文件和目录的访问范围,防止普通用户误操作或越权访问敏感数据。

权限通常由三个要素组成:角色 (谁)、目标属性 (对什么)和操作(能做什么)。例如,某个用户能否读取某个文件、能否修改某个目录下的内容,都是由权限规则来决定的。

在接下来的内容中,我们将详细讲解Linux下的用户分类以及文件和目录的权限管理方式。

Linux中的用户

Linux下有两种用户:超级用户(root)、普通用户。

• 超级用户:可以在Linux系统下做任何事情,不受限制

• 普通用户:在Linux下做有限的事情。

• 超级用户的命令提示符是"#",普通用户的命令提示符是"$"。

命令:su 用户名

功能:切换用户。

例如,要从root用户切换到普通用户user,则使用su user。要从普通用户user切换到root用户则使用su root(root可以省略),此时系统会提示输入root用户的密码。

补充:sudo 临时提权 。除了使用 su 切换用户外,Linux 还提供了 sudo 命令,允许普通用户以 root 身份临时执行某条命令,而无需切换到 root 用户。使用 sudo 时,系统会要求输入当前用户自己的密码(而非 root 密码),验证通过后即可执行该命令。例如,普通用户执行 sudo chmod 777 /home/abc.txt,就可以临时以 root 权限修改文件的访问权限。sudo 的优点是更安全、更灵活,因为系统会记录每次提权操作,且只对单条命令生效,不会长期停留在 root 身份下。

Linux权限管理

权限==角色+目标属性

1. ⽂件访问者的分类(⼈)

• 文件和文件目录的拥有者:u---User(中国平民法律问题)

• 文件和文件目录的所有者所在的组的用户:g---Group(不多说)

• 其它用户:o---Others(外国人)

当我们输入指令ll之后,就会显示出文件的详细的信息,此时我们注意这个文件有两个root用户,还有一个others用户,只不过others是隐藏状态,这里的两个root就是拥有者和所属组,以及隐藏的others其他用户,这三个都是权限组成之一,它们都是角色。

什么是所属组?

所属组(Group)是指文件或目录所有者所在的用户组。在Linux中,每个用户都属于至少一个用户组,组内可以包含多个用户。当创建一个文件时,该文件默认归属于创建者的用户组,组内的其他成员就属于这个文件的所属组。所属组的作用是:让同一组内的多个用户可以共享访问某些文件或目录,从而方便团队协作。例如,一个项目组的所有成员都在同一个组中,那么该组对项目文件就拥有相同的权限,无需逐个为用户单独授权。

2. ⽂件类型和访问权限(事物属性)

• ⽂件类型:

◦ d:⽂件夹

◦-:普通⽂件

◦ l:软链接(类似Windows的快捷⽅式)

◦ b:块设备⽂件(例如硬盘、光驱等)

◦ p:管道⽂件

◦ c:字符设备⽂件(例如屏幕等串⼝设备)

◦ s:套接⼝⽂件

• 基本权限:

◦ 读(r/4):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息 的权限

◦ 写(w/2):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除移动⽬录内 ⽂件的权限

◦ 执⾏(x/1):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权 限

◦ "---"表⽰不具有该项权限

上述的文件详细信息当中,这两行的最左边的-代表普通文件,接着后面一共有9个字符,每三个字符代表三种角色的文件权限,从上面我们可以看到第一个root(拥有者)文件权限是rw-,第二个root(所属组)文件权限r--,第三个隐藏的others(其他用户)文件权限r--。

切记:这些目标文件权限的读(r),写(w),执行(x)它们之间的顺序不能颠倒。

如果有一个问题:这个test.c文件的权限是什么?

这个文件test.c的拥有者是root,root对应文件的权限是可读,可写,不可执行;

这个文件test.c的所属组是root,root对应文件的权限是可读,不可写,不可执行;

这个文件test.c的其他用户是隐藏的others,隐藏的others对应文件的权限是可读,不可写,不可执行;

⽂件权限值的表⽰⽅法

• 字符表⽰⽅法

• 8进制数值表⽰⽅法

⽂件访问权限的相关设置⽅法

1. chmod

功能:设置⽂件的访问权限

格式:chmod参数权限⽂件名 常⽤选项:

• R->递归修改⽬录⽂件的权限 • 说明:只有⽂件的拥有者和root才可以改变⽂件的权限 chmod命令权限值的格式:

• ⽤⼾表⽰符+/-=权限字符

◦ +:向权限范围增加权限代号所表⽰的权限

◦-:向权限范围取消权限代号所表⽰的权限

◦ =:向权限范围赋予权限代号所表⽰的权限

◦ ⽤⼾符号:

◦ u:拥有者

◦ g:拥有者同组⽤

◦ o:其它⽤⼾

◦ a:所有⽤⼾

◦ 实例:

▪ chmod u+w /home/abc.txt

▪ chmod o-x /home/abc.txt

▪ chmod a=x /home/abc.txt

比如我们现在的这个test.c文件的权限是rw-r--r--,它们分别代表三个角色所对应文件的权限,如果我们想修改这些角色所对应文件的权限,我们就可以使用chmod指令。

我们可以看到当我们输入相关的指令之后,u-w代表拥有者可写权限改成不可写,其他角色所属组(g)和其他用户(o)也是相同的写法,只不过将上面的u-w中的u改成g或o

如果我们想一次性改全部角色所对应的文件权限有两种写法:

(1)

这是将它们三个分别用逗号隔开,完成所有角色文件权限的更改。

(2)

这里的a是all所有的意思,这两种写法都可以完成全部角色对应文件权限的更改。

2. chown

功能:修改⽂件的拥有者

格式:chown参数⽤⼾名⽂件名

实例:

• chown user1 f1

• chown -R user1 filegroup1

比如说,我们现在这里的拥有者是root,如果我们想要将拥有者改为普通用户呢?

这里就可以使用chown指令(own是owner的简写)

注意:改变拥有者的名字前提是这个名字在xshell里面必须前提是存在,才能切换拥有者,不然切换不了。

这里我之前没有创建,现在创建一个用户名yzc

接着我们开始将拥有者改为yzc,

这里我们可以看此时的拥有者已经变成了yzc。

当然这里也可以直接把所属组也直接修改

这里的写法是拥有者和所属组之间用:(冒号)隔开,就可以直接把拥有者和所属组直接全部修改为yzc。

(1)能改变任何人文件的权限吗?

答案:用户只能改变自己的文件权限,例如这个test.c文件的拥有者是root,而当我们切换到其他用户yzc时,如果我们想要改root的文件权限,系统会直接报错,不能让我们 修改权限。

(2)在确定权限的时候,系统会先确定用户是谁,拥有者,所属组还是other?

用户角色的确定,系统只确定一次,顺序是拥有者,所属组,other

(3)如果我们的文件当中,没有读写,可执行的相关权限时,如果我们非要访问呢?

答案:此时系统会拒绝我们访问文件

文件权限rwx,约束所有的普通用户,不约束root超级用户。

root可以读写修改任意文件,不管文件有没有相关的文件,但是root有一种情况下不能进行访问 权限,那就是当这个文件正在运行的时候,系统会开启一种保护机制,保护此时正在运行的文 件,此时超级用户root也无法访问此文件并修改。

(4)如何理解可执行?

文件有可执行权限不代表文件可执行,文件的可执行看的是这个文件所处的目录有没有可执行的权限。

举例说明:假设有一个目录 /home/project,它的权限是 rwx r-x r-x,即拥有者可读、可写、可执行,所属组和其他用户可读、可执行。此时目录里有一个文件 test.c,其权限是 rw- r-- r--,即拥有者可读可写,所属组和其他用户只可读。那么对于普通用户 yzc 来说,虽然 test.c 本身没有可执行权限,但只要 yzc 对 /home/project 目录拥有可执行权限,他就可以进入该目录并查看 test.c 的内容;反之,如果 yzc 对目录没有可执行权限,即使 test.c 本身有可读权限,他也无法进入目录去读取这个文件。再比如,一个脚本文件 run.sh 的权限是 rw-r--r--,即使它内部是合法的可执行脚本,直接执行 ./run.sh 也会提示权限不足,因为文件本身没有可执行权限;只有通过 chmod +x run.sh 给文件加上可执行权限后,才能正常运行。

一句话:文件可不可以执行看到是目录有没有可执行的权限。

(5)一个文件是否能修改,与文件本身无关,主要看目录有没有w权限,

3. chgrp

功能:修改⽂件或⽬录的所属组

格式:chgrp参数⽤⼾组名⽂件名

常⽤选项:-R递归修改⽂件或⽬录的所属组

实例: chgrp users /abc/f2

如果我们只想改所属组的名字,可以直接使用chgrp

目录的权限

当我们新建一个目录,系统默认给拥有者的权限都有rwx,为啥系统默认给这三个权限呢?

(1)如果目录没有r权限,那么我们就无法查看文件,可以创建文件,但是就是不能查看文件内容

(2)如果目录没有w权限,就无法在指定目录下面新建文件

(3)如果我想进入一个目录:就必须要有x权限

综上:一个目录必须有rwx三个权限

4 umask

功能:

• 查看或修改⽂件掩码

• 新建⽂件夹默认权限=0666

• 新建⽬录默认权限=0777

• 但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的 时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的⽂件权限是:mask& ~umask 格式:umask权限值

• 说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为 0022,普通⽤⼾默认为0002。

实例:

umask 755

umask // 查看

u mask 044// 设置

总结:访问Linux文件时,要先校验每一层父目录权限,目录的x权限是进入目录的前置门槛,若目录权限不满足,直接拒绝访问,不会检查文件自身rwx;只有目录权限校验通过后,文件本身的r、w、x权限才会生效,控制对文件内容的读、写、执行。另外删除或重命名文件,看父目录的w权限,和文件自身w权限无关;root超级用户不受文件rwx约束,但依旧受目录权限限制。

相关推荐
BI专家之路2 小时前
安装linux/hadoop/jdk/hive
linux·hive·hadoop
GeW15 小时前
超详细!RHCE10版通用备考策略,内含评分细则解读
linux
用户0413284651315 小时前
Linux 服务开机自启动怎么配置?systemctl enable 原理详解
linux
BreezeJiang1 天前
从域名到 Node.js:一次云服务器请求经过了哪些层?
服务器
草莓熊Lotso1 天前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
张文君1 天前
ubuntu26.04坏道坏块分区隔离急速版260831-V0.12
linux·python
贝锐1 天前
从国产化信创设备到商用安卓终端,向日葵如何帮助企业实现统一运维管理?
linux·运维·远程控制
Julien20041 天前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
2601_962074682 天前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器