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

 更新时间:2025年07月07日 09:04:24   作者:言之。  
这篇文章主要介绍了Linux切换用户的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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 会更加方便。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • linux用户与用户组配置文件的使用及说明

    linux用户与用户组配置文件的使用及说明

    这篇文章主要介绍了linux用户与用户组配置文件的使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • Linux包管理工具yum、apt的区别

    Linux包管理工具yum、apt的区别

    Linux系统基本分两大类:RedHat系列:Redhat、Centos、Fedora等;Debian系列:Debian、Ubuntu 等。yum是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。apt是一个在 Debian 和Ubuntu中的Shell前端软件包管理器。
    2023-04-04
  • CentOS设置上网代理全过程

    CentOS设置上网代理全过程

    该文章详细介绍了在CentOS 7.0系统上设置代理服务器的过程,包括设置全局代理、yum代理、wget代理以及配置Docker HTTP代理的步骤
    2025-12-12
  • Linux流媒体服务器部署流程

    Linux流媒体服务器部署流程

    文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建
    2025-02-02
  • SSM项目频繁打成war包部署,使用tomcat和maven实现热部署配置

    SSM项目频繁打成war包部署,使用tomcat和maven实现热部署配置

    这篇文章主要介绍了SSM项目频繁打成war包部署操作频繁?使用tomcat和maven实现热部署配置,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • SCP从Linux快速下载文件到Windows本地过程

    SCP从Linux快速下载文件到Windows本地过程

    通过在Windows上使用Git Bash来快速下载大文件,可以避免使用MobaXterm拖动文件速度慢的问题,只需进入文件夹右键选择Git Bash Here,然后使用命令行下载文件,这种方法不仅提高了下载速度,还使本地文件路径遵循Linux规范
    2025-11-11
  • Ubuntu使用国内源出现Hash Sum mismatch错误的解决

    Ubuntu使用国内源出现Hash Sum mismatch错误的解决

    这篇文章主要介绍了Ubuntu使用国内源出现Hash Sum mismatch错误的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Linux下高并发socket最大连接数所受的各种限制(详解)

    Linux下高并发socket最大连接数所受的各种限制(详解)

    下面小编就为大家带来一篇Linux下高并发socket最大连接数所受的各种限制(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Centos系统更改root账户用户名的详细步骤

    Centos系统更改root账户用户名的详细步骤

    在CentOS系统中,更改root账户的用户名是一项非常敏感且需谨慎操作的任务,更改后,系统的超级管理员账户将不再是root,而是新的用户名,本文介绍了更改root用户名的详细步骤,需要的朋友可以参考下
    2025-12-12
  • Linux系统中的firewall-offline-cmd详解(收藏版)

    Linux系统中的firewall-offline-cmd详解(收藏版)

    firewall-offline-cmd 是 firewalld 的一个命令行工具,专门设计用于在没有运行 firewalld 服务的环境中配置防火墙规则,这篇文章主要介绍了Linux系统之firewall-offline-cmd详解,需要的朋友可以参考下
    2025-06-06

最新评论