Linux:用户切换指令su

 相关文章

Linux专栏icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12234591.html


        su是一个常用的用户切换命令, 用于在不同的用户身份之间切换,下面是它的用法。

用法:
su [-] [-lmpVh] [-s shell] [-c command] [-w list] [username]
选项:
-  以login-shell的方式新建一个shell并切换到指定用户,当用户名未指定时,切换至root用户
-l 与-类似,但此时必须指定用户名
-m、-p 以环境保护即non-login shell的方式新建一个shell并切换到指定用户,当用户名未指定时,切换至root用户,如果指定了-或-l选项,则此选项被忽略
-s shell 指定shell的路径
-c command 将command传递给新建的shell执行
-V 打印版本
-h 打印帮助信息
-w list 指定在以login-shell切换时的环境变量白名单,名单内的环境变量以逗号分隔,名单内的环境变量不会被复位(对HOME、SHELL、USER、LOGNAME、PATH无效)

         当没有指定username时,su命令默认将root当做username。su命令默认不切换工作目录到目标用户的家目录,只继承原进程的全部环境变量并改变环境变量$HOME和$SHELL(如果目标用户不是root,则再加上$USER和$LOGNAME),是一种non-login shell的登录方式,这会导致很多重要的环境变量并未改变,比如$PATH。

zhangchen@zhangchen-virtual-machine:~$ su root 
Password:         //需要输入密码
root@zhangchen-virtual-machine:/home/zhangchen# id 
uid=0(root) gid=0(root) groups=0(root)   //确实切换成功
root@zhangchen-virtual-machine:/home/zhangchen# echo $HOME $SHELL $USER $LOGNAME
/root /bin/bash zhangchen zhangchen      //$HOME、$SHELL改变了,而$USER、$LOGNAME不改变
root@zhangchen-virtual-machine:/home/zhangchen# su zhangchen //root切换到其他用户无需输入密码
zhangchen@zhangchen-virtual-machine:~$ echo $HOME $SHELL $USER $LOGNAME
/home/zhangchen /bin/bash zhangchen zhangchen  //$HOME、$SHELL、$USER、$LOGNAME都改变

        -和-l选项以login-shell的方式新建一个shell并切换到指定用户,会进行以下操作:1、清除所有环境变量,除了$TERM以及-w白名单指定的环境变量。2、初始化环境变量$HOME、$SHELL、$USER、$LOGNAME和$PATH。3、切换当前工作目录至目标用户的家目录。4、设置shell的argv[0]为‘-’使这个shell是login-shell。

        需要注意的是,login-shell不仅仅会初始化这五个环境变量,而且会读取配置文件,从而模拟一次真实的用户登录,比如对于bash shell,会读取.bashrc中的配置。

        -m和-p选项用于以环境保护的non-login shell的形式切换用户,这比默认情况下的行为还要保守,它甚至不会切换$HOME、$SHELL、$USER和$LOGNAME。在指定了-或-l选项后,此选项会被忽略。

root@zhangchen-virtual-machine:~# echo $HOME $SHELL $USER $LOGNAME
/root /bin/bash root root
root@zhangchen-virtual-machine:~# su -m zhangchen
zhangchen@zhangchen-virtual-machine:~$ echo $HOME $SHELL $USER $LOGNAME
/root /bin/bash root root

        -s shell选项用于创建指定的shell而不是使用默认shell,这里要说明的是,一个用户的默认登录shell可以在/etc/passwd中找到。有一种情况是,一个用户的默认登录shell被指定为nologin,这会导致用户无法以此shell登录,这时候可以使用指定的shell登录。

root@zhangchen-virtual-machine:/home/zhang# chsh -s /usr/sbin/nologin zhang
root@zhangchen-virtual-machine:/home/zhang# tail /etc/passwd
****
zhang:x:1001:1001:,,,:/home/zhang:/usr/sbin/nologin
root@zhangchen-virtual-machine:/home/zhang# su zhang
This account is currently not available.
root@zhangchen-virtual-machine:/home/zhang# su -s /bin/bash zhang
zhang@zhangchen-virtual-machine:~$ 

        -c command选项用于将一个命令(可含选项)传递给新建的shell,并以目标用户的身份执行,执行完毕后退出目标用户的shell,返回原shell。注意-c选项只能有一个参数,所以如果需要传递有选项的命令,需要使用\转义空格或者将命令与选项使用引号包围。

zhangchen@zhangchen-virtual-machine:~$ su -c "echo 111" zhang  \\或者su -c echo\ 111 zhang
Password: 
111
zhangchen@zhangchen-virtual-machine:~$ 

        -w list选项是配合-l选项使用的,list中的环境变量在使用login-shell的方式时,将不会被清除,但是需要注意的是,这对$HOME、$SHELL、$USER、$LOGNAME和$PATH无效。

zhangchen@zhangchen-virtual-machine:~$ export VARIABLE=test
zhangchen@zhangchen-virtual-machine:~$ echo $VARIABLE
test
zhangchen@zhangchen-virtual-machine:~$ su -l zhangchen
Password: 
zhangchen@zhangchen-virtual-machine:~$ echo $VARIABLEzhangchen@zhangchen-virtual-machine:~$ exit
logout
zhangchen@zhangchen-virtual-machine:~$ echo $VARIABLE
test
zhangchen@zhangchen-virtual-machine:~$ su -l -w VARIABLE zhangchen
Password: 
zhangchen@zhangchen-virtual-machine:~$ echo $VARIABLE
test

        从上面的代码中我们还可以知道,使用exit能退出新建的bash并返回之前的bash。 

        


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络协议测试】畸形数据包——圣诞树攻击(DOS攻击)

简介 TCP所有标志位被设置为1的数据包被称为圣诞树数据包(XMas Tree packet),之所以叫这个名是因为这些标志位就像圣诞树上灯一样全部被点亮。 标志位介绍 TCP报文格式: 控制标志(Control Bits)共6个bi…

淘宝扭蛋机小程序:新时代的互动营销与娱乐体验

随着科技的快速发展,小程序已经成为人们日常生活中不可或缺的一部分。在众多的小程序中,淘宝扭蛋机小程序以其独特的互动性和趣味性,吸引了大量用户。本文将深入探讨淘宝扭蛋机小程序的特色、用户体验以及未来发展。 一、淘宝扭蛋机小程序的…

API网关-Apisix RPM包方式自动化安装配置教程

文章目录 前言一、简介1. etcd简介2. APISIX简介3. apisix-dashboard简介 二、Apisix安装教程1. 复制脚本2. 增加执行权限3. 执行脚本4. 浏览器访问5. 卸载Apisix 三、命令1. Apisix命令1.1 启动apisix服务1.2 停止apisix服务1.3 优雅地停止apisix服务1.4 重启apisix服务1.5 重…

jenkins发布失败

今天用jenkins发布项目时失败了,而前几天还好好的。 云控制台看了下,发现根本就没打包。 报错如下: 从控制台可以看出,项目依赖没有下载下来,所以打包失败了。 根本原因是:在配置中给yarn指定的淘宝仓库…

python爬虫采集下载中国知网《出版来源导航》论文文献下载_PDF文档_数据采集知网爬虫论文Python3

时隔一年,很久没更新博客了。今天给大家带来一个python3采集中国知网 :出版来源导航 这个是网址是中国知网的,以下代码仅限于此URL(出版来源导航)采集,知网的其他网页路径采集不一定行,大家可以…

活字格V9获取图片失败bug,报错404,了解存储路径,已改为批量上传和批量获取

项目场景: 问题描述 原因分析: 解决方案: 完成了批量上传功能,这插件真的很方便 于是写了个批量获取附件的js代码,我真厉害 项目场景: 活字格V9版本获取图片链接Upload 【9.0.103.0】图片上传的存储路…

操作系统(4)---虚拟机

虚拟机又叫虚拟机管理程序或者虚拟机监控程序(Virtual Machine Monitor/Hypervisor,VMM),使用虚拟化技术,将一台物理机器虚拟化为多台虚拟机器 (Virtual Machine,VM),每个虚拟机器都可以独立运行一个操作系…

C语言中各种类型指针所能访问的字节

其实学习语言的最简单的方法就是学习代码&#xff0c;所以下面来看一段代码就明白了&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int a 0x11223344;int* pa &a;char* pc &a;double* pd &a;printf("%p\n", …

TiDB中Table映射到KV

TiDB 对每个表分配一个 TableID&#xff0c;每一个索引都会分配一个 IndexID&#xff0c;每一行分配一个 RowID&#xff08;如果表有整数型的 Primary Key&#xff0c;那么会用 Primary Key 的值当做 RowID&#xff09;&#xff0c;其中 TableID 在整个集群内唯一&#xff0c;I…

数据结构——链式二叉树(2)

目录 &#x1f341;一、二叉树的销毁 &#x1f341;二、在二叉树中查找某个数&#xff0c;并返回该结点 &#x1f341;三、LeetCode——检查两棵二叉树是否相等 &#x1f315;&#xff08;一&#xff09;、题目链接&#xff1a;100. 相同的树 - 力扣&#xff08;LeetCode&a…

《动手学深度学习(PyTorch版)》笔记3.3

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

【干货】【常用电子元器件介绍】【电阻】(二)--敏感电阻器

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。   电子电路中除了采用普通电阻器外&#xff0c;还有一些敏感电阻器&#xff08;如热敏电阻器、压敏电阻器、光敏电阻器等&#xff09;也被广泛地应用。然而…

C# 使用 SapNwRfc 调用SAP RFC

好久没写过相关代码&#xff0c;今天又来贡献一篇 C# 使用 SapNwRfc 调用SAP RFC。用VS2022的WINFORM应用程序&#xff0c;使用NuGet中的SapNwRfc类库&#xff0c;call SAP系统中的RFC&#xff0c;传入7个参数&#xff0c;得到RFC返回的2张表的数据。 一、VS2022中新建WINFORM…

Nodejs前端学习Day1_补档

我给day1搞没了&#xff0c;还是觉得该补一个&#xff0c;有用 文章目录 前言一、学习目标二、学习目录三、为什么JavaScript代码可以在浏览器中运行四、为什么JavaScript可以操作DOM和BOM五、浏览器中的JavaScript运行环境总结 前言 补档 一、学习目标 二、学习目录 三、为什…

CentOS 7 上使用 wget 安装 Nginx 并设置开机自启

在 CentOS 7 上使用 wget 安装 Nginx 并设置开机自启&#xff0c;你可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;确保你已经以 root 用户或者具有 sudo 权限的用户身份登录到 CentOS 7。 安装 Nginx 所需的依赖包。在终端中运行以下命令&#xff1a; sudo yum inst…

RustDesk私有化部署,自建远程桌面搭建教程

以linux操作系统为例&#xff1a; 解压安装 # 使用wget进行下载1.1.8-2版本&#xff08;最新版本可以看上述发布地址&#xff09; wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.8-2/rustdesk-server-linux-amd64.zip # 使用unzip解压 unzip rust…

Hive3.1.3基础

参考B站尚硅谷 目录 什么是HiveHive架构原理 Hive安装Hive安装地址Hive安装部署安装Hive启动并使用Hive MySQL安装安装MySQL配置MySQL 配置Hive元数据存储到MySQL配置元数据到MySQL Hive服务部署hiveserver2服务metastore服务编写Hive服务启动脚本&#xff08;了解&#xff09…

EventSource 长链接执行

EventSource 说明文档MDN 其他参考文档 一、利用node启服务 import fs from fs import express from express const app express() // eventSource 仅支持 get 方法 // 服务器端发送的数据必须是纯文本格式&#xff0c;不能是二进制数据。 app.get(/api, (req, res) > …

table用position: sticky固定多层表头,滑动滚动条border边框透明解决方法

问题&#xff1a;我们发现&#xff0c;只要设置了border边框&#xff0c;这个位置滑动有内容经过就会出现如图的情况。 解决的方法&#xff1a;用outline&#xff08;轮廓&#xff09;替代border,以达到我们想要的样式。 table thead tr {border: none;outline-color: #fff;ou…

Impala依赖组件的客户端源码下载

Impala编译时默认依赖CDH/CDP组件&#xff0c;这些组件跟开源Apache组件的源码可能有差异&#xff0c;但对应的客户端源码也是开源的&#xff0c;可以从S3下载。 比如Impala-4.3.0依赖的CDP_BUILD_NUMBER是44206393&#xff0c;在bin/impala-config.sh中也列出了组件版本&…