【问题标题】:How to securly set flags with open()?如何使用 open() 安全地设置标志?
【发布时间】:2020-04-28 21:12:01
【问题描述】:

在这个问题中:What's the connection between flags and mode in open file function in C

在 cmets 中:

问题

如果我在第一个文件中使用“S_IRUSR”作为模式位创建文件 open(),然后其他人使用“O_RDONLY”调用 open(),因为标志不会 能够读取文件

回答

同一用户将能够读取该文件。而且,只是技术性, 不是其他用户无法读取文件,而是 他们将无法打开文件

所以我问过在打开(或创建)新文件时设置权限有什么意义,这就是我在这里问的原因。 也有提到:

作为一个极端的例子,他们可能对目录具有写访问权 这意味着他们可以重命名您的文件,将其复制到原始名称, 可以访问它,然后删除您重命名的那个。权限确实有效 但您必须确保它们设置正确(例如保护 通向文件的完整路径,而不仅仅是文件本身。

所以我不明白“正确设置标志”是什么意思。并且还不明白权限设置的目的,当它不安全时。谁能解释一下?

【问题讨论】:

  • 当您错误引用文本时,很难知道您在问什么。你写“所以我不明白‘安全设置标志’是什么意思”,但文本说“你必须确保它们设置正确”。在该文本中,“正确”可能意味着获得正确的值(谁可以阅读,谁可以搜索目录,等等)。 “安全地”可能意味着“以无法颠覆的方式设置”。

标签: c io flags


【解决方案1】:

我会尽量简短地解释它。如果您在文件系统的某处执行“ls -la”,您会看到类似于下面的文件列表的内容。它显示了 Linux 和类似操作系统上文件系统权限的基础知识。运行'man chmod'会详细解释它;您还应该看到“man 3 chmod”功能描述。

正确设置文件和目录的权限以及其他设置对于安全至关重要。基本上,用户应该有最小的权限来完成他的合法任务。

drwx r-x r-x  2 root root    4096 Dec 14 23:55 .
drwx r-x r-x 24 root root    4096 Dec  5 19:02 ..
-rwx r-x r-x  1 root root 1113504 Jun  7  2019 file1
-rwx r-x r-x  1 root root  748968 Aug 29  2018 file2
-rwx r-x r-x  1 root root   34888 Jul  4  2019 file3
...
-rwx r-x r-x  1 root root   34888 Jul  4  2019 file_n
 ^^^ ^^^  ^^^ 
  |   |   |  
  |   |   +---------------------- permissions other users  
  |   +-------------------------- permissions for group members
  +------------------------------ permissions for owner
  d  - is a directory
  r  - read permission
  w  - write perrmision
  x  - execute permission

【讨论】:

    【解决方案2】:

    所以我问了打开时设置权限有什么意义 (分别创建)新文件,这就是我在这里问的原因。有 还提到:

    作为一个极端的例子,他们可能对目录具有写入权限,这意味着他们可以重命名您的文件,将其复制到原始名称,有权访问该目录,然后删除您重命名的文件。权限确实有效,但您必须确保它们设置正确(例如保护通向文件的整个路径,而不仅仅是文件本身。

    报价中的 cmets 部分不正确。确实,对目录具有写权限但对文件完全没有权限的人可以重命名文件或将其删除(在/从该目录,见下文)。同样真实的是,因此扫清了道路,同一个人可以创建一个新文件,他们可以阅读,并使用其他人的原始名称。但是,真实的是,这样的人可以复制原始文件,无论是原始名称还是其他名称,或者可以使用这种策略来阅读原始文件。

    这里的关键点是目录 D 中文件 F 的目录条目只是一种特殊文件中的数据:从名称到条目的映射在底层文件系统中。该条目是 D 的一部分,而不是 F 的一部分,因此操作它需要访问 D,而不是 F。人们通常所说的文件名实际上根本不是该文件的一部分,也不一定是唯一的,因为同一个底层文件可以在多个位置以相同或不同的名称链接到目录树。

    第二个关键点与第一个关键点相关:文件的权限驻留在文件系统中,而不是在目录列表中,它们在控制对文件内容的访问方面是有效的。这实际上对于目录和其他类型的文件是一样的:用户需要对给定目录具有读取权限才能读取其内容,并且需要对其具有写入权限才能修改其内容。因此,文件的访问控制属性确实有用,它们需要适当设置以使文件充分满足预期目的

    因此,问题第一部分的答案是双重的:

    • 文件的访问控制属性是该文件的文件系统元数据的固有部分,因此无法避免在创建文件时将它们设置为 something
    • 当您打开一个尚不存在但您愿意创建的文件(名称)时,您不能延迟权限设置,因为系统将使用该文件的初始权限来检查打开新创建文件的权限.文件的适当权限不能从请求的打开模式派生。

    第二部分的答案要简单得多:您必须在尝试打开文件时指定访问模式,因为这是操作系统强制执行访问控制的方式和时间。此外,您可以指定比允许的限制更严格的模式作为内部控制,以防止错误地对文件执行意外操作。

    我不明白“正确设置标志”是什么意思。

    该评论对我来说似乎很清楚,尤其是根据随附的示例,但如果将包含它的较大声明重写为“您需要考虑这些考虑因素,尊重不仅是文件本身,还包括文件路径中的每个目录,以确保文件权限正确地满足您的安全目标”。

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 2013-08-20
      • 2012-10-13
      • 2015-06-14
      • 2010-11-29
      • 2022-01-07
      • 2018-04-28
      • 2020-01-11
      • 2011-11-25
      相关资源
      最近更新 更多