对于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 值会从这些默认权限中减去相应的权限。例如,如果 umask022,则文件的默认权限会是 644(666 减去 022),而目录的默认权限会是 755(777 减去 022)

如果 umask 设置过大,例如 077
umask = 077

  • 文件权限:默认权限 666 减去 077,新文件的权限将是 600,即所有者可以读写,而组和其他用户完全没有权限。
  • 目录权限:默认权限 777 减去 077,新目录的权限将是 700,即只有所有者可以读写和进入该目录,而组和其他用户没有任何权限。

这种设置适合高度安全的环境,确保其他用户无法访问或修改用户创建的文件和目录。但对于协作环境,这可能会导致其他用户无法访问共享文件夹或文件,限制了合作的可能性。

2.5 具体情景的讨论:

如果用户B(其他用户)用户A(所有者)的目录想要进行文件操作:

  1. 写入权限 (w)
  • 用户 B 必须对该文件夹拥有 写入权限 才能在其中创建新文件。
  • 如果文件夹的权限设置为允许 B 写入,例如 770777,并且用户 B 属于拥有权限的用户组或其他用户,那么 B 可以在文件夹中创建文件。
  1. 执行权限 (x)
  • 执行权限对目录也很重要。如果没有执行权限,用户 B 即使拥有写入权限,也无法进入目录或列出其中的文件。因此,要在文件夹内创建文件,用户 B 还必须对文件夹有 执行权限

    1. 读取权限 (r)
  • 虽然读取权限不是创建文件的必要条件,但如果用户 B 没有读取权限,则无法查看文件夹内的文件列表,即使可以写入文件。

假设现在用户B在目录中成功创建了一个文件:

  • 这个文件的所有者是B,所有组是其主组

    -> 特例:对于设置了 setgid 位 的目录,任何用户在该目录中创建的文件,其所属组将继承该目录的组,而不是创建文件的用户的主组。这是 setgid(Set Group ID) 位的一个重要作用,用于确保目录中创建的所有文件和子目录都共享相同的组归属。

  • 此时B可以选择使用chgrp命令改变文件的所属组

  • 当你作为超级用户(root)使用 chown 命令更改文件的所有者时,文件的权限保持不变。chown 命令仅仅改变文件的所有者和/或所属组,而不会改变文件的权限。

  • 如果文件夹具有 粘滞位sticky bit),即文件夹权限显示为 drwxrwxrwt,那么即使其他用户可以在文件夹中创建文件,他们只能删除自己创建的文件,不能删除其他用户创建的文件。典型例子是 /tmp 目录。

  • 如果目录设置了 粘滞位,则只有以下用户可以删除文件:

    • 文件的所有者(即用户 B)
    • 目录的所有者(即用户 A)
    • 超级用户(root)

🎯这意味着,如果在某个目录中,其他用户B通过超级用户更改获得的某个文件的所有权,他也无法删除这个文件(无论他是否可以进入到目录中)

posted @ 2024-09-09 17:03  想吃烧饼  阅读(87)  评论(0)    收藏  举报