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 $VARIABLE

zhangchen@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。 

        


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快来pick你喜欢的布袋式压风自救装置

拼搏奋斗,追逐梦想,让我们一起努力,成为更好的自己。在人生的道路上,我们会遇到各种挫折和困难。但只要我们积极面对,勇敢前进,一切皆有可能。让我们一起用正能量的心态去迎接每一个新的挑战!无…

HarmonyOS 鸿蒙应用开发( 六、实现自定义弹窗CustomDialog)

自定义弹窗(CustomDialog)可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。 在应用的使用和开发中,弹窗是一个很常见的场景,自定义弹窗…

封装qms三级物料多选组件

qms项目中的物料数据有很多,若是直接通过select下拉展示,首先是数据太多,会卡住,然后展示的内容也不全,目前物料有三个层级,分别一级物料、二级物料、三级物料,若是多加几个筛选条件&#xff0c…

Mysql 学习(十 四)事务简介

为什么要有事务? 数据库的出现其实是有应用场景的,最好的例子就是交易,以前的交易是通过账本记录的,也就是通过纸和笔来记录,而数据库的出现大大提升了效率,但是现实中的有些问题,数据库也需要…

基于Grafana+Prometheus搭建可视化监控系统实践

基本介绍 Grafana:一个监控仪表系统,可以根据提供的监控数据,生产可视化仪表盘,同时也具有告警通知功能。这里的监控数据来源,目前主要以Prometheus为主(也支持其它数据源),每次展现…

1.26 day3 C++

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std; cla…

CS奇技淫巧之1.1.1.1上线

编者注&#xff1a;本文仅供学习研究&#xff0c;严禁从事非法活动。 前期准备 一个干净的域名 一台VPS 一个CloudFlare账号 CloudFlare配置 Cloudflare 是一家国外的 CDN 加速服务商&#xff0c;提供免费和付费的加速和网站保护服务&#xff0c;百度云加速的国外节点就是和 …

力扣面试题 16.06. 最小差

Problem: 面试题 16.06. 最小差 文章目录 题目描述思路即解法复杂度Code 题目描述 思路即解法 注意本题目的数据范围!!! 1.对数组a与数组b进行排序;获取a与b的数组长度aLen,bLen&#xff0c;定义一个long类型的变量min&#xff1b; 2.分别让两个指针i&#xff0c;j指向数组的开…

ROS 计算图级 小结

ROS 会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络&#xff0c;并通过该网络与其他节点交互&#xff0c;获取其他节点发布的信息&#xff0c;并将自身数据发布到网络上。 在这一层级中最基本的概念包括节点、节点管理器、参数服务器、消息、服务、主题和…

鸿蒙开发会是前端程序员的下一个春天吗?

前言 最近前端的大环境不太行&#xff0c;之前身处在前端的自己薪资也越来越无望了&#xff0c;隐隐约约感觉前端做不下去了&#xff0c;2024前端找不到工作要转行吗&#xff1f; 看新闻的过程中&#xff0c;**发现越来越多的巨头公司融入鸿蒙生态建设&#xff0c;鸿蒙“朋友…

Flink Checkpoint 超时问题和解决办法

第一种、计算量大&#xff0c;CPU密集性&#xff0c;导致TM内线程一直在processElement&#xff0c;而没有时间做CP【过滤掉部分数据&#xff1b;增大并行度】 代表性作业为算法指标-用户偏好的计算&#xff0c;需要对用户在商城的曝光、点击、订单、出价、上下滑等所有事件进…

Soul App深化社交元宇宙生态治理,与用户共建清朗网络家园

近日,新型开放式社交平台Soul App发布了《2023年第二季度Soul生态安全报告》,展现了其在深化社交元宇宙生态治理方面的创新成果。报告显示,第二季度,Soul围绕反诈、引导社交礼仪规范、未成年保护、用户共治众裁、防治网暴骚扰等方面开展用户安全生态专项治理,通过一系列创新举措…

MATLAB字符串编辑常用代码

1.字符串赋值 % 字符串赋值 sabcdefg 2.字符串属性和操作 (1)获取字符串长度 sabcdefg;% 字符串赋值 length(a) % 获取字符串长度 (2)连接字符串 % 连接两个字符串,每个字符串最右边的空格被裁切 s1a s2b s3strcat(s1,s2) 3.字符串比较 % strcmp 比较两个字符串是…

Linux--基础开发工具篇(1)(yum)

1.Linux 软件包管理器 yum 1.1yum是什么&#xff1f;什么是软件包&#xff1f; yum是什么&#xff1f; yum是一个软件下载安装管理的一个客户端&#xff0c;就如小米应用商店&#xff0c;华为应用商城。 Linux中软件包可能有依赖关系--yum会帮助我们解决依赖关系的问题。 什么是…

acrobat调整pdf的页码和实际页码保持一致

Acrobat版本 具体操作 现在拿到pdf的结构如下&#xff1a; pdf页码实际页码1-10页无页码数11页第1页 操作&#xff0c;选择pdf第10页&#xff0c;右键点击 具体设置 最终效果

MySQL 多表查询

文章目录 多表关系一对多多对多一对一 查询合并查询&#xff08;笛卡尔积&#xff0c;会展示所有组合结果&#xff09;&#xff1a;内连接查询外连接查询自连接查询联合查询 union, union all子查询单行子查询列子查询行子查询表子查询 :::success 多表查询&#xff0c;也称为…

Linux/Academy

Enumeration nmap 首先扫描目标端口对外开放情况 nmap -p- 10.10.10.215 -T4 发现对外开放了22,80,33060三个端口&#xff0c;端口详细信息如下 结果显示80端口运行着http&#xff0c;且给出了域名academy.htb&#xff0c;现将ip与域名写到/et/hosts中&#xff0c;然后从ht…

负载均衡-Ribbon-自定义负载均衡算法

1.Ribbon 是什么 SpringCloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具主要功能是提供客户端的软件负载均衡算法&#xff0c;将 Netflix 的中间服务处连接在一起Ribbon的客户端组件提供一系列完整的配置项&#xff0c;如&#xff1a;连接超时、重试等。简…

TCP通信流程以及套接字函数

TCP和UDP的特点&#xff1a; 对于单播&#xff0c;多播&#xff0c;广播的解释&#xff1a; 单播&#xff1a; 一对一通信&#xff0c;目标地址唯一。多播&#xff1a; 一对多通信&#xff0c;目标地址是一个特定的组。广播&#xff1a; 一对全部通信&#xff0c;目标地址是整…

vue3之 websoket发送消息

1.封装websoket var ws null; //建立的连接 var lockReconnect false;//是否真正建立连接 var timeout 6 * 1000 * 5;//30秒一次心跳 var timeoutObj null;//心跳心跳倒计时 var serverTimeoutObj null;//心跳倒计时 var timeoutnum null;//断开 重连倒计时 var global_…