Linux su命令:切換使用者身份

2020-07-16 10:04:34
su 命令可以切換成不同的使用者身份,命令格式如下:

[[email protected] ~]# su [選項] 使用者名稱

選項:
  • -:選項只使用"-"代表連帶使用者的環境變數一起切換;
  • -c 命令:僅執行一次命令,而不切換使用者身份

"-"不能省略,它代表切換使用者身份時,使用者的環境變數也要切換成新使用者的環境變數。大家知道環境變數是用來定義使用者的操作環境的,如果環境變數沒有隨使用者身份切換,那麼很多操作將無法正確執行。

例如,普通使用者 lamp 切換成超級使用者 root,但是沒有加入"-",那麼雖然是 root 使用者,但是 $PATH 環境變數還是 lamp 使用者的,不包含 /sbin、/usr/sbin 等超級使用者命令儲存路徑,所以無法使用管理員命令;而且 root 使用者在接收郵件時,還會發現收到的是 lamp 使用者的郵件,因為環境變數 $MAIL 沒有切換過來。

【例 1】

[[email protected] ~]$ whoami
lamp
#查詢使用者身份,我是lamp
[[email protected] ~]$ su root
密碼:
<-輸入root密碼
#切換到root,但是沒有切換環境變數。注意:普通使用者切換到root需要密碼
[[email protected] ~]# env | grep lamp
#檢視環境變數,提取包含lamp的行
USER=lamp
#使用者名稱還是lamp,而不是root
PATH=/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/lamp/bin
#命令査找的路徑不包含超級使用者路徑
MAIL=/var/spool/mail/lamp
PWD=/home/lamp
LOGNAME=lamp
#郵箱、家目錄、目前使用者名稱還是lamp

通過該例我們已經注意到,切換使用者時如果沒有加入"-",那麼切換是不完全的。要想完整切換,可以使用如下命令:

【例 2】

[[email protected] ~]$ su -root 密碼:
#"-"代表連帶環境變數一起切換,不能省略

有些系統命令只有 root 可以執行,比如新增使用者的命令 useradd,所以我們需要使用 root 身份執行。但是我們只想執行一次,而不想切換身份,可以做到嗎?當然可以,命令如下:

【例3】

[[email protected] ~]$ whoami
lamp
#當前我是lamp
[[email protected] ~]$ su -root -c "useradd user1"
密碼:
#不切換成root,但是執行useradd命令新增user1使用者
[[email protected] ~]$ whoami
lamp
#我還是lamp
[[email protected] ~]$ grep "user1' /etc/passwd userl:x:502:504::/home/user1 :/bin/bash #user使用者已經新增了

總之,切換使用者時 "-" 代表連帶環境變數一起切換,不能省略,否則使用者身份切換不完全。