从错误的 chown 命令中恢复

从错误的 chown 命令中恢复

我本来要将目录的所有权更改为apache:apache,但最终我运行了:

chown -R apache:apache /

糟糕!太糟糕了!当它开始说:

chown:更改“/proc/2694/fd/48”的所有权:权限被拒绝

就在那时,我停止了一切(Ctrl+C)。


我当前的系统是运行运行 CentOS 5 的 virtualbox 的服务器。该问题发生在 VM 内部。

目前,一切似乎都正常,但我还没有重新启动系统,说实话,我担心如果我这样做的话,会出现问题。

我不知道chown命令是什么,我应该担心并假设重启后会出现问题吗?有没有办法从这个问题中恢复,而不必依赖备份?我确实每天都有备份,但我认为可能有更简单的解决方法。

答案1

最好有一个旧的备份,但恕我直言,它足以提取所有权数据。

我会这样做:

  • 首先,备份当前状态。

  • 然后根据 RPMDB 恢复原始属性。这可能会修复很多文件

  • 要识别和修复剩余的文件,请查找仍受此问题影响的所有文件。这些文件属于apache:apache并且位于 的“搜索顺序”之前/proc。也许你会

    ls -U /
    

    首先并获取之前的根级条目列表/proc(我想这是您取消该过程的地方)。

    然后做一个

    find /foo /bar /baz -user apache -group apache
    

    foo将、bar、替换baz为之前确定的条目。find将 的输出重定向到文件。

  • 从备份中提取给定文件的所有所有权数据并将其应用于文件。

答案2

rpm --setugids将恢复传递给它的软件包的所有权。传递-a以恢复所有软件包。您可能还需要--setperms恢复 setuid/setgid 权限。

答案3

老实说,此时最简单的方法是安排从上次备份进行适当的恢复。幸运的是,您仍然可以进行另一次最终备份以保留当前用户数据;然后恢复旧备份,最后从最终备份恢复用户/客户数据,确保在执行此操作时保留每组文件的权限。

答案4

由于您是那些幸运且聪明的人之一,已经实施了每日备份,因此我建议如下:

如果您可以直接访问备份目录,则可以使用它来删除所有文件的权限。例如,Bacula 将元数据存储在数据库中,可以使用 SQL 查询查看文件数据。

还可以将所有文件恢复到单独的位置并从那里读取文件系统以确定适当的权限。

对于您使用 chown (find / -user apache -group apache) 破坏的系统上的每个文件,请检查备份中是否存在相应的文件。如果存在,则恢复用户和组。如果不存在,请将其标记以供稍后检查并继续。

此过程将使您的所有数据保持最新,并防止破坏一两天的工作成果。RPM 数据库权限恢复是一个好主意,但如果您有备份,则可以一次性完成大部分工作。

相关内容