Linux下Login和Logout詳解

來源:互聯網
上載者:User

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。除此之外別無其他區別。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.