我们的一个用户意外地mv /* ../
在没有 root 权限的情况下执行了此操作。在检查使用的效果后,diff
我惊讶地发现,当应用于目录时,它mv
显然可以正常工作。cp
/
我的问题是:
- 这是该命令的标准行为吗
mv
? - 我还应该检查什么来确保系统没有受到损坏?
答案1
我猜测目标(../
)位于内部某处,或者位于安装了/home/
除文件系统之外的其他挂载点的另一个挂载点。/
- 这是该命令的标准行为吗
mv
?
是的。如果文件在文件系统之间移动,则会进行复制,然后删除源文件,并调整副本所有权以镜像源文件。我猜是这种情况,但“删除”部分抛出了“权限被拒绝”错误,并且没有删除任何内容(或者几乎没有删除任何内容,我稍后会再讨论这个问题)。
如果移动应该在单个文件系统内进行,mv
则尝试更新目录条目而不进行复制。当普通用户尝试在根文件系统内移动某些内容时,该过程通常会遇到“权限被拒绝”的情况,并且什么也不会发生。但在这种情况下,目标文件系统不同,如上所述。然而,mv
在某个时候尝试移动/home/
(或其他)挂载点它是文件系统,深入到树中../
。此操作显然是不可能的,您无法将目录移动到其子目录中。这样,用户在同一个文件系统上的文件将../
保持完整,尽管他或她可以../
逐个移动它们。
唯一的我能想到的危险情况如下:如果用户可以删除文件系统上的任何文件和/或目录其他比在哪里../
,mv
会像cp
然后源文件和/或目录将被删除。您应该检查是否会发生这种情况以及严重程度。在这种情况下,可能需要将某些文件移回。如果用户是完全普通的用户,则不会发生这种情况。用户可能已将某些文件移走,/tmp/
但可能并不严重。
- 我还应该检查什么来确保系统没有受到损坏?
我不这么认为。如果系统配置正确,普通用户无法对系统造成任何损害。好吧,在这种情况下,目标文件系统可能由于这些意外复制的文件而已满,但仅此而已。处理完上述危险情况后,删除副本和系统应该没事的。
我会做所有的清洁工作这用户,而不是 root,即使其他人必须这样做(例如sudo -u user rm something
)。这样做的目的是避免万一再次发生错误,系统会受到损坏。