# ubuntu18.04配置账户认证失败次数限制-高风险

这是 \*\*高风险操作\*\*——PAM 配置写错会导致所有用户（含 root）无法登录，包括 SSH。下面给出 Ubuntu 18.04 上的正确做法和风险防控。

\## 重要修正：Ubuntu 18.04 应使用 pam\_tally2.so

你给的说明里写"高版本使用 pam\_faillock.so"，但 \*\*Ubuntu 18.04 的 libpam 版本是 1.1.8，并不包含 pam\_faillock\*\*（该模块需 libpam ≥ 1.4.0，Ubuntu 20.04+ 才有）。而 `pam\_tally.so` 在 Ubuntu 18.04 中虽仍可用但已废弃。

\*\*Ubuntu 18.04 正确选择是 `pam\_tally2.so`。\*\*

\## 操作步骤

\### Step 0：先备份（必做）

```bash  
sudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth.bak.$(date +%F)  
sudo cp /etc/pam.d/common-account /etc/pam.d/common-account.bak.$(date +%F)  
```

\### Step 1：编辑 /etc/pam.d/common-auth

```bash  
sudo vi /etc/pam.d/common-auth  
```

找到 `auth` 开头的行区域，在靠近顶部（`pam\_unix.so` 之前）添加一行：

```bash  
auth required pam\_tally2.so deny=5 unlock\_time=600 even\_deny\_root audit  
```

保存退出（`Esc` → `:wq`）。

参数说明：  
| 参数 | 含义 |  
|------|------|  
| `deny=5` | 连续失败 5 次锁定 |  
| `unlock\_time=600` | 锁定 600 秒后自动解锁 |  
| `even\_deny\_root` | root 也受限制（可选，按需） |  
| `audit` | 失败事件写入 audit 日志 |

\### Step 2：编辑 /etc/pam.d/common-account

```bash  
sudo vi /etc/pam.d/common-account  
```

在 `account` 区域添加：

```bash  
account required pam\_tally2.so  
```

保存退出。

\### Step 3：重启相关服务 / 不重启直接验证

PAM 配置无需重启服务即对新登录会话生效。

\## ⚠️ 风险点

1\. \*\*最高风险：配置语法错误 → 全员无法登录\*\*  
\- 多一个空格、写错模块名、行顺序错误都可能导致 PAM 拒绝认证。  
\- 典型错误：`pam\_tally2.so` 写成 `pam\_tally.so` 而模块实际不存在；或把 `auth` 行放到 `pam\_unix.so` 之后导致计数不生效。

2\. \*\*even\_deny\_root 风险：root 被锁后无法用 sudo 解锁\*\*  
\- 若 root 也被锁，且 unlock\_time 内无法登录，需要进入单用户模式。

3\. \*\*SSH 现有连接不受影响，但新连接会受策略约束\*\*  
\- 配置时务必保持当前 SSH 会话不断开。

4\. \*\*unlock\_time 到期前无法登录\*\*，影响运维响应。

\## 验证方法（不要断开当前 SSH）

\*\*新开一个终端\*\*测试，原会话保持不动：

```bash  
\# 故意用错误密码登录 5 次  
ssh testuser@localhost

\# 查看锁定状态  
sudo pam\_tally2 --user=testuser

\# 手动解锁（如果需要）  
sudo pam\_tally2 --user=testuser --reset  
```

如果新会话正常，再用一个普通用户测一次错误密码锁定 → 等待解锁 → 正常登录，确认策略生效。

\## 如果配置出错导致无法登录：单用户模式恢复

1\. 重启服务器，GRUB 菜单按 `e`  
2\. 找到 `linux` 行，末尾追加：  
 ```  
 init=/bin/bash  
 ```  
3\. `Ctrl+X` 启动进入单用户 shell  
4\. 重新挂载根目录可写：  
 ```bash  
 mount -o remount,rw /  
 ```  
5\. 恢复备份：  
 ```bash  
 cp /etc/pam.d/common-auth.bak.&lt;日期&gt; /etc/pam.d/common-auth  
 cp /etc/pam.d/common-account.bak.&lt;日期&gt; /etc/pam.d/common-account  
 ```  
6\. 重启：  
 ```bash  
 sync  
 reboot -f  
 ```

\## 建议的安全做法

\- \*\*先在测试机验证\*\*，再推到生产。  
\- 配置前 \*\*保留至少一个已登录的 root SSH 会话\*\* 不要关闭。  
\- 备份文件命名带日期，方便回滚。  
\- 如果不要求 root 也受锁定，\*\*去掉 `even\_deny\_root`\*\*，保留 root 作为应急通道。