为什么要替换默认用户

很多VPS提供商会创建默认用户(如ubuntu、ggcuser、admin等),虽然方便了初始访问,但也带来了安全风险:

  • 可预测性:默认用户名容易被攻击者猜测
  • 攻击字典:常见于自动化扫描工具的用户名列表中
  • 安全原则:减少可预测的系统信息是基本安全实践

本文将详细介绍如何安全地创建自定义用户,并完全替代默认用户。

操作前的准备工作

环境检查

首先了解当前系统的用户权限结构:

# 检查当前用户信息
whoami
id $(whoami)
groups $(whoami)

记录原用户的所有组权限,这对后续权限复制至关重要。

备用访问确认

确保有其他方式访问服务器:

  • VPS控制面板的VNC/Console功能
  • 确认SSH配置文件的备份位置
  • 记录当前的SSH端口和密钥位置

用户创建和配置

创建新用户

# 切换到root权限
sudo su -

# 创建用户(-m创建家目录,-s指定shell)
useradd -m -s /bin/bash yourusername

# 设置密码(作为备用访问方式)
passwd yourusername

权限复制

重要:新用户必须具备原用户的完整权限,否则可能影响系统操作。

# 复制原用户的所有组权限
# 以常见的组为例:
usermod -aG sudo,adm,cdrom,dip,plugdev,lxd yourusername

# 动态复制的方法(推荐)
original_groups=$(groups originaluser | cut -d: -f2 | tr -d ' ' | tr '\n' ',' | sed 's/originaluser,//')
usermod -aG $original_groups yourusername

# 验证权限复制结果
groups yourusername
groups originaluser

常见组权限说明:

  • sudo/wheel: 管理员权限
  • adm: 系统日志访问权限
  • dip: 网络配置权限
  • plugdev: 可插拔设备权限
  • docker: Docker容器管理权限(如果已安装)

sudo免密配置的发现和处理

重要发现:很多VPS提供商通过cloud-init自动创建sudo免密配置。

# 检查是否存在免密配置
sudo grep -r "NOPASSWD" /etc/sudoers /etc/sudoers.d/ 2>/dev/null

# 常见位置:
sudo cat /etc/sudoers.d/90-cloud-init-users

你可能会看到类似这样的内容:

# Created by cloud-init
# User rules for defaultuser  
defaultuser ALL=(ALL) NOPASSWD:ALL

配置选择

选项1:启用免密sudo(便利性优先)

# 为新用户创建免密配置
echo "yourusername ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/yourusername
sudo chmod 440 /etc/sudoers.d/yourusername

选项2:保持密码验证(安全性优先)

# 不创建免密配置,保持sudo需要密码验证
# 这是更安全的做法,特别是对于生产环境

安全权衡

  • 免密sudo:操作便利,但账户被入侵时风险更大
  • 密码sudo:多一层防护,但日常操作稍显繁琐

SSH密钥配置

# 切换到新用户
su - yourusername

# 创建SSH目录结构
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# 方法1:从原用户复制公钥
sudo cp /home/originaluser/.ssh/authorized_keys ~/.ssh/
sudo chown yourusername:yourusername ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 方法2:手动添加公钥
echo "your-public-key-content" > ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

SSH安全加固

配置文件优化

编辑 /etc/ssh/sshd_config

# 备份原配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

# 关键安全配置
Port your_custom_port              # 自定义端口
PermitRootLogin no                 # 禁止root登录
AllowUsers yourusername            # 用户白名单
PasswordAuthentication no          # 禁用密码认证
PubkeyAuthentication yes           # 启用密钥认证
MaxAuthTries 3                     # 认证尝试限制
ClientAliveInterval 300            # 连接保活设置
ClientAliveCountMax 2
X11Forwarding no                   # 禁用不需要的功能

# 根据需求保留的功能
AllowTcpForwarding yes             # 如需端口转发
PermitTunnel yes                   # 如需隧道功能

配置验证

# 测试配置文件语法
sshd -t

# 重启SSH服务
systemctl restart sshd

# 检查服务状态
systemctl status sshd

新用户验证

连接测试

重要:在关闭当前会话前,必须在新终端验证新用户功能完整性。

# 测试SSH连接
ssh yourusername@server_ip -p your_port

# 验证权限功能
sudo whoami                    # 应该返回root
systemctl status ssh          # 测试服务管理权限
docker ps                     # 测试容器权限(如适用)

原用户访问测试

确认安全配置生效:

# 这些连接都应该被拒绝
ssh originaluser@server_ip -p your_port
ssh root@server_ip -p your_port

原用户处理

进程清理

如果原用户仍有活跃进程,需要安全清理:

# 检查用户进程
sudo ps aux | grep originaluser

# 停止用户级systemd服务
sudo systemctl stop user@$(id -u originaluser).service
sudo loginctl disable-linger originaluser

# 温和终止SSH会话
sudo pkill -SIGTERM -u originaluser bash
sleep 10
sudo pkill -SIGKILL -u originaluser sshd

账户禁用

# 渐进式禁用(推荐)
sudo usermod -s /sbin/nologin originaluser
sudo usermod -L originaluser
sudo chage -E0 originaluser

# 完全删除(确认系统正常后)
# sudo userdel -r originaluser

安全加固建议

防护软件

# 安装fail2ban防暴力破解
sudo apt update && sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 检查防护状态
sudo fail2ban-client status sshd

日志监控

# SSH登录日志
sudo tail -f /var/log/auth.log        # Debian/Ubuntu
sudo tail -f /var/log/secure          # RHEL/CentOS

# 实时连接监控
sudo ss -tlnp | grep :your_ssh_port

常见问题和解决方案

权限不足问题

如果新用户无法执行某些操作:

# 检查缺少的组权限
sudo -u yourusername command_that_fails

# 逐步添加必要的组
sudo usermod -aG groupname yourusername

SSH连接失败

如果新用户无法登录:

# 通过VNC控制台检查
# 1. SSH服务状态
systemctl status sshd

# 2. 配置文件语法
sshd -t

# 3. 用户和密钥权限
ls -la /home/yourusername/.ssh/

防火墙冲突

# 检查防火墙规则
sudo ufw status                      # Ubuntu
sudo iptables -L                     # 通用
sudo firewall-cmd --list-all         # CentOS/RHEL

# 确保SSH端口开放
sudo ufw allow your_ssh_port

最佳实践总结

  1. 权限完整复制:确保新用户具备原用户的所有必要权限
  2. 渐进式替换:先禁用后删除,避免系统服务中断
  3. 多重验证:在不同终端验证新用户的完整功能
  4. 备用访问:始终保持至少一种备用访问方式
  5. 配置备份:重要配置修改前必须备份
  6. 日志监控:定期检查登录和安全日志

通过这套流程,可以显著提升VPS的安全性,同时保持系统功能的完整性。记住:安全性和可用性的平衡是关键,过度的限制可能会影响正常使用