【问题标题】:File Locking in LinuxLinux 中的文件锁定
【发布时间】:2013-10-20 20:31:02
【问题描述】:

第一个问题:

用户可以在 Linux/Unix 中锁定文件以防止读取或写入吗?

第二个问题:

用户可以将锁定的文件刻录到任何光学介质上吗?之后会不会对应 任何操作系统?

第三个问题:

如果文件因读取或写入而被锁定并被刻录到任何光学介质上, 用户可以尝试撕掉它吗?如果是这样,之后,任何操作系统内核都可以创建一个 拒绝除 root 用户之外的任何用户执行该任务的错误消息?

如果文件被阻止读取,则用户无法复制、打开或读取它。 如果文件被阻止写入,那么用户可以在桌面内移动它,但它 不得刻录到任何光学介质中。

还有一件事,没有 cp 权限之类的东西。我刚刚才知道的。

由于我精通 C/C++ 编程,如果任何操作系统内核不支持我要说的内容,我可能会用 C/C++ 创建一个库。 cc 之后,如果可能,将其制作为库文件并将其包含在 C/C++ 库中。

为了执行该任务,我必须将所有变量声明为静态数据类型,以便在操作系统内核响应时保留它。

这是个主意吗?

另一个想法是实现不可复制的库,它只兼容 Embarcadero C/C++ 编译器,不是免费软件或共享软件。用户必须从他们的网站在线购买。

我可能弄错了,因为该主题与 C/C++ 版本 11 相关。也许微软在 2013 年更新了其 Visual Studio,并将在以后继续这样做。

JohnDB

【问题讨论】:

  • 不正确的假设:缺少写入权限不会不会阻止文件被刻录到光学介质。从原始文件的权限来看,它只涉及一次读取。根据光盘创建软件和目标文件系统的能力,权限可能会被复制到光盘,但这并不能阻止光盘创建软件将文件的副本写入光盘.
  • 这个问题在 Unix.SE 上有更多的主题,尽管所有关于 C++ 的外围噪音都必须被删除。

标签: c visual-c++ c++11 file-locking


【解决方案1】:

您的整体问题的答案是“否”。您可以在光学媒体上获得 POSIX 权限,但是一旦您开始分发可移动媒体,有效的数据安全性就几乎不复存在了。

用于光学媒体的主要文件系统有两种:

  • ISO 9660,旧的 CD 格式。

    这种格式的原始版本根本不支持权限。访问控制由内核决定,en masse决定将哪个单一权限集分配给磁盘上的所有文件。

    Rock Ridge extensions 添加了兼容 POSIX 的权限方案,但这充满了问题:

    1. 您可以在 Linux 中给norock mount option 使其忽略权限。

      请记住,这是一种可移动的光学介质。如果您将光盘发送给您无法控制的人,或者最终用户可以物理访问光盘驱动器,他们将能够破坏您的许可方案。

    2. 权限基于用户和组 ID,而不是名称,因此如果您希望目标系统上的用户和组具有 一些,那么您将遇到同步用户和组表的老问题> 访问。

      在不受单个管理员或组织管理的系统中,您唯一可以依靠的是,标记为用户 ID 0 和组 ID 0 拥有的文件将对root 只读,如果它是设置为模式 440 或 400。

    3. 非 Linux 操作系统会以不同方式解释权限。

      在我的testing of this last year 中,Windows 完全忽略了光盘权限。

      默认情况下,当您将光盘插入计算机并让它自动挂载时,OS X 也会忽略光盘权限。我想您可以通过手动安装光盘使操作系统服从权限,但这根本没有安全性。

      这涉及到上面的问题 #1,因为这意味着击败您的权限方案就像将光盘放入 Mac 或 Windows 盒子一样简单。

    4. 您询问了关于光盘翻录的问题,此时 所有 权限将消失,无论操作系统如何。翻录的假设是您对光盘具有完全的读取权限,这意味着您对数据具有完全的访问权限。从那时起,您可以对数据做任何您想做的事情。

  • UDF,CD-RW、DVD 和蓝光媒体 ISO 9660 的有效替代品。

    UDF 从一开始就具有 POSIX 文件权限,因此从这个意义上说,它就像带有 Rock Ridge 扩展的 ISO 9660。不幸的是,Linux 实现并不安全,因为您可以使用uid=ignore,gid=ignore 挂载光盘,它的行为就像使用 ISO 9660 光盘的norock

    以上所有内容同样适用于 UDF。

底线是您试图无视数据安全的一个关键原则:物理访问就是完全访问。将人们拒之门外的一个不可避免的先决条件是限制他们对系统的物理访问。这意味着您必须让他们来找您获取文件,而不是向他们发送光盘并希望他们的操作系统内核使用该光盘上的 1 和 0 完成您想要的操作。

【讨论】:

    【解决方案2】:

    您可以通过运行来锁定文件以防止任何用户使用它:

    sudo chmod 000 <file>
    

    这意味着所有者、组和其他人无法读取、写入或执行文件。 请注意,root 始终可以将文件权限设置回其他内容,因此在运行该命令后文件不会永远锁定。

    通常无法刻录文件,因为您无法从中读取文件,即使您可以,但在将文件作为该文件系统 (CDFS) 写入 CD 后,它也无法正确保留其文件权限不支持。

    您可以了解更多关于文件权限here

    【讨论】:

    • 不过,目录所有者可以删除该文件。我知道 OP 没有问这个问题,但他可能只是忽略了这种可能性。
    【解决方案3】:

    如果你有 vim 包,那么你可以加密文件

    :set key=your_key

    这样下次打开文件时它会要求输入密钥

    【讨论】:

      【解决方案4】:

      短版:

      1) 是的

      2) 没有

      3) 查看问题 2 的详细答案。

      加长版:

      当然。用户拥有文件的所有权。当然,这些都可以修改。文件具有读取、写入和执行三种不同的权限“类型”。每个文件都为三个不同的组设置或取消设置这些属性。用户、组和所有人。

      这种修改是使用 chmod 命令完成的,通常后跟一个字符串,或一个 3 位八进制符号 (0xxx)。

      我建议查看手册页中的 chmod 命令,因为它们介绍了如何非常有效地使用它。

      关于第二个问题,没有。不幸的是,光学媒体使用的文件格式实际上是光盘上的数据转储。文件系统支持权限,它不是文件本身的实际属性。因此,光盘只是数据的可靠副本,没有什么特别的权限。这意味着,无论何时在任何系统上使用该光盘,权限始终是完全开放的。

      编辑:只是为了澄清。如果您没有文件的读取权限,则无法将文件刻录到光盘。很抱歉,如果这造成任何混乱。

      【讨论】:

      • 为什么您认为无法将锁定的文件复制到光学介质?您的意思是“您可以复制文件,但该文件将不再被锁定”(这是正确的)还是“您无法复制已锁定的文件”(通常是不正确的)。
      • 大多数刻录应用程序首先读取文件,然后将它们写入 CD,因此您通常无法刻录无法读取的文件。您也无法复制文件而无法读取它(无需以 root 身份运行)。
      • 啊。我没有说清楚。我的意思是“不保留权限”,您仍然需要权限才能实际刻录文件。我会更新我的答案以反映这一点。
      猜你喜欢
      • 2012-09-14
      • 1970-01-01
      • 2019-11-24
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      相关资源
      最近更新 更多