Linux切换用户的两种实现方式
sudo -su user1 与 su - 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 会更加方便。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SSM项目频繁打成war包部署,使用tomcat和maven实现热部署配置
这篇文章主要介绍了SSM项目频繁打成war包部署操作频繁?使用tomcat和maven实现热部署配置,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-11-11
Ubuntu使用国内源出现Hash Sum mismatch错误的解决
这篇文章主要介绍了Ubuntu使用国内源出现Hash Sum mismatch错误的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-04-04
Linux下高并发socket最大连接数所受的各种限制(详解)
下面小编就为大家带来一篇Linux下高并发socket最大连接数所受的各种限制(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-11-11
Linux系统中的firewall-offline-cmd详解(收藏版)
firewall-offline-cmd 是 firewalld 的一个命令行工具,专门设计用于在没有运行 firewalld 服务的环境中配置防火墙规则,这篇文章主要介绍了Linux系统之firewall-offline-cmd详解,需要的朋友可以参考下2025-06-06


最新评论