天天看点

Linux命令之su -- 用于切换当前用户身份到其他用户身份命令介绍常用选项su 命令存在的安全隐患参考示例

文章目录

  • 命令介绍
  • 常用选项
  • su 命令存在的安全隐患
  • 参考示例
    • 切换成指定的用户身份,但是环境变量不变
    • 切换成指定的用户身份,并且改成对应用户的环境变量
    • 切换成指定的用户,并告知新的 shell 不要去读取启动文件
    • 切换成指定的用户执行命令,执行后恢复原来的用户身份
    • 切换成其它用户后,如何恢复成原来的用户身份

命令介绍

su

英文就是 substitute user identity。

su

命令用于切换当前用户身份到其他用户身份,或者以指定用户的身份执行命令或程序。

语法为

su

后接用户登录名称,接着系统会要求输入所要变更的用户的登录密码,成功登录后,命令行的前缀会改变,说明你已经切换成功。当然你也可以利用

who -m

命令来验证当前登陆的身份。

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

普通用户切换到 root 用户,可以使用

su --

su root

,但是必须输入

root

密码才能完成切换。root 用户切换到普通用户,可以使用

su username

,不需要输入任何密码即可完成切换。

常用选项

选项 说明

-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用户的:

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

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

说通俗点,命令

su -

是完整地切换到另一个用户环境,建议大家切换用户的时候,尽量使用

su - username

这样,否则可能发现某些命令执行不了。

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

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

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

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

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

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

[[email protected] ~]# su mysql -- 切换成用户 mysql
[[email protected] root]$ 
           

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

[[email protected] root]$ exit -- 退出当前用户 mysql
exit
[[email protected] ~]# 
           

继续阅读