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", …

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

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

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

声明&#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运行环境总结 前言 补档 一、学习目标 二、学习目录 三、为什…

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…

Redis(八)哨兵机制(sentinel)

文章目录 哨兵机制案例认识异常 哨兵运行流程及选举原理主观下线(Subjectively Down)ODown客观下线(Objectively Down)选举出领导者哨兵选出新master过程 哨兵使用建议 哨兵机制 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为新…

excel 设置密码保户

目录 前言设置打开密码设置编辑密码 前言 保户自己的数据不被泄漏是时常有必要的&#xff0c;例如财务数据中最典型员工工资表&#xff0c;如果不设置密码后果可想而知&#xff0c;下面我们一起来设置excel查看密码和编辑密码。我用的是wps,其它版本类似&#xff0c;可自行查资…

已经安装了CUDA,但是cmd执行nvcc -V报错:nvcc不是内部或外部命令,也不是可运行的程序或批处理文件

请注意&#xff0c;查看版本的指令是nvcc --version或nvcc -V&#xff0c;注意区分大小写 如果还是不能输出版本信息&#xff0c;那这个原因可能是由于没有在系统环境变量里添加CUDA。 先来看看CUDA是否安装成功&#xff1a; 在CUDA的安装路径下找到bandwidthTest.exe 和 devi…

一种通过增强的面部边界实现精确面部表示的多级人脸超分辨率

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;一种通过增强的面部边界实现精确面部表示的多级人脸超分辨率二、使用步骤1、研究背景2、方法提出3、相关方法3.1、FSR网络结构3.2…