如何恢复目录/文件的默认 chown 权限?

roo*_*kea 5 filesystem permissions chown

我正在使用 Ubuntu 13.04 x86_64。

我想在我的主目录中拥有全部内容。所以我执行了这两个命令。

sudo chown -RcH rootkea ~  
sudo chown -RcL rootkea ~
Run Code Online (Sandbox Code Playgroud)

现在由于这些符号链接链接到文件系统中的其他一些文件,我不小心拥有了驻留在我的主目录之外的文件。
我注意到的直接后果是:

  1. 须藤不工作

    $ sudo  
    sudo: effective uid is not 0, is sudo installed setuid root?
    
    Run Code Online (Sandbox Code Playgroud)
  2. 系统变得如此缓慢。当我单击关闭/重新启动时,它就会挂起。每次我都必须手动关闭机器。
  3. 创建一个/var/log/cups/error_log大小不定的日志文件,它消耗了我硬盘驱动器的最后一个字节(经过相当长的时间)。上次是 17.8 GB!
    文件的内容只有无数次重复的这两行:

    E [24/May/2013:02:27:52 +0530] File "/usr/lib/cups/notifier/dbus" has insecure permissions (0100755/uid=1000/gid=0).  
    W [24/May/2013:02:27:52 +0530] Notifier for subscription 531 (dbus://) went away, retrying!
    
    Run Code Online (Sandbox Code Playgroud)

很明显,cups程序也被搞砸了。

现在我不知道有多少其他程序进入了无法使用的状态。

有什么办法可以撤消上述两个命令的效果吗?
如何恢复整个文件系统的默认权限设置?

Eli*_*gan 4

正如gertvdijk 建议的那样(通过参考这个问题),重新安装几乎总是解决此问题的最佳和最简单的方法(也是您可以确定完全解决它的唯一方法),特别是如果您不确切知道权限在哪里改变或从什么改变。

私人建议的这种方法可能有效,您可能会认为值得一试。但是,文件和文件夹的位置以及它们的所有权和权限应该是什么,各个版本之间存在一些差异。此外,除了重新安装之外,使用任何解决方案,您永远不会知道是否有一些文件或文件夹具有错误的权限,这可能在将来的某个时候导致问题。

您通常可以通过修复其所有权来修复(或至少取得进展)无法工作的问题sudo(即问题 1,如您所列):

pkexec chown root:root /usr/bin/sudo
Run Code Online (Sandbox Code Playgroud)

在像您这样的情况下,这主要是作为一种便利措施,使您可以更轻松地执行重新安装之前需要完成的任何管理任务。(或者在尝试应用一些更复杂的解决方案之前。)如果您的重要文件(例​​如文档)的备份不是完全最新的,那么现在绝对需要进行备份。

最后,请注意,修改的只是所有权,而不是权限。因此,您可以尝试递归地将目录的所有权更改回根目录。然而,这也不太可能解决问题,因为:

  • 目前尚不清楚您是否确切知道哪些目录已更改。
  • 某些文件不应该由 root 拥有,因为它们必须由系统中特权较低的部分访问;将其所有权或权限设置得太严格可能会破坏系统。
  • 如果 root 拥有某些文件,则可能会导致安全漏洞。setuid 可执行文件始终以拥有它的用户身份运行。您的系统可能包含 setuid 可执行文件,这些可执行文件始终以非特权用户身份运行;让它们以 root 身份运行可能会很糟糕。或者有人可能有意或无意地创建了一个 setuid 文件(没有权限使其归 root 所有)。如果你让它被 root 拥有,那么无论谁运行它,它都会以 root 身份执行。那可能非常糟糕。

因此,如果这是生产系统,您应该重新安装。