当前位置: 首页 > news >正文

Linux 切换用户的两种方法

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

权限认证方式

  1. su - user1

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

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

环境和 Shell 初始化

  1. su - user1

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

http://www.lryc.cn/news/501396.html

相关文章:

  • Spring Boot 3 中Bean的配置和实例化详解
  • Vue实现留言板(实现增删改查)注意:自己引入Vue.js哦
  • IDEA创建Spring Boot项目配置阿里云Spring Initializr Server URL【详细教程-轻松学会】
  • 读取电视剧MP4视频的每一帧,检测出现的每一个人脸并保存
  • HTML前端开发-- Iconfont 矢量图库使用简介
  • 使用Allure作为测试报告生成器(Java+Selenium)
  • RocketMQ面试题合集
  • Qt初识_对象树
  • axios的get和post请求,关于携带参数相关的讲解一下
  • Vue前端开发-路由其他配置
  • 框架建设实战7——定时任务组件
  • mybatis 整合 ehcache
  • 【PlantUML系列】用例图(三)
  • 发送请求时遇到了数据库完整性约束错误 1048 Column ‘platform‘ cannot be null
  • 三菱FX3U模拟量产品的介绍
  • pdf转图片
  • Go 协程上下文切换的代价
  • HTTP 持久连接(长连接)
  • 12月10日IO
  • Composite Pattern
  • Springboot MVC
  • MySQL数据表记录增操作
  • maven报错“找不到符号“
  • python进阶-05-利用Selenium来实现动态爬虫
  • P1226 【模板】快速幂
  • 【C++】求第二大的数详细解析
  • 从零开始学TiDB(3)TiKV 持久化机制
  • Elasticsearch+Kibana+IK分词器+拼音分词器安装
  • 子网划分实例
  • 上海亚商投顾:创业板指震荡调整 机器人概念股再度爆发