【问题标题】:how bash create a file which only accessed by current bash script processbash 如何创建仅由当前 bash 脚本进程访问的文件
【发布时间】:2021-10-24 07:36:52
【问题描述】:

据我所知,bash 脚本可以创建 file 并将其写入disk path/dev/shm,但该文件已被root 或其他用户访问。如何设置仅由当前 bash 脚本进程访问的文件权限?我会在exit bash 脚本之前rm 这个文件

【问题讨论】:

  • 也许您可以将文件重定向到给定的描述符编号,删除文件,然后使用该描述符进行重定向...
  • @Shawn THX,我会试试的。
  • 但即使这样也不会阻止root 看到它/它的内容,如果他们下定决心的话。
  • 将文件权限设置为 600 将停止除 root 之外的所有用户。一般来说,停止root 需要很多非常特殊的操作。 Selinux 已被提出(但我从未见过防水的解决方案),过去 SeOS 和 Autosecure 可以做到这一点。但是限制根是一个坏主意。限制对 root 的访问是一个更好的主意。
  • @VictorLee :您不能通过 PID 设置权限。即使您仅授予用户权限,您运行的另一个进程也可能会操作该文件。通常的技巧是 - 除了限制权限 - 根据您的 PID 选择文件名,因为当时运行的其他进程不能具有相同的 PID。示例:touch my_file.$$。至少,您的 ID 下的另一个进程意外覆盖此文件的可能性不大,但当然也不是不可能。

标签: linux bash shell file permissions


【解决方案1】:

您可以将文件名重定向到给定的描述符编号,并删除文件,然后通过描述符访问它:

#!/usr/bin/env bash

name=$(mktemp)
exec {fd}<>"$name"
rm -f "$name"
echo foo >&$fd
cat </dev/fd/$fd

bash 中使用已通过&lt;&gt; 打开并用于读写的描述符很棘手,请参阅Bash read/write file descriptors — seek to start of file 以了解末尾cat 行背后的逻辑。

如果您以前从未见过{name}&lt;&gt;filename 样式重定向,它会自动为文件分配一个未使用的描述符并将其编号存储在$name 中。

【讨论】:

  • 这将使任何其他进程更难访问该文件,但并非不可能。例如,在 Linux 中,根进程可以通过 /proc/yourPID/fd/fdnum 访问它。
  • @GordonDavisson 正如 cmets 在顶级问题中指出的那样,阻止 root 访问它几乎是不可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 2021-11-22
  • 1970-01-01
  • 2013-01-19
  • 2021-08-29
  • 1970-01-01
  • 2010-11-22
相关资源
最近更新 更多