【深度解析】Linux文件权限的“生存法则”!

目录

一.引言

二.权限的“身份证”:理解rwx

2.1 角色

2.2 文件类型

2.3 基本权限

2.4 文件权限值的表示方法

三.变更“身份” :chown 与 chgrp

四.权限“变脸术”:chmod

五.默认规则的“守门员”:umask

六.特殊权限:粘滞位

6.1奇怪的现象        

6.2具体用途


一.引言

       在 Linux 的世界里,有一句名言:“一切皆文件”。但你是否想过,如果这些文件可以被任何人随意查看、修改或删除,那系统安全将无从谈起。Linux 权限机制就像是一套严密的“门禁系统”,决定了谁能进门、谁能动屋子里的东西。今天,我们就来拆解这套系统的核心指令,带你彻底玩转 Linux 权限管理。

二.权限的“身份证”:理解rwx

2.1 角色

       在 Linux 的世界里,为了实现多用户环境下的安全和协作,系统将每个文件或目录的访问者划分为三个特定的“身份”。

  • 拥有者(Owner):通常是创建该文件或目录的用户。在命令中通常用字母u(user)表示。

  • 所属组(Group)Linux允许将多个用户编成一个“组”。如果一个文件被设定为属于某个组,那么这个组内的所有成员都享有该文件对“组”开放的权限。在命令中通常用字母g(Group) 表示。

  • 其他人(Other):既不是文件的拥有者,也不属于文件所属组的任何其他用户。在严谨的服务器环境中,为了安全,通常会限制“其他人”的权限。在命令中通常用字母 o(Others) 表示。

那么如何在Linux中识别它们呢?当你输入 ls -l 命令时,你会看到类似下面的一行信息:

-  rw-  r--  r--   1  root  root  1024  Dec 18 10:00  test.txt
^   ^    ^    ^        ^      ^
|   |    |    |        |      |
类型 拥有者 组 其他人   拥有者名 组名

显然,当前这个test.txt文件,拥有者就是root,所属组同样也是root,其他人是余下的所有用户。

2.2 文件类型

        为了后续的介绍,我们有必要了解一下 Linux 的权限体系中,文件类型有哪些?即上面命令输出信息的第1位内容 - 是什么含义呢?

① -:普通文件 (Regular File)

这是最常见的文件类型。包含纯文本文件、源代码、二进制可执行程序、压缩包、图片等。

② d:目录 (Directory)

在 Linux 中,文件夹也被视为一种特殊的文件,里面记录了该目录下所有文件的列表。

        其余文件类型不是本文重点,以表格形式给出,不做过多介绍。

符号类型描述例子
l符号链接本身是一个文件,但内容指向另一个文件或目录/bin/sh是一个指向bash或dash的链接
c字符设备文件顺序读写的设备,一次一个字符键盘、鼠标、终端、(/dev/tty)
b块设备文件按块读写的存储设备,支持随机访问硬盘(/dev/sda)、U盘
s套接字文件用于进程间的网络通信MySQL的通信文件(/tmp/mysql.sock)
p命名管道用语进程间单向传递数据系统日志传递过程中可能用到

2.3 基本权限

        现在,我们再来谈谈这串神秘字符,rw-  r--  r-- 具体表示什么。这九个字符遵循严谨的‘三位一组’逻辑:自左向右依次界定了拥有者(Owner)、所属组(Group)以及其他人(Others)对该文件的操作权限边界。

①对于普通文件

  • r (Read):你可以读取文件的内容。

  • w (Write):你可以修改文件的内容。

  • x (Execute):你可以把这个文件当成程序或脚本来运行。

  • -:无权限。

②对于目录

  • r (Read):你可以列出目录里的内容。没有它,你执行 ls 就会报错。

  • w (Write):你可以在这个目录下创建、删除、重命名文件。

  • x (Execute):你可以“进入”这个目录。没有它,你连 cd 都进不去,更别提访问目录里的文件了。

  • -:无权限。

2.4 文件权限值的表示方法

  • 字符表示法:即用rwx来表示

  • 8进制数值表示法

       在 Linux 底层,权限是用二进制表示的。为了方便人类操作,我们将其转换成了简单的十进制累加。

权限符号权限名称二进制值十进制数字
r读(Read)1004
w写(Write)0102
x执行(Execute)0011
-无权限0000

权限组合公式:你只需要把对应的数字相加,就能得到一个 0-7 之间的数字:

  • rwx = 4 + 2 + 1 = 7(全开)

  • rw- = 4 + 2 + 0 = 6(读写)

  • r-x  = 4 + 0 + 1 = 5(读与执行)

  • r--  = 4 + 0 + 0 = 4(只读)

三.变更“身份” :chown 与 chgrp

如果你想改变文件的主人,这两条命令是首选。

1.chown(Change Owner)

用于修改文件的所有者,也可以顺便修改所属组。

格式:chown [参数] 用户名 文件名

sudo chown user1 file.txt(将所有者改为 user1)
sudo chown -R user1 filegroup1(递归所有文件均修改为 user1)
sudo chown user1:group1 file.txt (同时修改所有者和所属组)

2.chgrp(Change Group)

专门用于修改文件所属的群组。

格式:chgrp [参数] 用户组名 文件名

chgrp root project.log(将所属组改为 root)

注意:系统默认不允许我们把文件给别人,如果要给,必须提高自己的权限——>变为root。

四.权限“变脸术”:chmod

这是 Linux 中最常用的命令之一,依据文件权限值的两种表示方法,这里也有两种修改方式:

①数字模式

通过三个数字代表 u/g/o 的权限总和。

chmod 755 script.sh (拥有者读写执行,其他人读和执行)
chmod 644 config.txt (拥有者读写,其他人只读 —— 这是最常见的配置)

②符号模式

更直观地添加或删除权限。

  • + :向权限范围增加权限代号所表示的权限

  • -  :向权限范围取消权限代号所表示的权限

  • = :向权限范围赋予权限代号所表示的权限

chmod u+w /home/abc.txt (给拥有者增加写权限)
chmod o-x /home/abc.txt (给其他人减去执行权限)
chmod +x /home/abc.txt  (给所有人增加执行权限)
chmod g=rwx /home/abc.txt (所属组的权限变更为rwx)

注意:只有文件的拥有者和root才可以改变文件的权限。R——> 递归修改目录文件的权限。

五.默认规则的“守门员”:umask

当你新建一个文件时,它的默认权限是怎么来的???答案就是 umask

umask 是一种权限掩码,它定义了从满权限(文件 666,目录 777)中“扣除”哪些权限。超级用户root默认掩码值为 0022,普通用户默认为0002。

假设 umask 为 022:

  • 目录默认权限:777 - 022 = 755

  • 文件默认权限:666 - 022 = 644

// 实例
umask //查看
umask 044//设置

六.特殊权限:粘滞位

6.1奇怪的现象        

       我们先来看一个现象!超级管理员root在用户xxx的家目录下创建了一个root.txt文件。显然,xxx用户对于该文件此时没有任何权限。

[root@iZ2vc6as15jn39efepsimnZ xxx]# ll
total 4
-rw-r----- 1 root root  0 Dec 18 22:27 root.txt
-rw-rw-r-- 1 xxx  xxx  21 Dec 18 18:34 test1.c

但是,xxx用户此时却可以删掉该文件!

[xxx@iZ2vc6as15jn39efepsimnZ ~]$ ll
total 4
-rw-r----- 1 root root  0 Dec 18 22:27 root.txt
-rw-rw-r-- 1 xxx  xxx  21 Dec 18 18:34 test1.c
[xxx@iZ2vc6as15jn39efepsimnZ ~]$ rm -rf root.txt
[xxx@iZ2vc6as15jn39efepsimnZ ~]$ ll
total 4
-rw-rw-r-- 1 xxx xxx 21 Dec 18 18:34 test1.c
[xxx@iZ2vc6as15jn39efepsimnZ ~]$ 

这似乎看起来很不科学?xxx用户既然没有对该文件的任何权限,但是却可以删掉它?实际上,一个文件能否被删除,与文件本身无关,与文件所处的目录w权限有关!

[xxx@iZ2vc6as15jn39efepsimnZ home]$ ll
total 4
drwx------ 2 xxx xxx 4096 Dec 18 22:33 xxx

显然这个目录的拥有者正是用户xxx,并且拥有者有w权限,既可以在该目录中创建文件,同样也可以删除该目录中的文件,这是合理的。

6.2具体用途

        那么,在实际的开发中如果两个普通用户需要进行文件级别的协作呢?此时,我们不能放在任何一个用户的家目录中,因为该用户的家目录默认对其他人是没有任何权限的。

[root@iZ2vc6as15jn39efepsimnZ home]$ ll
total 16
drwx------ 2 zzz zzz 4096 Dec 18 22:33 zzz
drwx------ 2 www www 4096 Dec  8 20:22 www
drwx------ 2 xxx xxx 4096 Dec 18 22:28 xxx

此时,就需要root用户创建一个共享目录,即使大家都有写w权限,但只有文件的所有者才能删除或重命名该文件。防止恶意删除他人的文件。

// 设置方法
chmod +t /shared_dir
chmod 1777 /shared_dir(前面的 1 即代表粘滞位)

实际上,在linux的根目录下,就存在这样一个目录 tmp ,其对应的权限正是 drwxrwxrwt. 

五.其他讨论

        确定权限信息的时候,系统会先确定用户是谁?在Centos下,用户角色只会确定一次,顺序是:拥有者,所属组,其他人。

----rwxrwx 1 xxx  xxx  21 Dec 18 18:34 test1.c

例如在这样的场景下,对于拥有者xxx来说,他的权限是---即无任何权限。但是xxx同时也是所属组,而所属组的权限是rwx即所有权限都有。不过Linux是按照一个严格的顺序进行单次身份识别的,这意味着如果你是拥有者但被设为“无权限”,即便你所属的组拥有全权限,你依然会被系统无情拒绝。


        感谢观看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值