对于linux文件权限的思考

一个文件或目录可以从权限和其所属讲起。
1. 从用户的创建开始
一个用户从创建开始就有了所属用户组,这是因为每个用户必须属于一个主组,通常在用户创建时系统会默认为其创建一个同名的主组(后续可由超级用户(root)通过修改用户的账户设置来更改主组)。
那么由该用户创建的文件,其所有者就是该用户,所有组就是其主组。
2. 文件的权限
首先,文件的权限对象由三部分组成(所有者,所属组,其他用户)
2.1 所有者(所有权)
- 普通用户(即非管理员或超级用户)不能将文件的所有权转移给其他用户。只有超级用户(
root)或具有特定权限的用户可以更改文件的所有者。 - 意味着普通用户不能丢垃圾(🤭)
2.2 所属组
-
文件的所有者可以修改文件的所属组,但前提是文件所有者对该文件有写入权限
-
普通用户可以使用
chgrp命令将文件的所属组更改为他们是成员的组,但用户不能将文件的所属组更改为他们不属于的组。
其他用户不做讨论
2.3 文件的权限
具体权限划分可以分为读(r),写(w),可执行(x)
权限在文件和目录上的效果也需要注意
r:对于文件:具有读取文件内容的权限(如可用cat读取文本)
对于目录:具有浏览目录的权限(如可用ls命令查看信息)
w:对于文件:具有新增,修改,删除文件内容的权限(注意是删除内容而不是文件)
对于目录:具有新建,删除,修改,移动目录内文件的权限
x:对于文件:具有执行文件的权限(如exe程序,脚本)
对于目录:具有进入目录的权限(如cd操作)
-
如果你对某个目录没有写入权限,你将无法删除目录中的任何文件。即使文件的所有者是你,目录权限的限制仍会阻止你删除文件。
-
如果你对某个目录具有写入权限(
w)和执行权限(x),你可以删除该目录中的任何文件,无论这些文件的所有者是谁。
2.4 默认权限
文件或目录的默认权限是由 umask 值决定的。
umask 是一种掩码,它定义了默认权限的减少量。通常,文件的默认权限是 666(即所有者、组和其他人都有读写权限),目录的默认权限是 777(即所有者、组和其他人都有读、写、执行权限)。但是,umask 值会从这些默认权限中减去相应的权限。例如,如果 umask 是 022,则文件的默认权限会是 644(666 减去 022),而目录的默认权限会是 755(777 减去 022)
如果 umask 设置过大,例如 077 :
umask = 077:
- 文件权限:默认权限
666减去077,新文件的权限将是600,即所有者可以读写,而组和其他用户完全没有权限。 - 目录权限:默认权限
777减去077,新目录的权限将是700,即只有所有者可以读写和进入该目录,而组和其他用户没有任何权限。
这种设置适合高度安全的环境,确保其他用户无法访问或修改用户创建的文件和目录。但对于协作环境,这可能会导致其他用户无法访问共享文件夹或文件,限制了合作的可能性。
2.5 具体情景的讨论:
如果用户B(其他用户)在用户A(所有者)的目录想要进行文件操作:
- 写入权限 (
w)
- 用户 B 必须对该文件夹拥有 写入权限 才能在其中创建新文件。
- 如果文件夹的权限设置为允许 B 写入,例如
770或777,并且用户 B 属于拥有权限的用户组或其他用户,那么 B 可以在文件夹中创建文件。
- 执行权限 (
x)
-
执行权限对目录也很重要。如果没有执行权限,用户 B 即使拥有写入权限,也无法进入目录或列出其中的文件。因此,要在文件夹内创建文件,用户 B 还必须对文件夹有 执行权限。
- 读取权限 (
r)
- 读取权限 (
-
虽然读取权限不是创建文件的必要条件,但如果用户 B 没有读取权限,则无法查看文件夹内的文件列表,即使可以写入文件。
假设现在用户B在目录中成功创建了一个文件:
-
这个文件的所有者是B,所有组是其主组
-> 特例:对于设置了 setgid 位 的目录,任何用户在该目录中创建的文件,其所属组将继承该目录的组,而不是创建文件的用户的主组。这是 setgid(Set Group ID) 位的一个重要作用,用于确保目录中创建的所有文件和子目录都共享相同的组归属。
-
此时B可以选择使用
chgrp命令改变文件的所属组 -
当你作为超级用户(root)使用
chown命令更改文件的所有者时,文件的权限保持不变。chown命令仅仅改变文件的所有者和/或所属组,而不会改变文件的权限。 -
如果文件夹具有 粘滞位(
sticky bit),即文件夹权限显示为drwxrwxrwt,那么即使其他用户可以在文件夹中创建文件,他们只能删除自己创建的文件,不能删除其他用户创建的文件。典型例子是/tmp目录。 -
如果目录设置了 粘滞位,则只有以下用户可以删除文件:
- 文件的所有者(即用户 B)
- 目录的所有者(即用户 A)
- 超级用户(root)
🎯这意味着,如果在某个目录中,其他用户B通过超级用户更改获得的某个文件的所有权,他也无法删除这个文件(无论他是否可以进入到目录中)

浙公网安备 33010602011771号