Linux命令之su -- 用于切换当前用户身份到其他用户身份

本文详细介绍了Linux中的su命令,包括其用途、语法、常用选项和潜在的安全隐患。su命令允许用户切换到其他用户身份,如切换到root用户,但不安全的做法可能导致密码泄露。推荐使用-su选项以确保环境变量的正确切换。文章还提供了多个示例展示如何切换用户并执行命令,以及如何恢复原用户身份。此外,还强调了sudo命令作为更安全的权限管理方式。
摘要由CSDN通过智能技术生成

命令介绍

su 英文就是 switch user or substitute user identitysu 命令用于切换当前用户身份到其他用户身份,或者以指定用户的身份执行命令或程序。

语法为 su 后接用户登录名称,接着系统会要求输入所要变更的用户的登录密码,成功登录后,命令行的前缀会改变,说明你已经切换成功。当然你也可以利用 who -m 命令来验证当前登陆的身份。

切换后,你会一直保持该用户身份,直至退出 Terminal 或者输入 exit 命令。

普通用户切换到 root 用户,可以使用 su -su - root,但是必须输入 root 密码才能完成切换。root 用户切换到普通用户,可以使用 su - username,不需要输入任何密码即可完成切换。

特别重要

使用命令 su 切换其它用户身份时,如果不指定选项 --l--login,这叫【非登录式】切换,即不会读取目标用户的配置文件,所以运行的用户环境还是原来用户的环境;如果指定了上述选项进行切换,这叫【登录式】切换,会读取目标用户的配置文件,切换后完全使用目标用户的环境执行命令,所以建议以后切换用户的时候都加上上述选项进行切换。

常用选项

选项说明
-c<指令>--command=<指令>执行完指定的指令后,即恢复原来的身份
-f--fast适用于csh与tsch,使shell不用去读取启动文件(例如: csh.cshrc 等)
--l--login改变身份时,也同时变更工作目录,以及环境变量 HOME、SHELL、USER、LOGNAME、PATH 等。这个参数加了之后,就好像是重新 login 为目标用户一样,大部份环境变量都是以目标用户的为主,并且工作目录也会改变。
-m-p--preserve-environment变更身份时,不要变更环境变量
-s--shell指定要执行的shell
--help显示帮助信息
--version显示版本信息

su 命令存在的安全隐患

使用 su 命令可以让普通用户切换到 root 身份去执行某些特权命令,但存在一些问题,比如说:
1.仅仅为了一个特权操作就直接赋予普通用户超级管理员账户的完整权限,这显然是不明智的;
2.如果大家都要使用 su 命令切换到 root 身份,而使用命令 su 切换到 root 用户必须输入 root 的登录密码,这就导致很多人都知道 root 的密码,这是很糟糕的。

所以在实际的工作中,更多的是使用命令 sudo 来获取某些用户的特有权限去执行命令,而且普通用户必须通过授权才能使用命令 sudo。

参考示例

切换成指定的用户身份,但是环境变量不变

例如,当前登录用户是 root,想要切换到 linuxcool 用户,但环境变量仍然是 root用户的:

[root@linuxcool ~]# su linuxcool

切换成指定的用户身份,并且改成对应用户的环境变量

切换成用户 linuxcool,并将工作目录以及相关的环境变量也改成用户 linuxcool 的:

[root@linuxcool ~]# su - linuxcool  

说通俗点,命令 su - 是完整地切换到另一个用户环境,建议大家切换用户的时候,尽量使用 su - username 这样,否则可能发现某些命令执行不了。

切换成指定的用户,并告知新的 shell 不要去读取启动文件

[mysql@linuxcool ~]# su root -f

切换成指定的用户执行命令,执行后恢复原来的用户身份

当前登录用户是 mysql,切换成用户 root 执行命令 ls,命令执行完后恢复原来的用户身份:

[mysql@linuxcool ~]# su root -c ls

切换成其它用户后,如何恢复成原来的用户身份

切换成另一个用户身份之后,可以输入 exit 恢复成原来的用户身份。

例如,当前登录用户是 root,切换成用户 mysql:

[root@htlwk0001host ~]# su mysql -- 切换成用户 mysql
[mysql@htlwk0001host root]$ 

输入命令 exit,退出当前用户 mysql 身份,恢复成原来的用户身份 root:

[mysql@htlwk0001host root]$ exit -- 退出当前用户 mysql
exit
[root@htlwk0001host ~]# 

切换成 root 用户

[mysql@htlwk0001host ~]$ su - 

[mysql@htlwk0001host ~]$ su - root

[mysql@htlwk0001host ~]$ su # 不推荐这种方式,虽然切换成用户root了,但是运行的依旧是mysql的用户环境
[root@htlwk0001host mysql]# echo $USER
mysql
[root@htlwk0001host mysql]# echo $LOGNAME
mysql
[root@htlwk0001host mysql]# echo $PATH
/var/lib/mysql/.local/bin:/var/lib/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@htlwk0001host mysql]# echo $SHELL
/bin/bash
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值