Linux學習筆記——切換並取代用戶身份命令——su


    再次從頭好好的學習Linux,本着以免輕易忘記,以備后用的原則,將我覺得常用或者好玩的linux命令記錄在這,注意:我的實驗環境是 Ubuntu 14.04.1

     su 這個命令我經常使用,因為我喜歡在root用戶下來操作

1:一般用戶切換為root用戶(有以下幾種方式,需要輸入密碼)

su 

su -

su -l

su --login

su - root

su -l root

su --login root

su root 

 

2:root用戶切換為一般用戶(不需要輸入密碼)

su qian

su - qian

su -l qian

su --login qian

3:使用su --help 或者 man su 可以查看到su命令更加詳細的信息,這個命令相當的簡單,不過在沒有寫這篇博客之前我沒有實驗那么多的情況,這也許就是寫這篇博文的小小新發現吧!

這里又不得不提英語的重要性了,命令的幫助信息和用戶幫助手冊的信息全部都是英文,如果英文功力好,只要知道命令的名字就能通過man命令了解到這個命令的全部信息,當然,具體的作用還是要實驗一下才能理解的更加深刻的,對於一個命令而言,雖然沒有必要牢記所有的信息,但是常用的使用方式最好能夠熟記,所以,同樣的功能越簡單越好了,切換用戶 su username 就差不多了。

4:簡單說明

在系統中要做身份的切換時,su就是必備的指令了。在許多系統中,為了安全的考慮,是不允許root直接登錄系統的,在這樣的情況下,就必須以一般的用戶登錄,並通過su來切換用戶啦。另外,Ubuntu系統還通過sudo針對單個命令授予臨時權限。sudo僅在需要時授予用戶權限,減少了用戶因為錯誤執行命令損壞系統的可能性。

 

5:與su命令相關的其他非常有用的文章

 

1:原文地址是 http://blog.chinaunix.net/uid-26085226-id-3127903.html

原問:linux中,我以root登錄,和以其他用戶登錄然后使用su命令切換至root用戶,有什么不一樣,如果一樣的話,我執行su命令之后,其他的用戶還在不在系統中?本人在執行su后,試圖刪除其他用戶,linux提示,其他用戶logged in?why
回答:我來為你解釋吧! unix系統里,當用戶登錄時會為每個用戶創建一個shell進程,提供交互功能,如果你使用的是bash,那么這個shell進程就是bash,使用的ksh,這個進程就是ksh,其他shell也是一樣。
而對於進程而言,在它的進程PCB(進程控制塊)里,有實際用戶ID和有效用戶ID這兩個值,所謂實際用戶ID是指該進程是以什么身份創建的,比如:我當前是root用戶,我創建的進程的實際用戶ID就是root的ID,一般為0。而有效用戶ID是指對該進程當前擁有使用權限的用戶的ID,比如我有一輛車,我把它組出去了,這個車的擁有者是我,但是使用權限卻不是我的。
一般情況下實際用戶ID和有效用戶ID都是相同的,su命令就是擁有這樣的功能,讓一個進程可以以命令擁有者的權限運行,即可以使進程的實際用戶ID和有效用戶ID不相同。你可以用ls -l去查看su這個命令,在它的擁有者的x權限位上寫的一定是個s(小s),passwd命令也是一樣,他們擁有相同的功能。這個s位的意思是 執行該命令的用戶可以以該命令的擁有者權限來執行,如果你把這個s位取消了,也就只有su的擁有者可以su了。
現在來進一步解釋下吧,希望你能看的懂。
當我們以root執行su時,su命令會以當前shell進程為父進程來創建一個新的shell進程,這個shell進程是提供給我們所要su到的那個用戶使用的,而root的shell進程仍然存在,反過來也是一樣的,這就是你所問的問題的原因,因為之前那個用戶的shell進程還沒關閉,你可以使用exit退出一下,可以看到,並不是退出登錄了,而是回到之前的那個用戶去了。因為它們是父子進程的關系,子進程的結束當然 不會影響到父進程的執行了。但是我們如果強行殺死父進程,那就直接退出了。
其實很多人並不了解,whoami和who am i的區別,他們的作用是不同的。
who am i 顯示當前shell進程的實際用戶ID。
whomai 顯示當前shell進程的有效用戶ID。
很多時候,這兩個輸出是一樣的,以至於我們以為這兩個命令的作用是相同的。
實例:root@yunhw-Aspire-4750G:~# who am i 
root pts/0 2011-12-10 13:13 (:0.0)
root@yunhw-Aspire-4750G:~# whoami
root
root@yunhw-Aspire-4750G:~#ps -ef
root 2939 2935 0 13:18 pts/0 00:00:00 bash
root@yunhw-Aspire-4750G:~# su - yunhw
yunhw@yunhw-Aspire-4750G:~$ who am i
root pts/0 2011-12-10 13:13 (:0.0)
yunhw@yunhw-Aspire-4750G:~$ whoami
yunhw 
root@yunhw-Aspire-4750G:~#ps -ef
root 2939 2935 0 13:18 pts/0 00:00:00 bash
yunhw 2958 2939 0 13:19 pts/0 00:00:00 su - yunhw
yunhw 2966 2958 7 13:19 pts/0 00:00:00 -su
root@yunhw-Aspire-4750G:~#sudo kill -9 2939
這條命令一執行,也就完全退出了。

 

2:原文地址是 http://my.oschina.net/u/162204/blog/158743

su  后面不加用戶是默認切到 root
su  是不改變當前變量
su - 是改變為切換到用戶的變量 
也就是說su只能獲得root的執行權限,不能獲得環境變量

而su -是切換到root並獲得root的環境變量及執行權限

語法:

$ su [user_name] 
su  命令可以用來交互地更改你的用戶ID和組ID。  Su是switch user 或set user id的一個縮寫。這個命令讓你開啟一個子進程,成為新的用戶 ID 和賦予你存取與這個用戶ID 關聯所有文件的存取權限。因此,出於安全的考慮,你在實際轉換身份時,會被要求輸入這個用戶帳號的密碼。  
如果沒有參數,su 命令將你轉換為 root(系統管理員)。root 帳號有時也被稱為超級用戶,因為這個用戶可以存取系統中的任何文件。也正是這個原因,許多人將su命令看成是 supper-user(超級用戶)的一個縮寫。當然,你必須要提供 root密碼。  想要回到你原先的用戶身份,不要再使用 su 命令,你只需要使用 exit命令退出你使用su命令而生成的新的對話進程。 
$ su – username 
一些配置文件是為你的對話線索而設立的。當你使用命令 su username時,你的對話特征和你原始的登錄身份一樣。如果你想要你的對話進程擁有轉換后的用戶 ID一致的特征,你要使用短斜杠: su – username。

 

3:原文地址是 http://www.jb51.net/LINUXjishu/57936.html

 linux su 命令 

建議大家切換用戶的時候 使用 su - root 這樣,否則可能發現某些命令執行不了 

關於su 、su - 及 sudo的區別 請往下看 

1.命令作用 

su的作用是變更為其它使用者的身份,超級用戶除外,需要鍵入該使用者的密碼。 

2.使用方式 

su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 

3.參數說明 

-f , –fast:不必讀啟動文件(如 csh.cshrc 等),僅用於csh或tcsh兩種Shell。 

-l , –login:加了這個參數之后,就好像是重新登陸一樣,大部分環境變量(例如HOME、SHELL和USER等)都是以該使用者(USER)為主,並 

且工作目錄也會改變。如果沒有指定USER,缺省情況是root。 

-m, -p ,–preserve-environment:執行su時不改變環境變數。 

-c command:變更賬號為USER的使用者,並執行指令(command)后再變回原來使用者。 

–help 顯示說明文件 
–version 顯示版本資訊 

USER:欲變更的使用者賬號, 
ARG: 傳入新的Shell參數。 

4.例子 

su -c ls root 變更帳號為 root 並在執行 ls 指令后退出變回原使用者。 

su [用戶名] 

a>在root用戶下, 輸入 su 普通用戶. 則切換至普通用戶, 從root切換到變通用戶不需要密碼 

b>在普通用戶下, 輸入 su [用戶名] 
提示 password: 
輸入用戶的PASSWORD, 則切換至該用戶 

擴展閱讀一:Linux下 su命令與su - 命令有什么區別? 

su 是切換到其他用戶,但是不切換環境變量(比如說那些export命令查看一下,就知道兩個命令的區別了)

su - 是完整的切換到一個用戶環境 

所以建議大家切換用戶的時候,盡量使用 su - linuxso 這樣 否則可能發現某些命令執行不了 

擴展閱讀二:su和sudo的區別 

由於su 對切換到超級權限用戶root后,權限的無限制性,所以su並不能擔任多個管理員所管理的系統。如果用su 來切換到超級用戶來管理系統,也不能明確哪些工作是由哪個管理員進行的操作。特別是對於服務器的管理有多人參與管理時,最好是針對每個管理員的技術特長和 管理范圍,並且有針對性的下放給權限,並且約定其使用哪些工具來完成與其相關的工作,這時我們就有必要用到 sudo。 

通過sudo,我們能把某些超級權限有針對性的下放,並且不需要普通用戶知道root密碼,所以sudo 相對於權限無限制性的su來說,還是比較安全的,所以sudo 也能被稱為受限制的su ;另外sudo 是需要授權許可的,所以也被稱為授權許可的su; 

sudo 執行命令的流程是當前用戶切換到root(或其它指定切換到的用戶),然后以root(或其它指定的切換到的用戶)身份執行命令,執行完成后,直接退回到當前用戶;而這些的前提是要通過sudo的配置文件/etc/sudoers來進行授權;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM