2.3.1 切换成其他用户

在本章开头时就提到,Linux用户分为根用户(root)、普通用户、系统用户3种。其中根用户和普通用户是可以实际登录到系统中的。假如说我以普通用户john登录到系统中,这时候想使用useradd添加一个用户,怎么办?普通用户是没有添加用户的权限的,只有root用户才能创建用户。当然我们可以使用exit命令退出当前用户,然后使用root用户登录,再使用useradd添加用户。但是也有一种更方便的方式,那就是使用su命令,su是切换用户的意思。在不加参数的情况下,su命令默认表示切换到root用户,之后只要输入root密码就可以切换身份为root了,完成操作后,使用exit命令可以退出root切换到原先的用户。如下所示:


  1. [john@localhost ]$ su
  2. Password: #
  3. 输入root
  4. 用户的密码
  5. [root@localhost john]# pwd
  6. homejohn
  7. [root@localhost john]# exit
  8. exit
  9. [john@localhost ]$

su命令后面还可以加上一个“-”参数,就是键盘上的中横线。加上这个参数后,切换成root用户时,不但身份变成了root,而且还能应用root的用户环境。所谓“用户环境”就是/etc/passwd中定义的用户家目录、使用的Shell,以及关于这个用户的个性化设置等。如下所示:


  1. [john@localhost ]$ su -
  2. Password: #
  3. 输入root
  4. 用户的密码
  5. [root@localhost ]# pwd
  6. /root
  7. [root@localhost ]# exit
  8. logout
  9. [john@localhost ]$

在演示su和su-这两个命令的时候,我在中间故意都运行了pwd命令,可以看到两次命令的显示是不一样的。真正的原因是使用su命令切换用户之后,当前的用户环境并没有发生变化,而使用su-命令切换用户后,用户环境变成root的了。

su-命令后还可以继续跟其他的用户名作为参数,这样就可以切换成指定用户的身份。比如说用户john在使用过程中需要临时切换成用户user1,这时就可以使用su-user1命令切换用户,但是同样需要知道user1的密码。值得一提的是,root用户可以使用su命令切换成任意用户而不需要密码,如下所示:


  1. [john@localhost ]$ su - user1
  2. Password: #
  3. 输入用户user1
  4. 的密码
  5. [user1@localhost ]$

使用su命令虽然很方便,但还是有很明显的缺陷,就是切换成其他用户的前提是需要知道对方的密码。如果需要切换成root,那就需要root的密码。我们知道,root是系统中权限最高的用户,如果让太多人知道root密码,必然是很不安全的。为解决这个问题,我们可以使用sudo命令。