我意外地将所有权更改/usr/bin/sudo
为当前用户(我也对我/usr
目录中的其他一些内容进行了此操作)。我无法将任何内容改回原样,因为我需要以/usr/bin/sudo
root 身份拥有所有权才能这样做。我没有 root 访问权限,因为我在运行 Linux 的 Amazon EC2 实例上。
这是我所做的(我知道这很愚蠢):
sudo chown -R ec2-user.ec2-user /usr/
在此过程中,我还遇到了很多其他问题,但我认为,如果我能重置/usr/bin/sudo
请帮忙。我是 Linux 管理员新手,所有操作都是通过命令行进行的。
我将重要数据存储在单独安装的 EBS 上,但是我对服务器管理很不满意,可能需要一整天的时间来设置新实例,但恐怕这是我唯一的选择。
答案1
如果您有任何通过 cron 以 root 身份运行的脚本并且您仍然可以编辑它们,您可以添加以下内容。
# chown root.root /usr/bin/sudo
# chmod u+s /usr/bin/sudo
否则,当您弄清楚如何在盒子上获取根时,您需要执行那些命令。
答案2
(重复我的 SE 答案)
您是否正在使用 EBS 卷?您是否可以承受关闭实例几分钟的后果?
如果这样做,那么您可以暂时停止当前实例,启动另一个实例,挂载第一个实例的 EBS 卷并修复其权限,然后卸载它并重新启动第一个实例。
答案3
(重新表述这一点,因为显然有些人不理解)
Linux 内核将其设为_POSIX_CHOWN_RESTRICTED
true,这意味着只有root
才能使用chown()
。如果将其设为 false,则意味着普通用户可以更改其文件的所有权。
chown(3)
有措辞表明可以_POSIX_CHOWN_RESTRICTED
在内核级别进行更改;但 Linux 实际上并不允许更改它,因此非用户根本没有办法root
更改chown
他们自己的文件。
答案4
重新启动计算机,在 BIOS 启动后按住 F8 键以调出 GRUB 启动菜单。如果您使用流行的 Linux 发行版之一(例如 Ubuntu),则应该有一个选项可以在恢复模式下启动 Linux(如果您使用 GRUB 2,则该选项可能位于“高级选项”子菜单下)。在恢复模式下启动 Linux,并且(如果您使用流行的发行版)您最终应该会看到一个简短的恢复选项菜单。首先,选择 fsck 恢复选项以读写模式重新安装 / 并在 fstab 中安装所有其他文件系统。然后选择将为您提供 root 提示的选项。由于 shell 以 root 身份登录,因此所有命令都将以 root 身份运行,而无需 sudo 命令。您可以使用它来修复 /usr/bin/sudo 上的权限:
chown root:root /usr/bin/sudo
chmod u+s /usr/bin/sudo
exit
完成此操作后,您可以选择“恢复正常启动”选项(如果没有,只需重新启动计算机)并正常登录,然后使用 sudo 命令修复其余权限。为此,您通常必须从另一台具有“足够接近”权限的计算机复制权限。当我手动安装刚刚使用带有 -a 标志的 rsync 创建的交叉编译器时,我的桌面遇到了这个问题。在我意识到我想将交叉编译器的文件 chown 给 root 而不是我之后,我愚蠢地运行了 chown -R root:root /usr 并意外删除了我的权限。幸运的是,我有一台相同发行版的笔记本电脑,它安装了几乎相同的软件包。我从中复制了权限并在不到一小时的时间内解决了我的权限问题。