# Common scripts

common

### 免 sudo 密码

**原则：** 永远用 `visudo` 编辑配置文件（自动校验语法，错误不会保存）。

**方法一：完整 sudo 免密（不推荐用于生产服务器）**

```bash
sudo visudo -f /etc/sudoers.d/dont-prompt-$USER-for-sudo-password
# 添加一行：
username ALL=(ALL) NOPASSWD: ALL
```

**方法二：限制到特定命令（推荐）**

```bash
sudo visudo -f /etc/sudoers.d/docker-user
# 仅 docker 相关命令免密：
username ALL=(ALL) NOPASSWD: /usr/bin/docker, /usr/bin/docker-compose
```

**方法三：使用 Cmnd_Alias 分组管理**

```bash
sudo visudo -f /etc/sudoers.d/deploy
Cmnd_Alias DEPLOY_CMDS = /usr/bin/systemctl restart nginx, \
                          /usr/bin/systemctl reload nginx, \
                          /opt/deploy/deploy.sh
%deploy ALL=(ALL) NOPASSWD: DEPLOY_CMDS
```

**验证命令：**

```bash
sudo -l                   # 查看当前用户可执行的 sudo 命令
sudo -l -U username       # 查看指定用户
sudo -l | grep NOPASSWD   # 查看哪些命令已配置免密
ls -la /etc/sudoers.d/    # 列出所有配置文件
```

**安全注意事项：**
- 避免给面向公网的 SSH 账号设置完整 NOPASSWD
- 尽量限制到具体命令路径，而非通配 ALL
- 对可能被 shell escape 的命令，考虑加 NOEXEC 选项
- sudo 日志默认通过 syslog 记录，可用 `journalctl | grep sudo` 查看

来源: [How to Configure Sudo Access Without a Password on Ubuntu](https://oneuptime.com/blog/post/2026-03-02-how-to-configure-sudo-access-without-a-password-on-ubuntu/view)


相关：[[keep-my-ssh-keys-safe|keep-my-ssh-keys-safe]]
