// PC530 技术论坛 v1.0
● online 登录 / 注册
返回列表
运维与云原生 #运维

【运维】Linux 服务器实战(2):用户、sudo 与 SSH/fail2ban 安全


Linux 服务器实战 · 第 2 篇
第 1 篇完成初始化后,本篇锁定 账号、sudo、SSH 与暴力破解防护


1. 用户与 sudo(推荐做法)

创建部署用户

sudo adduser deploy
sudo usermod -aG sudo deploy

用 drop-in 文件授权(不要直接改 /etc/sudoers

echo 'deploy ALL=(ALL:ALL) ALL' | sudo tee /etc/sudoers.d/deploy
sudo chmod 440 /etc/sudoers.d/deploy
sudo visudo -c   # 语法检查

查看 / 删除用户

getent passwd deploy
id deploy
sudo deluser --remove-home olduser

2. SSH 密钥登录(推荐)

本地 生成密钥(若还没有):

ssh-keygen -t ed25519 -C "your_email@example.com"

上传公钥到服务器:

ssh-copy-id deploy@YOUR_SERVER_IP

服务器 /etc/ssh/sshd_config 建议(改前先开第二个 SSH 会话测试):

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3

生效:

sudo sshd -t && sudo systemctl reload sshd

3. 登录审计

# 成功登录
last -n 20

# 失败尝试(需 last 命令包)
sudo lastb -n 30

# 实时 SSH 日志
sudo journalctl -u ssh -f
# 或
sudo grep "Failed password" /var/log/auth.log | tail -20

统计失败 IP 次数:

sudo lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head

4. fail2ban 防暴力破解

sudo apt update
sudo apt install -y fail2ban

最小 sshd 监狱(1 小时错 5 次 → 封 4 天,可按需改):

sudo tee /etc/fail2ban/jail.d/sshd.local << 'EOF'
[sshd]
enabled  = true
port     = ssh
filter   = sshd
backend  = systemd
maxretry = 5
findtime = 3600
bantime  = 345600
EOF

sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

查看封禁 IP:

sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 1.2.3.4   # 误封解封

不推荐再用 hosts.deny + cron 扫 auth.log 的老脚本——难维护,fail2ban 是主流方案。


5. 在线用户与会话

who -H
w

踢掉某终端(慎用):

sudo pkill -KILL -t pts/1

6. 改密码

passwd              # 当前用户
sudo passwd deploy  # root/sudo 改他人

常见坑

现象 处理
改 SSH 把自己锁外面 云控制台 VNC;改前保留 PasswordAuthentication yes 直到密钥测通
fail2ban 封了自己 控制台登录 → fail2ban-client set sshd unbanip ...
sudo 报 syntax error visudo -c 检查 /etc/sudoers.d/*

系列导航

主题
1 新服务器初始化 → /forum/13/
2 用户与 SSH 安全(本文)
3 磁盘与 LVM
4 systemd 与 journal
5 网络与 ufw
6 性能监控
7 故障诊断
8 部署与 Cron

本篇速查

sudo tee /etc/sudoers.d/deploy <<< 'deploy ALL=(ALL:ALL) ALL'
sudo apt install -y fail2ban && sudo systemctl enable --now fail2ban
last -n 10 && sudo lastb -n 10