在 Linux 和 Unix 系统管理员中,使用拥有 sudo
权限的用户访问服务器并使用 root
级权限执行命令是非常常见的行为。sudo
用户的使用通常是通过禁止对用户服务器的直接 root
访问来进行的,以防止未经授权的访问。
在本教程中,我们将介绍在 CentOS, Debian 和 FreeBSD 上禁用直接 root
访问,创建 sudo
用户以及设置 sudo
组的基本步骤。
先决条件
- 一台全新安装首选发行版 Linux 的服务器。
- 服务器上安装了 nano, vi, vim, emacs 等任一文本编辑器。
步骤一:安装 sudo
Debian
apt-get install sudo -y
CentOS
yum install sudo -y
FreeBSD
cd /usr/ports/security/sudo/ && make install clean
或者:
pkg install sudo
步骤二:添加 sudo 用户
sudo
用户是 Linux 或 Unix 机器上通用的用户账户。
在 Debian,CentOS,FreeBSD 系统中添加 sudo
用户的命令是相同的:
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
usermod -aG sudo mynewusername
CentOS
usermod -aG wheel mynewusername
FreeBSD
pw group mod wheel -m mynewusername
步骤四:确保 sudoers
文件设置正确
重要的是要确保正确设置其中的 sudoers
文件 /etc/sudoers
,以便 sudo users
有效使用该 sudo
命令。为此,我们将查看其中的内容 /etc/sudoers
并在适用的地方对其进行编辑。
在 Debian,CentOS,FreeBSD 系统中编辑 sudoers
文件的方法是相同的:
vim /etc/sudoers
或者
visudo
注意:visudo
命令将使用系统的默认文本编辑器(通常是 vi 或 vim)打开 /etc/sudoers
文件。
开始预览并编辑下面这一行:
# Allow members of group sudo to execute any command
/etc/sudoers
文件的这一节一般看起来是这样:
# 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
命令:
anotherusername ALL=(ALL) ALL
步骤六:重新开启 SSHD 服务
为了应用对 /etc/sudoers
文件所做的更改,您需要按以下方式重新启动 SSHD 服务器:
Debian
/etc/init.d/sshd restart
CentOS 6
/etc/init.d/sshd restart
CentOS 7
systemctl restart sshd.service
FreeBSD
/etc/rc.d/sshd start
步骤七:测试
在重新开启 SSHD 服务后,注销,然后以 sudo user
身份重新登录,然后尝试执行一些测试命令,如下所示:
sudo uptime
sudo whoami
以下任何命令都将使 sudo user
成为 root
。
sudo su -
sudo -i
sudo -S
注意:
- 与
sudo
结合使用时,该whoami
命令将返回root
。 - 执行
sudo
命令时,系统将提示您输入用户的密码,除非您明确指示系统不提示用户sudo users
输入密码。请注意,这不是推荐的做法。
可选:允许 sudo
不输入用户密码
如前所述,这不是推荐的做法,本教程中包含此内容仅用于演示目的。
为了让你的 sudo user
执行 sudo
命令,而不会提示输入它们的密码,在 /etc/sudoers
文件中接入行中有 NOPASSWD: ALL
后缀,如下:
%sudo ALL=(ALL:ALL) ALL NOPASSWD: ALL
注意:您需要重新启动 SSHD 服务才能应用更改。
步骤八:禁用直接 root 访问
既然您已经确认可以无问题地使用您的 sudo user
,那么现在是最后的第八步,禁用直接 root
访问。
首先,使用您喜欢的文本编辑器打开 /etc/ssh/sshd_config
并找到包含以下字符串的行。它可能以 #
字符为前缀。
PermitRootLogin
无论 /etc/ssh/sshd_config
中的前缀或选项值如何,都需要将该行更改为以下内容:
PermitRootLogin no
最后,重新启动 SSHD 服务。
注意:不要忘记尝试通过 SSH 进入服务器来测试更改 root
。如果您无法执行此操作,则表示您已成功完成所有必要步骤。
版权属于:筱晨’s Blog
本博客所有文章除特别声明外,均采用 知识共享署名 4.0 国际许可协议 许可协议。转载请注明来自 筱晨's Blog!