Linux VPS安全配置:替换默认用户的完整指南
为什么要替换默认用户
很多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
最佳实践总结
- 权限完整复制:确保新用户具备原用户的所有必要权限
- 渐进式替换:先禁用后删除,避免系统服务中断
- 多重验证:在不同终端验证新用户的完整功能
- 备用访问:始终保持至少一种备用访问方式
- 配置备份:重要配置修改前必须备份
- 日志监控:定期检查登录和安全日志
通过这套流程,可以显著提升VPS的安全性,同时保持系统功能的完整性。记住:安全性和可用性的平衡是关键,过度的限制可能会影响正常使用。
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果