我意外地通过命令将根文件夹 (/) 及其所有子文件夹的所有者设置为一个用户
$ sudo chown -R 'userName' /*
现在我想通过命令将所有者重新设置为 root 用户
$ chown -R root:root /*
但我没有权限执行此操作。如果我使用命令
$ sudo chown -R root:root /*
它返回
sudo: effective uid is not 0, is sudo installed setuid root?
我应该怎样修复它?
答案1
呃......这是一个有趣的情况。sudo
要求二进制文件由其拥有root
并具有setuid
标志才能正常运行(这允许它作为文件所有者执行,无论谁实际启动它)。
通过更改所有者,sudo
无法再以 的身份运行root
,因此也无法以 的身份运行命令root
。
最简单的恢复方法是
- 重新启动计算机进入单用户模式
- 将所有重要文件复制到 USB 或外部驱动器上。
- 重新安装 Ubuntu,然后恢复您的文件。
正如您所发现的,有许多系统文件绝对依赖于拥有正确的所有者和正确的权限。SSHd
例如,如果主机私钥不存在,将拒绝启动确切地正确的权限(0600
我认为是 root 所拥有的)。如果没有被拥有就sudo
无法提升自身,而且我确信还有很多其他与安全相关的程序,如果它们发现事情不完美,它们将无法运行。setuid
root
通过很多非常繁琐的工作,可以使用外部计算机恢复某些权限,但这不是一个有趣的任务,重新安装可能会简单得多。
答案2
如果您之前以递归方式执行过 chown,那么您的权限很可能已遭受不可逆转的损坏。
备份您的数据并重新安装。
答案3
认真地从头开始重建。即使您解决了所看到的错误,并设法重新拥有 root 权限,您的系统仍将像现在一样损坏。实际上没有办法从失控的 chowning(或 chmoding)中恢复。即使您能够以某种方式获得每个对象的原始所有者的部分列表,它也几乎肯定是不完整的,并且会反映出库存系统状态,该状态可能在文件最初创建后由 app/daemon 安装更改。