CentOS8给普通用户免密切换到root:一条命令搞定,再也不用输密码
CentOS8给普通用户免密切换到root:一条命令搞定,再也不用输密码

服务器到手,第一件事就是新建一个日常账号,省得天天拿root裸奔。可每次想装个包、改个配置,还得敲一遍root密码,手速慢点就被同事围观。CentOS8里把普通用户直接抬成“无密码root”,一条sudo规则就能解决,安全又省事,下面直接上步骤。
为啥不建议直接用root登录
root权限太大,手指一抖就能把系统删成光盘。 audit日志里全是root,出事也分不清是谁干的。开普通用户,再配sudo,日志里能精确到UID,追责方便。免密切换并不是把root密码设空,而是让指定账号在指定命令上无需密码,最小权限原则依旧生效。
前置检查:确认系统与账号状态
登录后先id看一眼,确认自己不在root组,避免误会。再sudo -l,如果提示“不在sudoers里”,说明系统还没给你放权,后面步骤才有效。CentOS8默认装的是sudo-1.8.29,老版本语法一样,照抄即可。
步骤一:把用户拉进wheel组

wheel组是CentOS的“准管理员”集合,安装系统时创建的用户通常已经在里面。不确定就执行:
usermod -aG wheel 你的用户名
立即生效无需重启,重新登录后groups能看到wheel即可。
步骤二:编辑sudoers,加一行规则
别直接vi /etc/sudoers,系统自带命令更安全:
visudo

找到下面这行:
%wheel ALL=(ALL) ALL
在下面追加:
%wheel ALL=(ALL) NOPASSWD: ALL
保存退出,visudo会自动检查语法,写错会提示,不怕把sudo弄崩。
步骤三:验证免密切换
退出root,回到普通账号,执行:
sudo -i
如果直接跳进#提示符,说明成功。再试一次:
sudo systemctl restart nginx
依旧不提示密码,日志里能看到USER=你的用户名,责任清晰。
只想让部分命令免密?这样写更细
把NOPASSWD: ALL改成具体命令,例如:
youruser ALL=(root) NOPASSWD: /bin/systemctl, /usr/bin/yum
多条命令用逗号隔开,精确到路径,防止有人利用相对路径提权。
多用户场景:一人一条规则,互不干扰
wheel组统一免密虽然方便,但人多手杂。可以给每个账号单独写规则:
alice ALL=(root) NOPASSWD: /usr/bin/docker
bob ALL=(root) NOPASSWD: /usr/bin/firewall-cmd
visudo里顺序无关,只要别写重,sudo会按匹配到的第一条生效。
远程ssh也能用,但记得关密码登录
免密切换root后,ssh默认仍让root密码登录,等于前门加锁后门敞开。改/etc/ssh/sshd_config:
PermitRootLogin no
PasswordAuthentication no
重启sshd:
sudo systemctl restart sshd
这样只有普通用户能进来,再sudo -i,双层保险。
常见翻车点:语法多空格、路径写错
sudoers文件对空格敏感,NOPASSWD:后面必须有空格,命令路径必须真实存在。写错后sudo会报“syntax error”,连root都救不了,得单用户模式进去改。养成习惯:改完先visudo -c检查,再退出。
安全延伸:加时间戳超时,防止人走茶凉
默认sudo一次授权后,五分钟内不再问密码。可以改成两分钟:
Defaults timestamp_timeout=2
放在sudoers最上方即可。离开座位两分钟,回来再sudo就得重新认证,降低被旁路风险。
一条命令总结
echo 'youruser ALL=(root) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/youruser && sudo chmod 440 /etc/sudoers.d/youruser
单独文件管理,升级系统不覆盖,干净利落。
照着做,CentOS8里普通用户秒变“无密码root”,既省手指又留审计,生产环境也能用。记得定期复查sudoers,人员离职立即清理,权限最小化才是长久之道。
