
新服务器到手,用服务商给的 root
账号和密码或者密钥直接登录,是不是感觉特方便,想干啥干啥,权限拉满?
打住!快停下这种危险的想法!
直接使用 root
用户登录和操作服务器,就像你拿着整个国家核武器库的钥匙到处溜达——权限太大,风险也无限大!
- 手滑即是灾难:
root
用户拥有删除系统任何文件的权力。一个rm -rf
命令敲错路径,或者一个脚本里的 bug,都可能让你辛辛苦苦搭建的环境瞬间灰飞烟灭,连哭都没地方哭去。 - 安全大门敞开: 如果
root
的密码被猜到,或者SSH密钥泄露,攻击者就直接拿到了服务器的最高控制权,可以为所欲为,安装木马、挖矿、窃取数据……后果不堪设想。针对root
用户的暴力破解尝试也是最常见的。 - 操作审计困难: 如果多人共用
root
账号(更不应该!),出了问题很难追溯是谁执行了错误的操作。
那么,正确的姿势是什么呢?
答案是:创建一个普通的、权限较低的用户账号,日常操作都用这个账号登录。当确实需要执行管理员级别的命令时(比如安装软件、修改系统配置、重启服务等),通过 sudo
(Superuser Do) 命令,临时获取并使用管理员权限来执行那条特定的命令。
这样做的好处显而易见:
- 降低误操作风险: 普通用户权限有限,就算敲错命令,破坏范围也小得多。
- 提升安全性: 攻击者即使获取了普通用户的密码/密钥,也无法直接控制整个系统,还需要突破
sudo
的验证(通常是用户密码)。 - 操作可追溯: 系统日志会记录哪个用户通过
sudo
执行了什么命令。
下面就教你怎么一步步创建和配置这样一个 sudo
用户。
Step 1: 创建一个新的普通用户
首先,你需要以 root
用户或者一个已经有 sudo
权限的用户身份登录到你的服务器。
我们推荐使用 adduser
命令,它比 useradd
更友好,会自动处理一些相关的设置(如创建家目录、设置初始用户组等)。
Bash
# 将 <新用户名> 替换为你想要的名字,例如 hostoladmin, john, webmaster 等
sudo adduser <新用户名>
执行后,系统会:
- 创建名为
<新用户名>
的用户和同名的用户组。 - 创建用户的家目录,通常是
/home/<新用户名>
。 - 提示你为这个新用户设置并确认密码。请务必设置一个强密码!
- 询问一些用户的额外信息(Full Name, Room Number 等),这些可以直接按
Enter
跳过。 - 最后确认信息是否正确,按
Y
确认。
Step 2: 赋予新用户 Sudo 管理权限
仅仅创建了用户还不够,我们需要让他能够使用 sudo
命令。这通常通过将用户添加到一个特定的用户组来实现。这个组的名字在不同的Linux发行版中可能不同:
- 在 Ubuntu 和 Debian 系统上,这个组通常叫做
sudo
。 - 在 CentOS, RHEL, Rocky Linux, AlmaLinux 系统上,这个组通常叫做
wheel
。
使用 usermod
命令将你的新用户添加到对应的组:
- Ubuntu/Debian: Bash
sudo usermod -aG sudo <新用户名>
- CentOS/RHEL/Rocky/AlmaLinux: Bash
sudo usermod -aG wheel <新用户名>
参数解释:
usermod
: 修改用户属性的命令。-a
: Append,表示将用户追加到组,而不是覆盖掉他已有的组。-G
: 指定要加入的附加组 (Group)。sudo
或wheel
: 目标用户组名。<新用户名>
: 你刚刚创建的用户名。
注意: 组名是区分大小写的!
Step 3: 测试 Sudo 权限
为了确保配置成功,我们需要验证一下新用户是否真的能用 sudo
了。
- 切换到新用户: Bash
su - <新用户名>
su
是切换用户的命令。-
参数表示在切换用户的同时也加载该用户的环境变量和切换到其家目录,模拟一次真实的登录。- 系统会提示你输入
<新用户名>
的密码。
- 尝试执行一个需要管理员权限的命令: 一个安全的测试命令是查看
/root
目录的内容(普通用户通常没权限看): Bashsudo ls -la /root
- 验证:
- 系统现在应该会提示
[sudo] password for <新用户名>:
,要求你输入你这个新用户的密码(不是root密码)。 - 输入密码(输入时屏幕上不会显示字符,这是正常的)并按回车。
- 如果命令成功执行(显示了
/root
目录的内容),那么恭喜你,sudo
权限配置成功! - 如果提示类似 “
<新用户名>
is not in the sudoers file. This incident will be reported.” 的错误,说明第二步添加用户到组的操作没有成功或者需要重新登录才能生效。
- 系统现在应该会提示
- 返回之前的用户: 测试成功后,输入
exit
命令可以退回到你执行su -
之前的那个用户会话。
Step 4: (强烈推荐) 禁止 Root 用户通过 SSH 登录
既然我们已经有了可以执行管理员任务的 sudo
用户,为了安全起见,最好禁止 root
用户直接通过 SSH 远程登录。
警告: 在执行这一步之前,请务必确认你已经可以通过 <新用户名>
加上 sudo
正常执行所有管理任务,并且 <新用户名>
可以通过SSH(最好是密钥)成功登录!否则你可能会把自己锁在服务器外面!
- 编辑SSH服务配置文件: (需要用
sudo
执行) Bashsudo nano /etc/ssh/sshd_config
- 找到
PermitRootLogin
这一行。 它可能被注释掉了(前面有#
)或者设置为yes
。 - 修改为:
PermitRootLogin no
确保这一行前面没有#
注释符。 - (可选) 检查其他设置: 确保
PubkeyAuthentication yes
(允许密钥登录)是开启的。可以考虑添加AllowUsers <新用户名>
只允许你的新用户登录,但这步不是必须的。 - 保存并关闭文件。
- 检查配置文件语法: Bash
sudo sshd -t
确保没有报错。 - 重启SSH服务: Bash
sudo systemctl restart sshd
完成之后,root
用户就不能再通过SSH直接登录了。所有的远程登录都必须先通过你的普通用户进行,然后再按需使用 sudo
提权,大大提高了服务器的安全性。
看,创建一个拥有 sudo
权限的普通用户,并禁用有风险的 root
直接登录,其实就这么几步。从今天起,就养成使用这个新用户账号登录服务器的好习惯吧!只在运行需要管理员权限的命令时,才在前面加上 sudo
。
这不仅能有效防止因手滑或脚本错误造成的灾难性后果,也能在服务器万一被入侵时,给攻击者增加一道难以逾越的障碍。安全无小事,这简单的几步操作,为你省下的可能是未来无数的麻烦和损失。