Ubuntu启用root账号登录全攻略:从本地到SSH
发布时间:2026/9/28 22:31:52 锦皓数字建站

刚接触Linux那会儿我最爱折腾的就是Ubuntu。装好系统第一件事就是想切到root用户结果输个su -直接报su: Authentication failure一头雾水。后来才明白Ubuntu默认压根就没给root设密码这个设计让很多人刚上手就卡住了。这篇就把“Ubuntu启用root账号并登录”这件事从头到尾拆开讲清楚包括为什么要这样设计、怎么启用、图形界面怎么登录、SSH远程怎么登录、遇到各种报错怎么排查最后再说说我的安全建议。无论你是虚拟机里装Ubuntu练手还是服务器上装了22.04 LTS在生产环境跑服务这篇都能直接用。1. 为什么Ubuntu默认不给你root密码1.1 sudo机制与Ubuntu的设计哲学Debian系的Linux默认安装完都会给你一个能用的普通用户但这个普通用户并不默认知道root的密码。Ubuntu更进一步默认安装阶段压根就不让你设置root密码整个系统的root密码处于“锁定”状态。你在日常操作里看到的sudo本质上是让普通用户临时以root身份执行某条命令是先验证“你本人”的密码而不是root的密码。这套设计叫“最小权限原则”。简单说平时用普通用户干活真要碰系统级配置时再临时提权。好处有两点一是避免你天天用root乱操作把系统搞炸二是所有sudo操作都会记入/var/log/auth.log出了问题追查起来有据可依。发烧友圈子里常说“别用root跑日常”其实就是这个习惯养成的问题。我在生产服务器上踩过的最深坑就是刚学Linux那会儿全程root操作一条rm -rf差点把数据库目录清空。从那之后我养成了习惯能用sudo解决的就不要切root确需root的敲完命令立刻退回来。1.2 什么时候才真正需要启用root不是所有场景都需要开root。比如普通桌面用户装软件、改配置sudo完全够用。但下面这些场景启用root反而能省不少事写自动化脚本需要批量修改系统文件反复sudo会打断流程。排查系统故障时要频繁执行journalctl、ss、iptables等高权限命令每次sudo很烦。某些软件比如磁盘分区工具、内核模块编译工具在图形界面下需要root权限系统不让你用root登录就没法跑。服务器管理场景希望直接用root登录SSH再分权给其他管理员。所以接下来讲的操作不是“必须做”而是一套“按需启用”的完整方案。2. 三步启用root账号实测干货2.1 第一步给root设置一个密码启用root的第一步就是给它设置密码。在终端里执行sudo passwd root系统会先要求你输入当前用户的密码也就是你登录用的那个用户的密码验证通过后提示New password:输入你想设置的root密码再确认一次。看到passwd: password updated successfully就说明设置成功了。这里有个关键点很多教程让你直接执行sudo su -然后passwd root我实测下来其实多此一举。sudo passwd root一步就能完成而且更符合直觉。其实sudo passwd root和sudo su -后执行passwd的底层逻辑一样都是先用sudo拿到提权再用passwd修改root密码但前者少敲一条命令也更直观。设置密码时建议用足够强度的组合比如大小写字母数字符号长度至少12位。别用123456或者root这种后面会讲为什么——开了root登录后这个账号就是公网服务器上被暴力破解的首要目标。2.2 第二步验证root能不能正常切换密码设置成功后先验证一下能不能正常切换。终端执行su -输入刚才设置的root密码如果提示符变成了root主机名:~#就说明本地切换成功。注意这个su -和su的区别带-参数会完整加载root的环境变量工作目录也会切到root的家目录不带-只是切换身份环境变量还保留普通用户的。日常切root建议养成带-的习惯否则有些命令路径不对会报command not found。如果你执行su -时提示su: Authentication failure说明root密码还没设置成功或者输错了密码。这种情况回到2.1重新设置即可。2.3 处理“su: 鉴定令牌操作错误”这个经典报错这是Ubuntu新手最爱遇到的报错之一完整报错一般是su: 鉴定令牌操作错误或者英文版su: Authentication failure。这个报错的根源只有一个你输入的密码不对或者root账号根本没有密码处于锁定状态。排查思路确认是否执行过sudo passwd root没执行过就直接su -必然报这个错。确认输入密码时是否开启了Num Lock终端里输错大小写是常事。检查 /etc/shadow 里root那一行的状态。执行sudo cat /etc/shadow | grep ^root正常设置过密码的root行是root:一串加密hash:...如果看到root:!:...或root:*:...说明root处于锁定状态或没有有效密码。此时重新执行sudo passwd root即可。还有一个隐蔽坑有些人用虚拟机装Ubuntu键盘布局选的英文但物理键盘是中文输入法状态输密码时输入法默认全角密码就一直不对。这个虽然看起来离谱但我在给人远程排查时真的遇见过。3. 让root能登录的三种方式从本地到远程3.1 本地终端和图形界面登录root设置了root密码后本地终端CtrlAltF3之类切到tty输入root用户名和密码就能直接登录。但图形界面GDM登录界面默认是拒绝root登录的只显示普通用户列表你手输root用户名也会被拒。要让图形界面能登录root需要修改GDM的配置。在Ubuntu 22.04上操作如下sudo nano /etc/gdm3/custom.conf在[daemon]段落下加入一行[daemon] WaylandEnablefalse然后修改PAM认证文件sudo nano /etc/pam.d/gdm-password把下面这行注释掉行首加#auth required pam_succeed_if.so user ! root quiet_success保存后重启GDM服务sudo systemctl restart gdm3重启后登录界面就能选择root登录了。注意这里有个重点在22.04默认的Wayland会话下root登录经常黑屏所以上面先把Wayland禁用改成Xorg会话再登录实测成功率会高很多。不过我从个人使用角度建议桌面机上图形界面登录root意义不大日常桌面操作sudo足够了图形界面登录root反而会把家目录、浏览器配置、输入法全搞乱。真正需要root图形界面的场景绝大多数是某个GUI管理工具要求root运行这种情况开个终端sudo 应用名更简单。3.2 SSH远程登录root的配置方法服务器场景下很多人希望直接通过SSH用root登录。默认情况下SSH服务端配置里PermitRootLogin是prohibit-password意思是禁止密码登录root但允许密钥登录。所以你会发现密码明明没错SSH就是用不了root。要改成允许密码登录root编辑SSH配置文件sudo nano /etc/ssh/sshd_config找到PermitRootLogin这一行22.04默认在配置文件里看不到这行因为用的是默认值改成PermitRootLogin yes然后重启SSH服务sudo systemctl restart sshd这里要强烈建议如果是公网服务器PermitRootLogin yes意味着root账号可以直接用密码暴力破解非常危险。我更推荐的做法是改成prohibit-password默认行为然后用SSH密钥登录root。具体步骤是生成本地密钥对把公钥写入服务器root的~/.ssh/authorized_keys再设置PermitRootLogin prohibit-password。我自己管理的服务器就是这么做的root密钥登录 密码登录关闭效果很好。另外sshd_config修改后一定要先执行sudo sshd -t检查配置语法确认没问题再重启否则配置写错了重启后你可能直接把自己锁在门外。3.3 忘记root密码或进不了系统时的自救方法忘记root密码很常见尤其是不常用的服务器。如果系统还能用sudo直接重新设置就行。但如果你连普通用户密码也忘了或者系统启动后卡在登录进不去这时候要用恢复模式重设密码。Ubuntu 22.04在GRUB引导界面按住Shift键或狂按Esc进入GRUB菜单选择“Advanced options for Ubuntu”然后选择recovery mode那一项。进入恢复菜单后选择root - Drop to root shell prompt系统会给你一个root shell无需密码。然后执行mount -o remount,rw / passwd root第一行把根文件系统重新挂载为可写否则你设密码时会报“只读文件系统”错误。第二行设置新的root密码。设置完重启即可。如果GRUB菜单进不去或恢复模式都用不了还有一个更底层的路子在GRUB启动项上按e编辑在Linux那一行末尾追加init/bin/bash然后按CtrlX或F10启动。这会把系统直接引导到一个bash shell用root身份执行mount -o remount,rw / passwd root这个方法在虚拟机环境下特别常用。有热词提到“esxi虚拟机ubuntu忘记root密码 CtrlD输入不了”说的就是这个场景——追加init/bin/bash后系统会提示你输入root密码进入维护模式如果root密码忘了就会一直CtrlD死循环。解决办法就是上面这套直接在bash里用password命令重置密码绕开维护模式的认证环节。有一点要注意这些方法只要能物理接触到机器就能改密码所以物理安全同样重要。别觉得开了root就是万能钥匙机器本体被拿走了什么都不安全。4. 高频问题排查与避坑经验4.1 SSH连不上的典型原因和处理顺序启用root后SSH连接失败是排查频率最高的问题。按下面顺序查基本都能定位确认SSH服务在跑sudo systemctl status sshd。没装的话先sudo apt install openssh-server。确认配置文件语法sudo sshd -t有错误会直接打印出来。确认PermitRootLogin配置生效sudo sshd -T | grep permitrootlogin。这个命令显示运行时实际生效的配置不是文本文件里的内容。如果显示prohibit-password说明你以为改好的配置没生效原因可能是没重启服务或者配置文件改错位置了。看端口是否被防火墙拦了sudo ufw status。UFW默认开启时22端口没放行外部连不上。放行命令sudo ufw allow OpenSSH。最后看日志sudo tail -n 50 /var/log/auth.log里面有Failed password for root或者Connection closed by authenticating user字样能帮你判断是密码错、被拒绝还是IP被封。遇到Connection reset by IP这类瞬间断连的报错通常不是认证问题而是SSH服务崩了或网络层面重置了连接。有个小技巧改SSH配置时先开一个额外的会话保持连接再动配置。改坏了还能用另一个会话回滚避免把自己锁在外面。4.2 sudoers文件损坏的自救方法这个坑说大不大说小能让你整台服务器瞬间失去管理权限。假设你手误把/etc/sudoers改坏了执行任何sudo都会报parse error连重命名文件都做不了。如果你还开着root的shell可以直接改回去但如果当前只有普通用户会话就很尴尬。自救方法还是走恢复模式进recovery shell后用root权限执行visudo -c检查语法然后visudo打开文件修正错误。没有恢复模式可用时就用3.3节的init/bin/bash大法进入bash shell然后mount -o remount,rw /后手工修复/etc/sudoers。这里要记住一条铁律修改sudoers永远用visudo不要用nano或vim直接改。visudo保存时会做语法校验并锁定文件防止并发写入能拦截绝大多数手误。我有个同事当年直接vim /etc/sudoers保存时少写了个括号结果整台测试服务器的所有sudo全挂最后只能重启进单用户模式救回来。4.3 高频问题速查表问题现象根本原因解决方案su: Authentication failureroot未设密码或密码输错执行sudo passwd root重新设置图形界面登录root后黑屏/闪退Wayland会话与root不兼容在/etc/gdm3/custom.conf禁用WaylandSSH提示permission denied密码正确PermitRootLogin是prohibit-password改成yes或用密钥登录修改sshd_config后配置不生效服务未重启或改错文件sudo sshd -t sudo systemctl restart sshdsudo: /etc/sudoers is world writablesudoers权限被改错chmod 440 /etc/sudoers并进恢复模式修复开机后一直CtrlD循环init/bin/bash维护模式直接在这个shell里执行mount -o remount,rw /和passwd看到速查表里sudoers is world writable那条顺带说一下很多人改sudoers时用chmod 777图方便这会直接触发sudo报错拒绝运行。sudoers文件的正确权限是440属主root:root。如果已经改坏了恢复模式下执行chown root:root /etc/sudoers chmod 440 /etc/sudoers这两个命令基本是救命的。5. root账号的安全使用习惯与我的实操经验5.1 安全基线开了root别裸奔启用root登录不是终点安全配置才是关键。我总结了四条自己一直在用的基线策略限制root的SSH来源IP。在/etc/ssh/sshd_config里加AllowUsers root你的办公网IP只允许特定IP登录root。不知道IP就加AllowUsers root192.168.1.*之类网段。公网服务器永远用密钥登录root关闭root密码登录。对普通用户保持密码登录没问题但root必须加密钥。启用fail2ban防止暴力破解。sudo apt install fail2ban后默认就能保护SSH连续失败几次自动封IP。我实测配置简单的环境里攻击日志能减少90%以上。root密码定期更换不要和普通用户密码设置成一样的。如果服务器被入侵了第一件事就是查/var/log/auth.log和last命令看有没有陌生登录记录。有热词提到“更换root密码”日常运维中怀疑密码泄露时执行sudo passwd root换密码是最直接的止损操作。5.2 我的真实体会什么时候用root什么时候回到sudo这几年的运维经验让我总结出一句话root是工具不是身份。日常操作坚持用sudo遇到需要连续执行多条高权限命令时再切root执行完马上exit退回普通用户。这个习惯能在出问题时有效减少误操作范围。有个很实用的折中方案遇到一条命令需要root权限但又不确定会不会有风险可以先sudo -i进入root shell用history记录所有操作出问题时能快速定位哪条命令导致故障。另外如果经常要重复执行一堆root命令别每次sudo直接写成脚本脚本里在关键步骤前后加日志这样比切来切去安全得多。最后再分享一个小技巧Ubuntu 22.04里root密码策略其实默认是过期的你在/etc/shadow里看到root行是root:$6$...:19000:0:99999:7:::第三段字段如果小于当前日期对应的天数系统会提示你修改密码。密码设置完如果长期不用root登录这条链条也不会自己失效但保持定期更新密码是个好习惯。这个字段格式以后有空可以单独写一篇暂时只要记住别把root密码当摆设就行。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。