TLCL 學(xué)習(xí)總結(jié) 5-03
- su命令相關(guān)
在學(xué)習(xí)使用 su 命令切換用戶時發(fā)現(xiàn)一個很奇怪的現(xiàn)象逻锐。
當(dāng)?shù)谝淮问褂胹u 命令切換到root 用戶時夫晌,需要輸入root用戶的密碼才能切換成功雕薪。
hawl29@hawl29-PC:~$ su
密碼:
root@hawl29-PC:/home/hawl29#
再切換回普通用戶,只要輸入命令 su “用戶名” 即可
root@hawl29-PC:/home/hawl29# su hawl29
hawl29@hawl29-PC:~$
但是這時晓淀,在普通用戶下所袁,再輸入命令 exit 或者 ctrl+d ,可以不用輸入密碼直接切換到root用戶下凶掰。
hawl29@hawl29-PC:~$ exit
exit
root@hawl29-PC:/home/hawl29#
這樣看起來很不安全燥爷,也讓我很費解,明明已經(jīng)從root用戶切出來了懦窘,為什么再 exit 就又回到 root 了前翎?難不成 root 用戶切出來后并沒有“關(guān)閉”?不同的用戶在Linux中會像不同的程序一樣被“打開”,“關(guān)閉”嗎?
- 帶著這些問題畅涂,我搜索了TLCL;
TLCL中對su命令的描述是:
su - 以其他用戶身份和組 ID 運行一個 shell
在我們自己的 shell 會話中港华,su 命令允許你假定為另一個用戶的身份,以這個用戶的 ID 啟動一個新的 shell 會話午衰,或者是以這個用戶的身份來發(fā)布一個命令立宜。
- 這就是問題的原因。因為之前那個用戶的shell會話進(jìn)程還沒關(guān)閉臊岸,你可以使用exit退出一下赘理,可以看到,并不是退出登錄了扇单,而是回到之前的那個用戶去了。因為它們是父子進(jìn)程的關(guān)系奠旺,子進(jìn)程的結(jié)束當(dāng)然 不會影響到父進(jìn)程的執(zhí)行了蜘澜。但是我們?nèi)绻麖娦袣⑺栏高M(jìn)程,那就直接退出了响疚。
- 在linux 中使用 ps 命令可以當(dāng)前進(jìn)程的快照鄙信。
給ps命令加上選項可以顯示出更多細(xì)節(jié):
-e 顯示所有進(jìn)程
-f 顯示全格式
全格式下的輸出結(jié)果:
1.UID 用戶ID
2.PID 進(jìn)程ID
3.PPID 父進(jìn)程ID
4.C CPU占用率
5.STIME 開始時間
6.TTY 開始此進(jìn)程的TTY----終端設(shè)備
7.TIME 此進(jìn)程運行的總時間
8.CMD 命令名
我們試著用ps -ef命令查看下進(jìn)程之間的關(guān)系:
hawl29@hawl29-PC:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
hawl29 4786 941 4 15:26 ? 00:00:00 deepin-terminal
hawl29 4791 4786 0 15:26 pts/0 00:00:00 /bin/bash
hawl29 4800 4791 0 15:26 pts/0 00:00:00 ps -ef
這是從我點擊桌面上的 deepin-terminal ,跳出 terminal 界面忿晕,到輸入ps -ef 命令装诡,這一段操作在進(jìn)程上的反應(yīng)。
可以看到點擊桌面上的 deepin-terminal 后践盼,系統(tǒng)通過941進(jìn)程鸦采,創(chuàng)建4796進(jìn)程,在由4786進(jìn)程創(chuàng)建4791進(jìn)程咕幻,打開bash渔伯。
接下來我們們使用su命令切換到root用戶:
hawl29@hawl29-PC:~$ su
密碼:
root@hawl29-PC:/home/hawl29# ps -ef
UID PID PPID C STIME TTY TIME CMD
hawl29 4791 4786 0 15:26 pts/0 00:00:00 /bin/bash
root 4802 4791 0 15:27 pts/0 00:00:00 su
root 4805 4802 0 15:27 pts/0 00:00:00 bash
root 4807 4805 0 15:27 pts/0 00:00:00 ps -ef
可以看到,4786 bash進(jìn)程執(zhí)行su命令新建4802進(jìn)程肄程,再由4802進(jìn)程新建4805進(jìn)程锣吼,打開新的bash选浑。
使用kill命令關(guān)閉4805進(jìn)程,我們發(fā)現(xiàn)退出了root模式玄叠,可見切換到root用戶的確是通過新建子進(jìn)程另外打開一個bash實現(xiàn)的古徒。
root@hawl29-PC:/home/hawl29# kill -9 4805
hawl29@hawl29-PC:~$
- 補充
結(jié)合上面的實驗,我們在平時使用su命令時要注意到這點读恃,退出root用戶時不要再使用su命令切換到普通用戶隧膘,盡量使用exit,避免可能的root權(quán)限泄露。