所以我正在工作,并且有一个目录我定期在根终端中更改为我的用户,以便我可以在文本编辑器中打开文件,但我意外地按了 / 而不是 . ,这是我发出的命令:
chown -R emil.emil /
然后立即惊慌失措^C并输入另一个命令,因为我认为我总是可以改回我需要访问的文件:
chown -R root.root /
所以现在我甚至无法su
尝试emil
修复这个问题,因为我得到了权限被拒绝的错误。我在 Ubuntu 上,有人能告诉我是否有办法修复这个问题,而不用完全重新安装整个系统吗?
提示
如果您尝试获取 root 访问权限,并且在使用时收到此权限被拒绝错误,su
请尝试以下命令:
gksu gnome-terminal
它会提示您输入 root 密码并打开一个新的 root 终端,出于某种原因,这有效并授予我 root 访问权限,但实际上却su
无效。
答案1
从 / 衍生的文件系统具有多种所有权权限,以实现不同的目的。
您尝试的修复使 root 成为所有内容的所有者,因此对于许多操作(包括访问 /home/emil 下的文件)来说,root 是唯一可以正常工作的用户。
因此你的选择是:
- 从备份恢复
- 重新安装
- 启动到单用户模式并手动将正确的所有者应用于每个文件
我认为 1. 是不可能的,而 2. 不是首选方案。
在启动 Ubuntu 时的 Grub 菜单中,您应该在启动时看到恢复选项。如果您没有看到 grub 菜单(该菜单在 BIOS 之后的任何其他菜单之前出现),请按住左键Shift
,它就会出现。选择此选项将启动到单用户模式,您将以 root 身份登录。
从那里你可以开始改变所有权。第一件事是
chown -R emil /home/emil
这将使您成为自己文件的所有者。对于其余部分,您可能希望在另一台机器上进行安装以比较文件所有权,或者在 /etc/init.d 中启动您使用的每个服务并观察失败的原因(请注意,服务可能只是因为无法将其日志写入 /var/log 而失败,因此甚至无法提供错误报告)。
这将是一个非常耗时的过程,但确实可以避免重新安装。请注意,您对 Ubuntu 和应用程序设置所做的任何个人配置都将存储在 /home/emil 层次结构中,因此将这些文件复制到其他地方,重新安装操作系统和应用程序,然后将它们复制回来是一种更快的选择。
答案2
如果您手头有类似的系统,您可以使用它find
来找出每个文件的正确所有者和组,例如使用:
find / -printf "%u:%g %p\n" > permissions.txt
这将产生如下输出:
root:root /
root:root /usr
root:staff /usr/local
root:staff /usr/local/man
root:staff /usr/local/games
root:staff /usr/local/lib
root:staff /usr/local/lib/python2.7
root:staff /usr/local/lib/python2.7/dist-packages
root:staff /usr/local/lib/python2.7/site-packages
root:staff /usr/local/lib/python3.2
[...]
然后,您可以遍历该文件并chown
找到每个文件的原始所有者和组。
while read line
do
chown $line
done < permissions.txt
我怀疑这是否能完美地解决所有问题,因为权限和文件在系统之间有所不同,但这是一个开始,至少应该让基础系统恢复到默认状态
答案3
我对 Fedora 更熟悉,但我的建议是从实时 CD 启动并将数据从机器中复制出来然后重新安装。
您可以使用软件包管理器 (apt/dpkg) 信息来确定系统上所有文件的所有权。我可以使用 rpm 来弄清楚如何做到这一点,但我对 apt/dpkg 不太熟悉。任何增强的安全性(例如 SELinux)也可能使问题复杂化。
rpm -qa --list -v
提供基于 rpm 的系统所需的信息,您必须解析这些信息并将其提供给 chown。如果您能找到 apt/dpkg 的等效项,您就可以到达那里。