当前位置: 代码网 > 服务器>服务器>Linux > Linux切换用户的两种实现方式

Linux切换用户的两种实现方式

2025年07月07日 Linux 我要评论
sudo -su user1 与 su - user1 都可以让当前用户切换到 user1 的身份执行命令或进入该用户的交互式 shell。但它们在权限认证方式、环境变量继承和 shell 初始化过程

sudo -su user1su - user1 都可以让当前用户切换到 user1 的身份执行命令或进入该用户的交互式 shell。但它们在权限认证方式、环境变量继承和 shell 初始化过程等方面存在一些差异。

权限认证方式

su - user1

  • su 是 “switch user” 的缩写,默认情况下需要你输入目标用户 (user1) 的密码(如果你当前是非 root 用户)。
  • 如果你是 root 用户执行 su - user1,则无需输入密码。

sudo -su user1

  • sudo 是根据 /etc/sudoers 配置文件来判断是否有权限以 user1 的身份执行命令。
  • 当你使用 sudo -su user1 时,不需要知道 user1 的密码,而是需要当前用户对 sudo 的授权(通常输入当前用户自己的密码,或在无密码配置的 sudo 情况下无需密码)。

环境和 shell 初始化

su - user1

  • -su 会启动一个仿真登录(login shell),类似于 login 用户过程。
  • 这意味着它会读取 user1 的登录 shell 初始化文件(例如 .bash_profile.profile 等),并清空大部分环境变量,用 user1 的默认环境变量替换。
  • 换句话说,是以 user1 完整登录环境启动 shell,会切换到 user1 的主目录,并以 user1 的 shell 配置为准。

sudo -su user1

  • 这里的 sudo -su user1 实际上等价于 sudo -s -u user1-s 选项告诉 sudo 启动一个交互式 shell,但这个 shell 不一定是一个“登录 shell”。
  • sudo 默认会保留调用者的一些环境变量(除非你使用 sudo -i 来模拟登录)。
  • 因此,与 su - user1 相比,sudo -su user1 启动的 shell 环境更接近原先用户的环境,而不是完全清空和重新载入 user1 的登录配置。

总结对比

认证方式

  • su - user1:需要 user1 的密码(除非当前是 root)。
  • sudo -su user1:需要当前用户在 sudoers 中有权限,以自身认证方式(当前用户密码或无密码sudo)切换,无需 user1 的密码。

环境初始化

  • su - user1:像登录 user1 一样初始化 shell 环境,清空并使用 user1 的环境变量和启动文件。
  • sudo -su user1:以 sudo 的方式切换用户,但不完全模拟登录,会保留一些原用户环境变量,shell 初始化不如 su - user1 的完整。

如果你的目标是完全以 user1 的身份和环境进入新 shell(包括环境变量、主目录、初始化文件等),su - user1 更接近一个“干净”的登录环境。

如果只是需要以 user1 的权限执行命令且无需 user1 的密码,那么使用 sudo -su user1 会更加方便。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com