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)
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是不是一次性的修复,所有任何权限错误的解决方案,而不应使用这种方式!如果出现权限错误,则可能有一个很好的理由您没有权限执行该操作,因此请以理智的方式调查并解决它。