运行 sudo chown -R $USER$USER /usr/lib/ 后无法访问 Internet

lmi*_*asf 4 permissions command-line networking chown

我想更新 PyCharm,但在运行 Pycharm 时无法进行,因为它说我没有足够的权限。所以我运行以下命令:

$ sudo chown -R $USER$USER /usr/lib/
Run Code Online (Sandbox Code Playgroud)

我能够成功更新 PyCharm,但现在我的 Internet 连接无法正常工作,实际上我在按照本教程访问恢复模式后无法运行 sudo 。

我真的需要让我的 Internet 连接再次工作,因此请您帮助我解决此问题,我将不胜感激。

我不得不提一下,我使用的是双启动。

Zan*_*nna 14

其实不用重装。这种情况是完全可以弥补的。我只是在我的系统上运行了相同的命令并在大约 10 分钟内修复了它。

您需要在恢复模式下启动,或者使用任何 Linux 版本(最好是 Ubuntu!)的实时 USB/DVD

如果您更喜欢恢复,请参阅如何启动进入恢复模式?

我使用了一个带有 Xubuntu 16.04 的实时 USB,我不得不使用它。如果使用实时会话,请在启动后打开终端并使用诸如lsblk和 之类的命令识别您的根(主)分区sudo fdisk -l。当您知道它是哪个(它可能是一个ext4分区)时,安装它。我在这里调用根分区/dev/sda1- 您需要将其替换为真实标签。

sudo mount /dev/sda1 /mnt
Run Code Online (Sandbox Code Playgroud)

现在通过执行检查它是否是正确的分区ls /mnt- 您应该usr sys proc dev home root在文件系统树的顶部看到以及您希望找到的其他内容。好的,让我们修复所有权(在所有这些命令中,请注意:并确保将它们放在正确的位置)。

sudo chown -R root: /mnt/usr/lib
Run Code Online (Sandbox Code Playgroud)

这几乎修复了它。在我的系统上,在我破坏它之前,我检查了该位置的所有所有权

$ find /usr/lib -not -user root
Run Code Online (Sandbox Code Playgroud)

什么都不返回 - root 拥有一切,但是

$ find /usr/lib -not -group root -ls
Run Code Online (Sandbox Code Playgroud)

翻到了这个:

-rwxr-sr-x   1 root     mail          /usr/lib/emacs/24.5/x86_64-linux-gnu/movemail
-rwxr-sr-x   1 root     tty           /usr/lib/mc/cons.saver
-rwsr-xr--   1 root     messagebus    /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwxr-sr-x   1 root     utmp          /usr/lib/x86_64-linux-gnu/utempter/utempter
Run Code Online (Sandbox Code Playgroud)

您的系统不会完全相同,但是chown如果您有这些文件,您应该寻找它们,如果没有,则寻找等效文件(例如,如果您的系统是 32 位,您将拥有x86而不是x86_64)。我修复了这些:

sudo chown :mail /mnt/usr/lib/emacs/24.5/x86_64-linux-gnu/movemail
sudo chown :tty /mnt/usr/lib/mc/cons.saver
sudo chown :messagebus /mnt/usr/lib/dbus-1.0/dbus-daemon-launch-helper
sudo chown :utmp /mnt/usr/lib/x86_64-linux-gnu/utempter/utempter
Run Code Online (Sandbox Code Playgroud)

(如果使用恢复模式,则不需要/mnt在这些路径的开头)

正如@grawity所指出的,您还需要修复被清除的setuid位:dbus-daemon-launch-helperchown

sudo chmod u+s /mnt/usr/lib/dbus-1.0/dbus-daemon-launch-helper
Run Code Online (Sandbox Code Playgroud)

  • 最重要的是,dbus-daemon-launch-helper 也需要重新应用它的 setuid 位(chowning 后的`chmod u+s`)。您可以使用“find -perm /7000”找到那些。 (2认同)
  • @fkraiem 我们在聊天中进行了一些轮询,我们都发现所有内容都属于 root,这些文件或具有不同组所有权的非常相似的文件(一个 mod 建议我发布答案)。我相信这种修复策略适用于大多数用户,并且可能比重新安装更可取。我没有在这里提出任何破坏性的建议。 (2认同)

Kaz*_*lfe 8

chown对系统目录的任何类型的操作都是非常危险的

解决此问题的最简单方法就是完全重新安装操作系统。

如果你很幸运(并且有点冒险),你可以通过简单地从恢复模式运行以下命令来恢复:

chown -R root:root /usr/lib
Run Code Online (Sandbox Code Playgroud)

虽然大多数文件由 root in 拥有/usr/lib,但可能仍然有偶尔的文件不是,如果它不是由适当的用户主动拥有,这将导致重大问题。事实上,在您的(平均)Linux 安装中,此目录中的大多数文件都归root/拥有root,因此如果不希望重新安装,这绝对值得一试。

否则,您必须遍历每个文件并手动将权限重新分配给它们的正常值(通常意味着由 拥有root,但并非在所有情况下)。有时,您可以只重新安装所有软件包(使用apt --reinstall install <packagename>),但这不能保证,并且可能仍然导致比它解决的更多的麻烦。真的,你会浏览每个文件并运行dpkg -L它们。

至于将文件保留在当前系统中(如果您重新安装操作系统路径),您可以在恢复模式下使用闪存驱动器。如果您需要在最后一秒将一些文件上传到 Git,您可能可以使用 Live DVD(从损坏的安装中提取 SSH 密钥和任何重要的东西)。


将来,为了防止这种确切类型的问题再次发生,请确保您有(工作 - 检查它!)系统和任何重要文件的备份。

此外,这是需要注意的是重要的sudo不是一次性的修复,所有任何权限错误的解决方案,而不应使用这种方式!如果出现权限错误,则可能有一个很好的理由您没有权限执行该操作,因此请以理智的方式调查并解决它。

  • @lmiguelvargasf 无需重新安装... (2认同)