我正在使用 Ubuntu 13.04 x86_64。
我想拥有我的主目录中的所有内容。所以我执行了这两个命令。
sudo chown -RcH rootkea ~
sudo chown -RcL rootkea ~
现在,由于这些符号链接链接到文件系统中的其他文件,我意外地拥有了位于我的主目录之外的文件。
我注意到的直接后果是:
sudo 不起作用
$ sudo sudo: effective uid is not 0, is sudo installed setuid root?
- 系统变得太慢了。只要我点击关机/重启,系统就会挂起。每次我都必须手动关闭机器。
创建一个无限大小的日志文件
/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!
所以很明显cups
程序也被搞砸了。
现在我不知道还有多少其他程序已经陷入无法使用的状态。
有什么方法可以撤消上述两个命令的效果?
如何恢复整个文件系统的默认权限设置?
答案1
作为gertvdijk 建议(参照这个问题),重新安装几乎总是解决此问题的最好和最简单的方法(并且是您可以确定可以完全修复它的唯一方法),特别是当您不知道权限在哪里更改或它们从哪里更改时。
此方法, 哪个私人建议,可能会有效,您可能认为值得一试。但是,不同版本在文件和文件夹的位置以及它们的所有权和权限方面存在一些差异。此外,除了重新安装之外,使用任何解决方案,您都永远不知道是否有一些文件或文件夹具有错误的权限,这可能会在将来的某个时候导致问题。
通常,您可以通过修复所有权问题(或至少取得进展)来解决sudo
无法正常工作的问题(即,您列出的问题 1):
pkexec chown root:root /usr/bin/sudo
在您这样的情况下,这主要是一种便利措施,可以让您更轻松地执行重新安装之前需要完成的任何管理任务。(或者在尝试应用一些更复杂的解决方案之前。)如果您对重要文件(例如文档)的备份不是完全最新的,那么现在绝对需要备份。
最后,请注意,这只是所有权, 并不是权限,这些文件已被修改。因此,您可以尝试递归地将目录的所有权更改回 root。但是,这也不太可能解决问题,因为:
- 目前尚不清楚您是否确切知道哪些目录已被更改。
- 某些文件不应由 root 拥有,因为它们必须由系统中权限较低的部分访问;将其所有权或权限设置得过于严格可能会破坏系统。
- 有些文件如果由 root 拥有,则可能会导致安全漏洞。setuid 可执行文件始终以拥有它的用户身份运行。您的系统可能包含 setuid 可执行文件,这些可执行文件旨在始终以某些非-特权用户;让他们以 root 身份运行可能会很糟糕。或者有人可能有意或无意地创建了一个 setuid 文件(没有权限让其归 root 所有)。如果您将其归 root 所有,则无论谁运行它,它都会以 root 身份执行。这可能非常糟糕。
因此,如果这是一个生产系统,您应该重新安装。