歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux下Login和Logout詳解

Linux下Login和Logout詳解

日期:2017/3/1 14:02:29   编辑:關於Linux
Linux下Login和Logout詳解 Login 是你用Linux系統工作時面對的第一個進程,這對於使用終端以及通過網絡使用Linux都是正確的。但是login進程本身並不是你在終端上見到的,你見到的其實是getty (get TeleTYpe terminal ,早期電腦上的意思是獲取紙帶終端,現在可以直接理解成打開終端),它是由init(通過/etc/inittab)在啟動login進程時添加而啟動的。 所以完整的啟動鏈是:init -> getty -> login -> passwd -> shell -> applications 。這是從技術上來講的在真正實現時還是有點不同的,比如有時候login和passwd是在一個程序裡面,但是上面這個鏈是UNIX中很典型的。 那麼為什麼我們要這麼做?為什麼不能寫一個程序來處理所有的工作。讓一個getty程序同時處理login和passwd不好麼? 讓一個程序只做一件簡單的事然後鏈接許多簡單的工作創造了這個復雜的運行環境,這是保證UNIX穩定的關鍵,而且當你創造你的系統時這也是一個很關鍵的設計准則。(參見KISS准則,UNIX中的經典) Debian6上默認提供六個終端(Ctrl+Alt+F1~F6,因為F7,F8用來打開圖形界面而不是用作終端),但是實際上內核默認是64個終端,那麼其他的終端哪去了?假如你在Linux虛擬機上,你可以訪問tty10甚至tty12(使用Ctrl+Alt+F*),但是你沒有更多的功能鍵,以後我們在討論如何訪問其他的終端。 Logout 進程 logout進程很簡單,他需要終止login進程打開的任務或者shell。注意,它要關閉的不只是一個shell,而是所有的東西。 假如我使用long作為用戶登錄我會得到一個shell,假如我使用 ls,我會得到ls的結果然後我logout。所以logout的shell會發送一個信號到父進程用來通知它shell被終止了。但是shell的父進程是 login 而且此時 login 已經停止運行了(logout會終端login和shell),那麼誰來獲取shell的返回值呢? 是 init 來接受 logout 的返回值,在關閉getty、login、logout等所有後,init 重新打開一個getty來等待輸入。 下面我們看個好玩的東東: -rwxr-xr-x 1 root root 975488 Dec 29 2012 /bin/bash -rwxr-xr-x 1 root root 49008 May 25 2012 /bin/login -rwxr-xr-x 2 root root 32040 Dec 11 2012 /sbin/getty -rwsr-xr-x 1 root root 51096 May 25 2012 /usr/bin/passwd 我們都可以看到,除了passwd其他都有著rwxr-xr-x權限,所有他們可以被任何用戶執行,而passwd是-rwsr-xr-x權限,這個s是setuid的標志,該位是讓普通用戶可以以root用戶的角色運行只有root帳號才能運行的程序或命令,所以passwd是運行在root權限下(即使是一個普通用戶使用)。有了這個,我們可以降低安全風險。 Login配置 你使用login登錄,你不但打開了一個shell而且還配置了你的運行時環境(runtime env),這個配置如果在/etc下是系統級別的配置,如果在你的個人home目錄下則是個人配置。 大概劃分是這樣的: /etc/profile - 面向所有的用戶和所有的shell /etc/bash.bashrc - 面向所有用戶的bash配置 ~/.bashrc - 你個人的bash配置 所以在實際使用時我們需要根據需求的不同將配置放在不同的配置文件中。比如說,一個配置對所有使用這個系統的用戶都有用,我們就需要放在/etc/profile下。 su 提到用戶登錄,這裡說下root權限,使用su命令(su -)你不但切換了用戶權限而且你創建了一個新的login會話,所以你得到的不只是一個root,而且是一個全新的運行時環境,這對於安全問題來說是很敏感的,所以使用root權限是一定要注意。當然,你也可以使用sudo來讓自己的用戶臨時獲得root權限,這對於桌面用戶來說還是個不錯的方法,但是對於比較大的系統,給用戶sudo權限一定要注意,最好不給! Exit vs logout 使用login登陸系統,那麼退出系統我們可以選擇exit或者logout,那麼這兩者之間有區別麼?大部分系統來說這兩者之間是沒有區別的,但是他們兩者還是有一點點的區別的:logout退出時會執行~/.bash_logout(如果有的話),而exit只會作退出工作而不執行~/.bash_logout。除此之外別無其他區別。
Copyright © Linux教程網 All Rights Reserved