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:日常运维,有 sudowww-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 差着好几道坎。