导读:本期聚焦于兔子创作的《Ubuntu中su切换用户操作方法详解:su与sudo有什么区别?》,敬请观看详情。在Ubuntu系统里切换用户是每个使用者迟早会遇到的操作,su命令就是完成这件事的核心工具。不过不少刚接触Linux的朋友会发现,在Ubuntu里直接输入su提示认证失败,这是因为Ubuntu默认禁用了root账户的登录密码。本文将围绕su命令的用法展开,详细介绍su和su -的区别、如何设置root密码解除限制、如何在普通用户之间互相切换,并对比su与sudo两条路线的设计思路和适用场景,最后补充切换失败的常见排查方法,帮助你彻底掌握Ubuntu下的用户切换操作。

su是Linux系统里最经典的用户切换命令,名字来源于英文switch user的缩写。在Ubuntu中使用它时,很多人第一步就卡住了:明明装系统时设置过密码,为什么输入su后提示Authentication failure?这其实不是命令用错了,而是Ubuntu出于安全考虑默认锁定了root账户。本文将从su的基本用法讲起,逐步展开Ubuntu下的特殊处理方式以及常见问题的排查思路。

Ubuntu中su切换用户操作方法详解:su与sudo有什么区别?

su命令的基本用法与参数说明

su命令的标准格式是su [选项] [用户名]。如果只输入su不跟用户名,系统默认你要切换到root账户,此时会提示输入目标用户的密码。切换成功后,命令提示符会从$变成#,这是root身份最直观的标志。

这里有一个非常关键但容易被忽略的细节:susu -的行为并不相同。直接执行su只是切换了用户身份,但保留了原用户的大部分环境变量,比如当前工作目录、PATH设置等。而执行su -(等价于su -l,即login模式)会模拟一次完整的登录过程,重新加载目标用户的profile文件,把工作目录切换到目标用户的home目录,环境变量也会全部按目标用户初始化。

# 只切换身份,保留当前环境
su
# 完整登录方式切换,加载root的环境配置
su -
# 切换到指定用户,需要输入该用户的密码
su - username
# 切换后验证当前身份
whoami
echo $HOME

实际使用中推荐始终带上-参数。举个典型的坑:有些用户用su切换到root后执行某些管理命令,提示command not found,原因就是root的PATH没有加载,/sbin和/usr/sbin目录不在搜索路径里,改用su -就能解决。

Ubuntu下su认证失败的解决方法

前面提到,Ubuntu安装过程中只让你创建了普通用户,root账户没有设置密码,处于锁定状态。在锁定状态下,无论输入什么密码都无法通过su的认证,这是PAM模块的正常行为而不是密码错误。

解决办法很简单,用普通用户的sudo权限给root设置一个密码:

# 先用sudo执行passwd命令给root设置密码
sudo passwd root
# 按提示两次输入新密码,看到提示更新成功即可
# 之后就可以正常使用su切换到root
su -

设置完成后,su切换root就和传统Linux发行版的体验一致了。如果出于安全考虑不想长期开放root登录,可以用sudo passwd -l root重新锁定root账户,锁定后su又会回到认证失败的状态。

另外还有一种临时切换的方式值得了解:执行sudo su -可以直接从普通用户跳到root环境,整个过程只需要输入自己的密码,不需要root密码。这在root未设置密码的场景下特别实用,本质上是借用了sudo的授权机制。

su与sudo的区别及选择建议

既然有sudo,为什么还要用su?两者的核心差异在于认证对象和权限模型。su需要输入目标用户的密码,切换后获得目标用户的完整身份,直到执行exit退出;sudo需要输入当前用户自己的密码,授权范围由/etc/sudoers文件控制,通常是单条命令的临时提权,执行完毕自动回到普通权限。

从审计角度看,sudo的设计更安全。每个sudo操作都会记录是谁在什么时间执行了什么命令,而su切换到root之后,系统层面很难区分具体是哪个物理用户在操作。多人共管的服务器上,这一点尤其重要。

对比项susudo
需要的密码目标用户密码当前用户自己的密码
权限持续时间切换后持续到exit单条命令级别,可缓存一段时间
权限控制粒度全有或全无可在sudoers中细化到具体命令
操作日志不易区分实际操作者详细记录用户与命令

实践建议是:日常临时操作优先用sudo,比如安装软件、修改系统配置;只有在需要进行一整套连续管理操作、频繁提权嫌麻烦时,再考虑sudo su -进入完整的root环境,用完及时退出。

切换失败常见问题排查

除了root密码锁定问题,su还可能出现其他报错。比较常见的有提示user does not exist,这多半是用户名拼写错误,可以先用cat /etc/passwd确认系统中实际存在的用户名。注意/etc/passwd里的第一个字段才是登录名。

如果提示This account is currently not available,说明目标账户的shell被设置为/sbin/nologin或/usr/sbin/nologin,这类账户通常是系统服务账户,禁止交互登录。可以查看grep username /etc/passwd最后一列确认。确实需要用它登录的话,可以修改shell,但一般不建议改动服务账户。

# 查看用户的shell设置
grep testuser /etc/passwd
# 将shell改为bash(需要root权限)
sudo usermod -s /bin/bash testuser

还有一种情况是提示pam_authenticate: Authentication failure,输入密码确认没错却反复失败。此时可以检查/etc/pam.d/su配置文件,有些发行版默认启用了pam_wheel模块,要求执行su的用户必须属于wheel组才能切换到root。Ubuntu默认没有这个限制,但如果系统被加固过,可以用usermod -aG wheel 用户名把自己加入wheel组后再试。

掌握su命令的关键在于理解它只是身份切换的入口,真正的行为取决于环境加载方式和账户状态。把su -sudo passwd rootsudo su -这几个高频用法记熟,再结合sudo的授权模型灵活选择,Ubuntu下的用户切换基本就不会再遇到障碍了。

Ubuntu su切换用户su命令sudo命令修改时间:2026-09-04 21:44:35

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260904/50498.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。