gpt4 book ai didi

installation - 运行 shell 脚本时,如何保护它不被覆盖或截断文件?

转载 作者:行者123 更新时间:2023-12-04 05:17:30 26 4
gpt4 key购买 nike

如果应用程序运行时它使用的共享库之一被写入或截断,则应用程序将崩溃。移动文件或使用“rm”批量删除它不会导致崩溃,因为操作系统(在本例中为 Solaris,但我认为在 Linux 和其他 *nix 上也是如此)足够智能,不会删除与任何进程打开文件时的文件。

我有一个执行共享库安装的 shell 脚本。有时,它可能用于重新安装已安装的共享库版本,而无需先卸载。因为应用程序可能正在使用已经安装的共享库,所以脚本足够智能以 rm 文件或将它们移开(例如,当我们知道没有应用程序时 cron 可能会清空的“已删除”文件夹)很重要将运行),然后再安装新的,这样它们就不会被覆盖或截断。

不幸的是,最近一个应用程序刚安装就崩溃了。巧合?这很难说。这里真正的解决方案是切换到比旧的巨大 shell 脚本更健壮的安装方法,但是在进行切换之前有一些额外的保护会很好。有什么方法可以包装 shell 脚本以防止它被覆盖或截断文件(理想情况下会大声失败),但仍然允许它们被移动或 rm'd?

标准 UNIX 文件权限无法解决问题,因为您无法区分移动/删除与覆盖/截断。别名可以工作,但我不确定需要为哪些命令设置别名。我想像 truss/strace 之类的东西,除了在每个 Action 之前它都会检查过滤器是否实际执行它。我不需要一个完美的解决方案,甚至可以对付故意恶意脚本。

最佳答案

您可以通过 I/O 重定向防止脚本被覆盖

set noclobber

通过 cp 之类的方法防止覆盖更难。我倾向于重置 PATH 以使脚本运行时 PATH 仅包含一个条目,一个“有福”的目录,您可以在其中放置您知道是安全的命令。这可能意味着,例如,您的 cp 版本被安排为始终使用 --remove-destination 选项(可能是 GNU 主义)。在任何情况下,您都安排脚本仅执行 blessed 目录中的命令。然后,您可以单独审查每个此类命令。

如果您可以阻止脚本通过绝对路径名执行命令,那就太好了,但我不知道该怎么做。如果您在常规目录中进行安装,chroot jail 可能无济于事,除非您进行大量环回安装以使这些目录可见。如果您正在安装的目录包含危险命令,我看不出您如何才能完全保护自己免受它们的侵害。

顺便说一句,我尝试了解 install(1) 是否在安装前删除了目标,但未能获知。学习起来会很有趣。

关于installation - 运行 shell 脚本时,如何保护它不被覆盖或截断文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2394014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com