Linux学习-28-用户间切换相关命令

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

8.15 Linux su命令:用户间切换(包含su和su -的区别)
  • su 是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换。普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换;从 root 用户切换至其他用户,无需知晓对方密码,直接可切换成功。su 命令的基本格式如下:
[root@CncLucZK ~]# su [选项] 用户名
#  #代表root用户
   $代表普通用户 
  • 选项:
    • -:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
    • -l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
    • -p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
    • -m:和 -p 一样;
    • -c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。
  • 切换用户后还想在退回到之前的用户,在终端输入exit或logouti或使用快捷方式ctrl+d,可以退回到原来用户,其实ctrl+d也是执行的exit命令
[root@CncLucZK ~]# su - zk				#"-"代表连带环境变量一起切换,不能省略
Last login: Fri Oct 14 23:08:16 CST 2022 on pts/1
[zk@CncLucZK ~]$ su -
Password: 								#输入 root 用户的密码
Last login: Sat Oct 15 09:33:21 CST 2022 from 116.115.8.116 on pts/0
Last failed login: Sat Oct 15 09:36:06 CST 2022 on pts/0
There was 1 failed login attempt since the last successful login.
[root@CncLucZK ~]# 

[zk@CncLucZK ~]$ whoami
zk
[zk@CncLucZK ~]$ su --c 'useradd u-dev2' root
Password: 
[zk@CncLucZK ~]$ whoami
zk
[zk@CncLucZK ~]$ su -c 'passwd -S u-dev2' root
Password: 
u-dev2 LK 2022-10-15 0 99999 7 -1 (Password locked.)
[zk@CncLucZK ~]$ grep 'u-dev2' /etc/passwd
u-dev2:x:1004:1004::/home/u-dev2:/bin/bash
[zk@CncLucZK ~]$ whoami
zk
[zk@CncLucZK ~]$ su - u-dev1
Password: 
Last login: Fri Oct 14 22:25:55 CST 2022 on pts/1
Last failed login: Sat Oct 15 10:39:14 CST 2022 on pts/0
There were 3 failed login attempts since the last successful login.
[u-dev1@CncLucZK ~]$ whoami
u-dev1
[u-dev1@CncLucZK ~]$ exit
logout
[zk@CncLucZK ~]$ whoami
zk

  • su 和 su - 的区别:注意,使用 su 命令时,有 - 和没有 - 是完全不同的,- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行(无法使用 service 命令等)。如:普通用户 zk通过 su 命令切换成 root 用户,但没有使用 - 选项,这样情况下,虽然看似是 root 用户,但系统中的 $PATH 环境变量依然是 zk的(而不是 root 的),因此当前工作环境中,并不包含 /sbin、/usr/sbin等超级用户命令的保存路径,这就导致很多管理员命令根本无法使用。不仅如此,当 root 用户接受邮件时,会发现收到的是 zk用户的邮件,因为环境变量 $MAIL 也没有切换。

  • 通过下面这个例子,可直观的看到 su 和 su - 的区别:可以看到,在不使用 su - 的情况下,虽然用户身份成功切换,但环境变量依旧用的是原用户的,切换并不完整。

[zk@CncLucZK ~]$ whoami			#查询用户身份,我是zk
zk
[zk@CncLucZK ~]$ su root		#输入root密码
Password: 						#切换到root,但是没有切换环境变量。注意:普通用户切换到root需要密码
[root@CncLucZK zk]# whoami
root
[root@CncLucZK zk]# echo $MAIL
/var/spool/mail/zk
[root@CncLucZK zk]# env |grep zk	#查看环境变量,提取包含zk的行
#用户名还是zk,而不是root
USER=zk
PWD=/home/zk
#命令査找的路径不包含超级用户路径
MAIL=/var/spool/mail/zk
LOGNAME=zk
PATH=/home/zk/.local/bin:/home/zk/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
#邮箱、主目录、目前用户名还是lamp
8.16 Linux whoami和who am i命令用法和区别
  • whoami 命令和 who am i 命令是不同的 2 个命令,前者用来打印当前执行操作的用户名,后者则用来打印登陆当前 Linux 系统的用户名。如:将shell切换到root用户环境:
[root@CncLucZK ~]# who am i
root     pts/0        2022-10-15 09:33 (116.115.8.116)
[root@CncLucZK ~]# whoami
root
#在此基础上,使用 su 命令切换到 zk 用户下,再执行一遍上面的命令:
[zk@CncLucZK ~]$ who am i
root     pts/0        2022-10-15 09:33 (116.115.8.116)
[zk@CncLucZK ~]$ whoami
zk
  • 在未切换用户身份之前,whoami 和 who am i 命令的输出是一样的,但使用 su 命令切换用户身份后,使用 whoami 命令打印的是切换后的用户名,而 who am i 命令打印的仍旧是登陆系统时所用的用户名。

执行 whoami 命令,等同于执行 id -un 命令;执行 who am i 命令,等同于执行 who -m 命令。

[zk@CncLucZK ~]$ id -un
zk
[zk@CncLucZK ~]$ who -m
root     pts/0        2022-10-15 09:33 (116.115.8.116)
  • 使用 su 或者 sudo 命令切换用户身份,whoami会通过,但who am i无法通过。要解释这背后的运行机制,需要搞清楚什么是实际用户(UID)和有效用户(EUID,即 Effective UID)。

  • 实际用户,指的是登陆 Linux 系统时所使用的用户,因此在整个登陆会话过程中,实际用户是不会发生变化的;而有效用户,指的是当前执行操作的用户,也就是说真正决定权限高低的用户,这个是能够利用 su 或者 sudo 命令进行任意切换的。

  • 一般情况下,实际用户和有效用户是相同的,如果出现用户身份切换的情况,它们会出现差异。需要注意的是,实际用户和有效用户出现差异,切换用户并不是唯一的触发机制,至于其他的触发条件,后续章节会做详细介绍。

  • 那么,whoami 和 who am i通常应用在哪些场景中呢?通常,对那些经常需要切换用户的系统管理员来说,经常需要明确当前使用的是什么身份;另外,对于某些 shell 脚本,或者需要特别的用户才能执行,这时就需要利用 whoami 命令来搞清楚执行它的用户是谁;甚至还有一些 shell 脚本,一定要某个特别用户才能执行,即便使用 su 或者 sudo 命令切换到此身份都不行,此时就需要利用 who am i 来确认。

8.22 添加批量用户
  • 添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户的方法。Linux系统提供了创建大量用户的工具,可以让您立即创建大量用户,方法如下:
  • 先编辑一个文本用户文件:每一列按照/etc/passwd密码文件的格式书写,要注意每个用户的用户名、UID、宿主目录都不可以相同,其中密码栏可以留做空白或输入x号。一个范例文件user.txt内容如下:
[root@CncLucZK test]# cat user.txt
user01:x:1010:1010:user dec1:/home/user01:/bin/bash
user02:x:1003:1011:user dec2:/home/user02:/bin/bash
  • 以root身份执行命令 /usr/sbin/newusers,从刚创建的用户文件user.txt中导入数据,创建用户
[root@CncLucZK test]# newusers < user.txt
  • 然后可以执行命令 vipwvi /etc/passwd 检查 /etc/passwd 文件是否已经出现这些用户的数据,并且用户的宿主目录是否已经创建。
[root@CncLucZK test]# newusers < user.txt
[root@CncLucZK test]# grep user /etc/passwd  /etc/shadow
...
/etc/passwd:user01:x:1010:1010:user dec1:/home/user01:/bin/bash
/etc/passwd:user02:x:1003:1011:user dec2:/home/user02:/bin/bash
/etc/shadow:user01:$6$4nRCI2BqG8/$MUVJvj4AUHvCigCJa209ALwmtlqqb7x89/akPLQV4C5tvtxQSSyGF.N74HQimPyAezJl9riS.Q/0vHCJ1u1Nm1:19281:0:99999:7:::
/etc/shadow:user02:$6$Lw1xW/zJ..P/i$S075Qq.758w3Q9XdPM0cVWVI.QDKehsOHnb5EbVhl4LrDTKa/RLFx2GHhhQ2HCDIghuNJJbpSEx8vINhXvnnw.:19281:0:99999:7:::

  • 执行命令/usr/sbin/pwunconv:将 /etc/shadow 产生的 shadow 密码解码,然后回写到 /etc/passwd 中,并将/etc/shadow的shadow密码栏删掉。这是为了方便下一步的密码转换工作,即先取消 shadow password 功能。
[root@CncLucZK test]# pwunconv
[root@CncLucZK test]# grep user /etc/passwd /etc/shadow
/etc/passwd:user01:$6$4nRCI2BqG8/$MUVJvj4AUHvCigCJa209ALwmtlqqb7x89/akPLQV4C5tvtxQSSyGF.N74HQimPyAezJl9riS.Q/0vHCJ1u1Nm1:1010:1010:user dec1:/home/user01:/bin/bash
/etc/passwd:user02:$6$Lw1xW/zJ..P/i$S075Qq.758w3Q9XdPM0cVWVI.QDKehsOHnb5EbVhl4LrDTKa/RLFx2GHhhQ2HCDIghuNJJbpSEx8vINhXvnnw.:1003:1011:user dec2:/home/user02:/bin/bash
grep: /etc/shadow: No such file or directory

  • 编辑每个用户的密码对照文件:格式为:
用户名:密码

实例文件 passwd.txt 内容如下:

user01:123456
user02:123456
  • 以 root 身份执行命令 /usr/sbin/chpasswd:创建用户密码,chpasswd 会将经过 /usr/bin/passwd 命令编码过的密码写入 /etc/passwd 的密码栏。
确定密码经编码写入/etc/passwd的密码栏后。[root@CncLucZK test]# vi passwd.txt
[root@CncLucZK test]# chpasswd < passwd.txt
[root@CncLucZK test]# grep user /etc/passwd /etc/shadow
/etc/passwd:user01:$6$eFL/r/bByqMA$U1RmOwaGvKnR6eYc3LrWLij2r6xoSvVMZQq/COOgMKDkkkas8JdjOHZzmxPq07vqk/s2lkYYwyZbLyjWGrBv21:1010:1010:user dec1:/home/user01:/bin/bash
/etc/passwd:user02:$6$YftLR/Ot$INIIidOOOC3DPElJIbWaof5ZJKs39H885PuSdjqroIINca9olA6s4AJ/vCKagwWwsw.04bTOwYJzTU1qMEep6.:1003:1011:user dec2:/home/user02:/bin/bash
#密码和初始密码不一样了,说明passwd.txt中的密码已经被转码到/etc/passwd文件中
  • 确定密码经编码写入/etc/passwd的密码栏后:执行命令 /usr/sbin/pwconv 将密码编码为 shadow password,并将结果写入 /etc/shadow。
[root@CncLucZK test]# pwconv
[root@CncLucZK test]# grep user /etc/passwd /etc/shadow
/etc/passwd:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
/etc/passwd:zk:x:1002:1002:commons user:/home/zk:/bin/bash
/etc/passwd:u-dev1:x:1003:1003:devloper user:/home/u-dev1:/bin/bash
/etc/passwd:user01:x:1010:1010:user dec1:/home/user01:/bin/bash
/etc/passwd:user02:x:1003:1011:user dec2:/home/user02:/bin/bash
/etc/shadow:user01:$6$eFL/r/bByqMA$U1RmOwaGvKnR6eYc3LrWLij2r6xoSvVMZQq/COOgMKDkkkas8JdjOHZzmxPq07vqk/s2lkYYwyZbLyjWGrBv21:19281:0:99999:7:::
/etc/shadow:user02:$6$YftLR/Ot$INIIidOOOC3DPElJIbWaof5ZJKs39H885PuSdjqroIINca9olA6s4AJ/vCKagwWwsw.04bTOwYJzTU1qMEep6.:19281:0:99999:7:::

  • 这样就完成了大量用户的创建了,之后可以到/home下检查这些用户宿主目录的权限设置是否都正确,并登录验证用户密码是否正确。
[root@CncLucZK home]# su - user01
[user01@CncLucZK ~]$ su - user02
Password: 
Last login: Sun Oct 16 15:10:50 CST 2022 on pts/0
#user01和user02可以正常切换
[user02@CncLucZK ~]$ pwd
/home/user02
#可以正常执行/bin/bash命令

参考文献:
Linux su命令:用户间切换(包含su和su -的区别)
Linux 用户和用户组管理文章来源地址https://www.toymoban.com/news/detail-403377.html

下一篇:Linux学习-29-用户组信息相关命令

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

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

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

相关文章

  • linux用户权限相关命令笔记

     1.1 ls 扩展  ls -l   1.2 chmod 简单使用(重要)  + 是加权限, - 是减权限 chmod 修改文件权限   chmod 修改目录权限: 想要在目录下执行终端命令,就必须要有可执行权限。 1.3 超级用户     groupadd 组名 :添加组     chgrp -R 组名  文件/目录名:修改文件/目录的所属组  本来

    2024年02月06日
    浏览(34)
  • LINUX账户权限设置-禁止普通用户使用su命令切换至root用户

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

    2024年02月14日
    浏览(32)
  • linux切换到root用户:su root和sudo su命令的区别

    工作过程中遇到需要切换到root用户下去执行命令  临时获取root用户权限,工作目录不变 好处:不需要知道root用户的密码,直接输入普通用户的密码即可 完全获取root用户权限,工作目录会变成root用户的根目录 需要知道root用户的密码,不然不能切换成功

    2024年02月12日
    浏览(25)
  • linux基础学习(4):rpm包与相关命令

    1.linux内的软件包分类 linux只有2种软件包: 源码包 与 二进制包 (1) 源码包 源码包就是开源的源程序包,使用者可以直接看到其程序,也可以进行修改 (2) 二进制包 由于源码包安装难度大,后来就出现了二进制包,但二进制包不再是开源的了 linux的二进制包以.rpm结尾,

    2024年01月19日
    浏览(24)
  • Git切换用户常用命令

    1、查看 查看用户名 : 查看密码: 查看邮箱: 查看配置信息(包含上面的信息): 2、新增、切换 修改用户名 修改密码 修改邮箱 当我们需要在同一台电脑上使用不同的Git用户时,需要切换到不同的用户身份也是上面操作 3、替换 git config --global user.name \\\"yourName\\\"和git config

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

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

    2024年02月16日
    浏览(44)
  • 【Linux】28、命令行参数 语法格式

    命令行参数很复杂,通过 --help 会看到很多符号,比如 [] {} () | …,他们都是什么意思呢?一般格式如下: 示例如下: 命令行常见符号: 没有括号包裹的是必填参数,如: fileName 没有被括号包裹,所以是必填参数 表示可选 即 ls 命令的 -a -l -r -t -A -F -R 和 name 都是可选的 大

    2024年02月22日
    浏览(32)
  • Linux 用户账号管理-用户间切换

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

    2024年02月05日
    浏览(52)
  • Linux中的新建用户、切换用户

    目录 一、Linux系统中有哪些用户 二、新建普通用户 三、root账号与普通账号的切换 一、Linux系统中有哪些用户 1.root 超级管理员(不受权限约束) 2.其他用户 普通用户(受到权限约束) 二、新建普通用户 创建新用户 sudo useradd -m 新用户名   为新用户设置密码(按照提示输入

    2024年01月22日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包