【运维】Linux 服务器实战(2):用户、sudo 与 SSH/fail2ban 安全
Linux 服务器实战 · 第 2 篇
第 1 篇完成初始化后,本篇锁定 账号、sudo、SSH 与暴力破解防护。
1. 用户与 sudo(推荐做法)
创建部署用户
sudo adduser deploy
sudo usermod -aG sudo deploy
### 用 drop-in 文件授权(不要直接改 `/etc/sudoers`)
```bash
echo 'deploy ALL=(ALL:ALL) ALL' | sudo tee /etc/sudoers.d/deploy
sudo chmod 440 /etc/sudoers.d/deploy
sudo visudo -c # 语法检查
### 查看 / 删除用户
```bash
getent passwd deploy
id deploy
sudo deluser --remove-home olduser
---
## 2. SSH 密钥登录(推荐)
**本地** 生成密钥(若还没有):
```bash
ssh-keygen -t ed25519 -C "your_email@example.com"
上传公钥到服务器:
```bash
ssh-copy-id deploy@YOUR_SERVER_IP
**服务器** `/etc/ssh/sshd_config` 建议(改前先开第二个 SSH 会话测试):
```text
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
生效:
```bash
sudo sshd -t && sudo systemctl reload sshd
---
## 3. 登录审计
```bash
# 成功登录
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 次数:
```bash
sudo lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head
---
## 4. fail2ban 防暴力破解
```bash
sudo apt update
sudo apt install -y fail2ban
最小 sshd 监狱(1 小时错 5 次 → 封 4 天,可按需改):
```bash
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:
```bash
sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 1.2.3.4 # 误封解封
> 不推荐再用 `hosts.deny` + cron 扫 auth.log 的老脚本——难维护,fail2ban 是主流方案。
---
## 5. 在线用户与会话
```bash
who -H
w
踢掉某终端(慎用):
```bash
sudo pkill -KILL -t pts/1
---
## 6. 改密码
```bash
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 |
---
## 本篇速查
```bash
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
```