为什么我无法在 EC2 Linux 实例上运行 sudo 命令?
上次更新时间:2020 年 3 月 27 日
我在 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例上运行 sudo 命令时,收到了这样的错误:“sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set”或“sudo: /etc/sudoers is world writable”。如何修复此问题?
简短描述
/usr/bin/sudo 文件由非根用户所有时,系统会显示错误:“sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set”。/usr/bin/sudo 文件应该以root:root作为拥有者。
/etc/sudoers 文件具有不正确的权限时,系统会显示错误:“sudo: /etc/sudoers is world writable”。sudoers 文件不得为全局可写文件。如果某个文件为全局可写文件,则表示每个人都可以写入此文件。默认情况下,sudoers 文件的文件模式是 0440。这允许拥有者和组中的任何人读取该文件,但会禁止写入该文件。
您可以在基于 Red Hat 的发行版版本(如 Red Hat、SUSE、CentOS、Amazon Linux 1、Amazon Linux 2 和 RHEL)或基于 Debian 的 Linux 发行版(如 Ubuntu)中,使用用户数据脚本更正这些错误。
解决方法
1.打开 Amazon EC2 控制台,然后选择您的实例。
2. 依次选择操作、实例状态、停止。
注意:如果停止处于禁用状态,则表示要么实例已停止,要么其根设备是一个实例存储卷。
3. 依次选择操作、实例设置、查看/更改用户数据。
4. 复制以下命令并将其粘贴到用户数据字段中,再选择保存。请务必复制完整的脚本内容。粘贴脚本时,不要插入任何额外的空格。
基于 Red Hat 的发行版
对于基于 Red Hat 的发行版,请使用以下用户数据脚本。
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
-
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
rpm --setugids sudo && rpm --setperms sudo
--//
基于 Debian 的发行版
对于基于 Debian 的发行版,请使用以下用户数据脚本。
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
-
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
/bin/chown root:root /usr/bin/sudo
/bin/chmod 4111 /usr/bin/sudo
/bin/chmod 644 /usr/lib/sudo/sudoers.so
/bin/chmod 0440 /etc/sudoers
--//
5. 启动实例,然后使用 SSH 连接到实例。
注意:如果您在编辑 sudoers 文件后,尝试使用 SSH 连接到实例时收到语法错误,请参阅我编辑了 EC2 实例上的 sudoers 文件,可尝试运行 sudo 命令时,收到了语法错误。如何修复此问题?