Linux:用户切换指令su

这篇具有很好参考价值的文章主要介绍了Linux:用户切换指令su。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 相关文章

Linux专栏https://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。 

        


 文章来源地址https://www.toymoban.com/news/detail-818801.html

到了这里,关于Linux:用户切换指令su的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LINUX账户权限设置-禁止普通用户使用su命令切换至root用户

    实验目的:限制普通用户切换root模式。   以下是没有限制普通用户kali切换root模式 输入【su+用户名】命令可以正常进行普通用户和root模式的切换。 PS:如果忘记了root模式的密码是什么 可以在普通用户下输入sudo su命令,进入root模式 然后输入passwd root命令重新更改一下root模

    2024年02月14日
    浏览(45)
  • 全面解析Linux下的su指令

    简介: 在Linux系统中,su指令是一项强大而常用的工具,用于切换用户身份以执行特定操作。本篇博客将深入剖析su指令的前世今生,详细讲解其功能、用法和相关指令,以及在实际应用中的场景和问题排查。通过通俗易懂的方式、丰富的示例和参考链接,希望能帮助读者全面

    2024年02月07日
    浏览(59)
  • Linux中root切换问题:su:鉴定故障问题

    在Linux系统中,如果登录了其他账户,在其他账户中使用su切换root用户时,出现su 鉴定故障的问题时,很可能的原因是: 1. 安装Linux时没有给root设置密码 2. 登录口令设置后,没有及时更改root用户的密码, 3.用户密码已过期,需要重新更换密码 以上几种情况,后两种都没有任

    2024年02月02日
    浏览(82)
  • Linux系统切换root出现su: authentication failure解决办法

    在Linux系统中,使用命令su切换root用户,正确输入密码后仍报错su: Authentication failure 使用命令sudo passwd root修改root账户密码,输入该命令后回车,先输入当前root密码,然后键入新密码并确认(可以和之前相同)。 提示密码更新成功,此时再su,输入新密码,成功切换到root。

    2024年02月16日
    浏览(59)
  • Linux系统root下执行su登录其他用户失败

    在Linux系统上,从root用户切换到oracle用户时报错 su: cannot open session: Permission denied 如下: 定位原因1 分析登录日志,可以看到时登录的时候limit中的 memlock 设置失败,导致用户登录失败: limit配置表示限制该用户最大可以打开的文件数量、会话数量、内存等,使用 ulimit -a 命令

    2024年02月05日
    浏览(48)
  • su命令切换用户输入密码后,提示:鉴定故障

    在终端通过su命令切换用户输入密码后,提示:鉴定故障。这是因为在安装linux系统时未设置root用户密码造成的,需要重新设置密码后再切换用户。具体操作命令如下: 设置root用户密码 切换用户

    2024年02月16日
    浏览(53)
  • Ubuntu中用useradd创建用户后无法用su切换过去

    原因: 没有设置密码,没有指定家目录和shell版本,就不能su切换到新用户 解决方法: su - root //切换到root权限 useradd -m -s /bin/bash node1 //-m自动创建home目录,-s指定shell版本 passwd node1 //设置密码 参考链接: Ubuntu中用useradd创建用户时没指定家目录和shell版本,就不能su切换到新

    2024年01月17日
    浏览(43)
  • Linux系统知识4—Linux的root用户,su 和 exit 命令,sudo 命令,用户和用户组管理,getent,查看权限控制,修改权限控制 -chmod,修改权限控制-chown

    目录 一.Linux的root用户 1.1 root用户(超级管理员) 1.2 su 和 exit 命令 1.3 sudo 命令 1.为普通用户配置 sudo 认证 二.用户和用户组管理 2.1用户,用户组 2.2用户组的管理 2.3用户管理 2.4.getent 三.查看权限控制 3.1认知权限信息 1.序号1,表示文件,文件夹的权限控制信息 2. 序号2,表

    2024年01月17日
    浏览(72)
  • linux下目录切换快捷指令

    \\\"cd -\\\"  是一个命令行中的快捷方式,用于返回上一个工作目录。通常,当你在命令行中使用 cd 命令切换目录时,系统会记住你之前所在的目录。通过输入 cd - ,你可以返回到上一个目录,而不必输入完整的路径。这在需要快速在两个目录之间切换时非常有用。

    2024年03月12日
    浏览(36)
  • Linux 用户账号管理-用户间切换

    在Linux系统中,管理用户账号是非常重要的。其中,用户间切换是经常用到的一种操作,可以切换到其他账户的身份以执行相关任务。本文将介绍Linux系统中用户间切换的方法,包括语法、实操和各种用户间切换方法之间的区别。 Linux系统中,有两种用户间切换的命令:su和

    2024年02月05日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包