1. su命令介绍
su命令来自于英文单词“switch user”的缩写,其功能是用于切换用户身份。
管理员切换至任意用户身份而无需密码验证,而普通用户切换至任意用户身份均需密码验证。
另外添加单个减号(-)参数为完全的身份变更,不保留任何之前用户的环境变量信息。
特别说明的是:
切换用户分为login-shell方式与non-login shell方式,区别在于是否在su后面加上-,主要涉及到PATH/USER/MAIL等环境变量读取方法。使用root用户切换至任何用户,都不需要输入用户密码。
2. 语法格式及常用选项
依照惯例,我们还是要查看一下帮助文档
[root@doc ~]# su -help
通过帮助文档,我们整理出几个常用的参数:
3. 参考案例
3.1 切换到root用户
3.1.1案例一: 切换root,但是不切换环境
我们需要创建一个普通用户mufeng,然后使用su命令切换到root用户, 但是shell环境依然是普通用户的shell
## 创建用户
[root@mufenggrow test]# useradd mufeng
[root@mufenggrow test]# echo 12345678 |passwd --stdin mufeng
更改用户 mufeng 的密码 。
passwd:所有的身份验证令牌已经成功更新。
## 登录普通用户
[root@mufenggrow test]# ssh mufeng@192.168.1.101
The authenticity of host '192.168.1.101 (192.168.1.101)' can't be established.
ECDSA key fingerprint is SHA256:9uJW2mOqzhYy5gtMsTHmt4V584na0LFqEGYXxA4rUM8.
ECDSA key fingerprint is MD5:42:35:b0:99:2c:04:c5:94:e6:f4:74:6d:af:ec:07:29.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.101' (ECDSA) to the list of known hosts.
mufeng@192.168.1.101's password:
## 切换root
[mufeng@mufenggrow ~]$ su
密码:
[root@mufenggrow mufeng]# whoami
root
## 切换完之后,还是在mufeng的家目录下
[root@mufenggrow mufeng]# pwd
/home/mufeng
[root@mufenggrow mufeng]#
3.1.2案例二: 切换root用户,同时切换环境
这时候就需要一个在root前面加上 - 来切换,切换完成后,用户和shell环境都切换为root
[root@mufenggrow mufeng]# ssh mufeng@192.168.1.101
mufeng@192.168.1.101's password:
Last login: Wed Jan 25 17:10:32 2023 from mufenggrow
[mufeng@mufenggrow ~]$ pwd
/home/mufeng
[mufeng@mufenggrow ~]$ su - root
密码:
上一次登录:三 1月 25 17:11:50 CST 2023pts/1 上
[root@mufenggrow ~]# pwd
/root
[root@mufenggrow ~]#
3.2 切换到指定用户
从root用户切换到普通用户,无需输入密码:
[root@mufenggrow ~]# su - mufeng
上一次登录:三 1月 25 17:16:59 CST 2023从 mufenggrowpts/2 上
[mufeng@mufenggrow ~]$ exit
登出
[root@mufenggrow ~]# su mufeng
[mufeng@mufenggrow root]$
可以看到不加横线的时候,切换过去之后,还是在root目录上。
也就是说,使用- 表示连同shell环境一同切换。
3.3 不切换成root,但执行root才能执行的命令
3.3.1案例一: 不切换成root,执行head -n 3 /etc/passwd
此时会用到 -c参数
-c, --command <命令> 使用 -c 向 shell 传递一条命令
[mufeng@mufenggrow ~]$ whoami
mufeng
[mufeng@mufenggrow ~]$ head -n 3 /etc/shadow
head: 无法打开"/etc/shadow" 读取数据: 权限不够
[mufeng@mufenggrow ~]$ su - root -c "head -n 3 /etc/passwd"
密码:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
需要注意的是: -c后面的命令一定要加上 双引号。
3.3.2案例二:不切换root,执行lastb, 执行后返回原用户
[mufeng@mufenggrow ~]$ whoami
mufeng
## 不切换成root用户,但执行lastb命令
[mufeng@mufenggrow ~]$ su - root -c lastb
密码:
btmp begins Thu Dec 8 19:36:40 2022
## 切换用户执行命令,执行玩之后返回原用户
[mufeng@mufenggrow ~]$ su -c ls root
密码:
anaconda-ks.cfg initial-setup-ks.cfg test 公共 模板 视频 图片 文档 下载 音乐 桌面
su命令的缺憾:
su命令的局限在于,如果主机是多人管理的环境,如果大家都用su命令切换至root身份,每个人都需要知道root密码,非常不安全。
su 和su- 的区别
su命令和su -命令最大的本质区别就是:
- 前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;
- 而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误