C語言中文網
首頁 > 編程筆記 > Linux筆記 閱讀:2,653

Linux su命令:切換用戶身份

su 命令可以切換成不同的用戶身份,命令格式如下:

[root@localhost ~]# su [選項] 用戶名

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

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

【例 1】

[lamp@localhost ~]$ whoami
lamp
#查詢用戶身份,我是lamp
[lamp@localhost ~]$ su root
密碼:
<-輸入root密碼
#切換到root,但是沒有切換環境變量。注意:普通用戶切換到root需要密碼
[root@localhost ~]# 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】

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

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

【例3】

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

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

所有教程

優秀文章

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo