Loading... <div class="tip share">请注意,本文编写于 1070 天前,最后修改于 424 天前,其中某些信息可能已经过时。</div> 在 Linux 和 Unix 系统管理员中,使用拥有 `sudo` 权限的用户访问服务器并使用 `root` 级权限执行命令是非常常见的行为。`sudo` 用户的使用通常是通过禁止对用户服务器的直接 `root` 访问来进行的,以防止未经授权的访问。 在本教程中,我们将介绍在 CentOS, Debian 和 FreeBSD 上禁用直接 `root` 访问,创建 `sudo` 用户以及设置 `sudo` 组的基本步骤。 **先决条件** * 一台全新安装首选发行版 Linux 的服务器。 * 服务器上安装了 nano, vi, vim, emacs 等任一文本编辑器。 ## 步骤一:安装 sudo #### Debian ```sh apt-get install sudo -y ``` #### CentOS ```sh yum install sudo -y ``` #### FreeBSD ```sh cd /usr/ports/security/sudo/ && make install clean ``` 或者: ```sh pkg install sudo ``` ## 步骤二:添加 sudo 用户 `sudo` 用户是 Linux 或 Unix 机器上通用的用户账户。 在 Debian,CentOS,FreeBSD 系统中添加 `sudo` 用户的命令是相同的: ```sh adduser mynewusername ``` ## 步骤三:添加新用户到 wheel 组(可选的) `wheel` 组是一个用户组,它限制了能够 `su` 到 root 的用户数。将 `sudo` 用户添加到 `wheel` 组中完全是可选的,但是建议这样做。 注意:在 Debian 中,`sudo` 通常会找到而不是 `wheel`。但是,您可以使用 `groupadd` 命令手动添加 `wheel` 组。就本教程而言,我们将在 Debian 使用 `sudo` 组。 ### `wheel` 与 `sudo` 之间的不同 在 CentOS 和 Debian 中,`wheel` 组的用户能执行 `su` 和直接切换到 `root`。同时,`sudo` 用户首先使用 `sudo su`。本质上,除了用于成为 `root` 的语法外,没有什么实际区别,并且属于这两个组的用户都可以使用该 `sudo` 命令。 #### Debian ```sh usermod -aG sudo mynewusername ``` #### CentOS ```sh usermod -aG wheel mynewusername ``` #### FreeBSD ```sh pw group mod wheel -m mynewusername ``` ## 步骤四:确保 `sudoers` 文件设置正确 重要的是要确保正确设置其中的 `sudoers` 文件 `/etc/sudoers`,以便 `sudo users` 有效使用该 `sudo` 命令。为此,我们将查看其中的内容 `/etc/sudoers` 并在适用的地方对其进行编辑。 在 Debian,CentOS,FreeBSD 系统中编辑 `sudoers` 文件的方法是相同的: ```sh vim /etc/sudoers ``` 或者 ```sh visudo ``` 注意:`visudo` 命令将使用系统的默认文本编辑器(通常是 vi 或 vim)打开 `/etc/sudoers` 文件。 开始预览并编辑下面这一行: ```sh # Allow members of group sudo to execute any command ``` `/etc/sudoers` 文件的这一节一般看起来是这样: ```sh # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL ``` 在一些系统,可能发现 `%sudo` 的代替 `%wheel`;在这种情况下,这就是您要开始修改的行。 如果没注释掉 Debian 中的 `%sudo` 或 CentOS 和 FreeBSD 中的 `%wheel` 开头的行(以 `#` 开头),则意味着 `sudo` 已经设置并启用。然后,您可以转到下一步。 ## 步骤五:允许既不属于 `wheel` 也不属于该 `sudo` 组的用户执行 `sudo` 命令 只需将两个用户添加到 `/etc/sudoers` 文件中,就可以允许这两个用户组中的用户执行 `sudo` 命令: ```sh anotherusername ALL=(ALL) ALL ``` ## 步骤六:重新开启 SSHD 服务 为了应用对 `/etc/sudoers` 文件所做的更改,您需要按以下方式重新启动 SSHD 服务器: #### Debian ```sh /etc/init.d/sshd restart ``` #### CentOS 6 ```sh /etc/init.d/sshd restart ``` #### CentOS 7 ```sh systemctl restart sshd.service ``` #### FreeBSD ```sh /etc/rc.d/sshd start ``` ## 步骤七:测试 在重新开启 SSHD 服务后,注销,然后以 `sudo user` 身份重新登录,然后尝试执行一些测试命令,如下所示: ```sh sudo uptime sudo whoami ``` 以下任何命令都将使 `sudo user` 成为 `root`。 ```sh sudo su - sudo -i sudo -S ``` #### 注意: * 与 `sudo` 结合使用时,该 `whoami` 命令将返回 `root`。 * 执行 `sudo` 命令时,系统将提示您输入用户的密码,除非您明确指示系统不提示用户 `sudo users` 输入密码。请注意,这不是推荐的做法。 #### 可选:允许 `sudo` 不输入用户密码 如前所述,这不是推荐的做法,本教程中包含此内容仅用于演示目的。 为了让你的 `sudo user` 执行 `sudo` 命令,而不会提示输入它们的密码,在 `/etc/sudoers` 文件中接入行中有 `NOPASSWD: ALL` 后缀,如下: ```sh %sudo ALL=(ALL:ALL) ALL NOPASSWD: ALL ``` 注意:您需要重新启动 SSHD 服务才能应用更改。 ## 步骤八:禁用直接 root 访问 既然您已经确认可以无问题地使用您的 `sudo user`,那么现在是最后的第八步,禁用直接 `root` 访问。 首先,使用您喜欢的文本编辑器打开 `/etc/ssh/sshd_config` 并找到包含以下字符串的行。它可能以 `#` 字符为前缀。 ```text PermitRootLogin ``` 无论 `/etc/ssh/sshd_config` 中的前缀或选项值如何,都需要将该行更改为以下内容: ```text PermitRootLogin no ``` 最后,重新启动 SSHD 服务。 注意:不要忘记尝试通过 SSH 进入服务器来测试更改 `root`。如果您无法执行此操作,则表示您已成功完成所有必要步骤。 最后修改:2022 年 04 月 04 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 2 如果觉得我的文章对你有用,请随意赞赏