root 之外:sudo 用户这样建才安全

新建用户、加 sudo 组只是第一步。小够讲 sudo 用户的安全建法:强密码或密钥登录、sudo 免密要不要开、visudo 改配置不翻车、给不同用途建不同用户,告别所有事都用 root 的坏习惯。

我是小够。“别用 root"是安全基线的第一条,但很多人建了个普通用户就完事,sudo 配得一塌糊涂。今天讲 sudo 用户的正确建法——建用户 1 分钟,配安全 10 分钟。

建用户,加组

adduser deploy
usermod -aG sudo deploy

adduser 会交互式让你设密码,密码用密码管理器生成 20 位以上的。-aG 的 a 是追加,千万别漏——漏了 a 会把用户原来的组全清掉。

sudo 要不要免密

/etc/sudoers 里 NOPASSWD 表示 sudo 不用输密码。方便,但风险也明显:任何拿到你 shell 的人直接就是 root。小够的建议:

  • 个人单用户 VPS:可以免密,但前提是 SSH 已经是密钥登录 + 密钥有 passphrase。相当于把"密码"这件事交给了密钥。
  • 多人共用 / 跑业务:不要免密,每次 sudo 都输密码,多一道确认。

改配置必须用 visudo,它会检查语法。sudoers 写错一个字符,sudo 直接罢工,到时候只能去控制台 single user 模式修。

不同用途,不同用户

别一个用户打天下:

  • deploy:日常运维,有 sudo
  • www-data 之类:跑 Web 服务,无 sudo、无登录 shell
  • 临时帮忙的朋友:建个单独用户,事情办完就 userdel 删掉,别共用你的主力账户

用户分开,出问题时查日志能定位到人;删权限时也精准,不影响别人。

登录 shell 的讲究

服务用户不需要登录:

usermod -s /usr/sbin/nologin 服务用户名

连登录都登不了,自然也没法被爆破。这是最小权限原则在用户层面的体现:给每个用户刚好够用的权限,一分不多。

定期清理

cat /etc/passwd | grep -v nologin | grep -v false

看看哪些用户能登录。不认识的、早该删的临时用户,清掉。用户清单和密钥清单一样,定期盘点。

sudo 日志:谁干了什么

sudo 默认会记日志,查得到谁在什么时候提权干了什么:

sudo grep sudo /var/log/auth.log | tail -20

多人共用的服务器,每月看一眼:有没有人在奇怪的时间 sudo、有没有执行奇怪的命令。个人单用户主要是确认"除了我没别人”。日志是事后追溯的唯一依据,别关。

sudo 超时:别让提权一直有效

默认 sudo 输一次密码,15 分钟内不用再输(timestamp_timeout)。公用电脑或合租服务器,可以调短:

Defaults timestamp_timeout=5

加到 /etc/sudoers.d/ 下的新文件里(别直接改 sudoers,用 visudo -f 建独立文件,好管理)。5 分钟不用就失效,人离开座位也不怕。当然,个人电脑设太短会很烦,平衡一下:5-15 分钟之间选。

小够的总结:sudo 用户的精髓是"分权"。root 是核武器,平时锁在保险柜里;日常用配好密钥的 sudo 用户;服务用无登录的专用用户。三层分开,爆破者就算拿到一个普通用户的密码,也离 root 差着好几道坎。