萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> Linux管理員手冊(6)

Linux管理員手冊(6)

class="22324"> 說明當一個用戶登錄和注銷時發生了什麼。較詳細地說明後台進程的各種交互、log文件、配置文件等

  通過終端登錄

  首先,init 確認有一個getty 程序提供給終端連接(或控制台)。 getty 偵聽終端等候用戶告知它要登錄 (這通常意味著用戶必然鍵入些什麼)。當它注意到一個用戶,getty 輸出一個歡迎信息(存在/etc/issue 中),並提示用戶名,最後運行login 程序。 login 作為一個參數得到用戶名,並提示用戶輸入口令。如果正確,login 啟動給此用戶設置的shell;否則退出並終止進程 (可能在再給用戶一個機會輸入用戶名和口令之後)。 init 注意到進程終止,就給這個終端啟動一個新的getty 。

  注意唯一的新進程是由init 產生的(用fork 系統調用); getty 和login 只是替代進程運行的程序 (使用exec 系統調用)。

  為注意用戶,串行線需要一個單獨的程序,因為終端活動時可以(傳統上也是)變得復雜。 getty 也適應連接的速度和其他設置,這對撥號連接特別重要,因為連接和連接的參數可能不同。

  getty 和init 有多個版本在使用,各有優缺點。學習你的系統的版本也了解其他版本是個好主意(你可以用 Linux Software Map來找。)如果你沒有撥入,可能不必考慮 getty ,但 init 仍然很重要。

  通過網絡登錄

  一個網絡中的2台計算機通常通過一個物理電纜連接。當他們通過網絡通信是,參與通信的每個計算機裡的程序通過虛擬連接virtual connection通信,即一些虛構的電纜。虛擬連接的每端的程序,獨占自己的(虛擬)電纜。然而,因為這電纜不是真的,只是虛構的,所有計算機的操作系統可以在同一物理電纜上有多條虛擬連接。這樣,只用一條電纜,多個程序可以不必考慮其他通信而相互通信。使用同一電纜使多台計算機是可能的;2台計算機間存在的虛擬連接,其他計算機會忽略他們不參加的連接。

  那是一個復雜和抽象的真實描述。但可能足夠理解網絡登錄與普通登錄的不同的重要原因。不同計算機上的2個程序要通信時,虛擬連接建立。由於理論上可能從網絡上的任何一台計算機登錄到任何一台計算機,因此可能有極大數量的潛在的虛擬通訊。因此,為每個潛在的login啟動一個getty 是不現實的。

  有一個進程inetd(與getty 協同)處理所有的網絡登錄。當它發現一個進來的網絡登錄(即發現某台其他計算機來的新的虛擬連接), 它啟動一個新進程來處理那個登錄。原來的進程繼續偵聽新的登錄。

  更復雜的是,網絡登錄有多個通訊協議。2個最重要的協議是 telnet 和rlogin 。除了登錄,還有許多其他虛擬連接可能建立(為FTP、Gopher、HTTP和其他網絡服務)。為要偵聽的每種類型的連接提供一個進程不是很有效,因此,只用一個偵聽器來識別連接的種類,能啟動正確的程序來提供服務。這個偵聽器叫inetd ;更多的信息請見《Linux網絡管理指南》。
  login干了些什麼

  login 程序負責認證用戶(確認用戶名和口令相配),並建立串行線,啟動shell,建立用戶的初始環境。

  部分初始化設置是輸出文件/etc/motd (每天的短信息)的內容,並檢查電子郵件。可以在用戶家目錄中產生一個叫.hushlogin 的文件來是上面所述的失效。

  如果存在文件/etc/nologin ,就不允許登錄。這個文件一般由shutdown 及其相關的東西產生。 login 檢查這個文件,如果這個文件存在,就拒絕接受登錄。如果這個文件確實存在,login 就會在退出之前,將它的內容輸出到終端。

  login 將所有失敗的登錄企圖登記在系統log文件中 (通過syslog )。它也登記所有的root的登錄。這些都對跟蹤入侵者有用。

  當前登錄著的用戶列在/var/run/utmp 中。這個文件直到系統下次啟動或關機前有效。系統剛啟動時它被清空。它列出了每個用戶和用戶使用的終端(或網絡連接),及一些有用的信息。 who 、w 及其他類似的命令查看utmp 文件得到都有誰登錄著。

  所有成功的登錄記錄在/var/log/wtmp 中。這個文件將無限制地增大,所以必須有規律的清除,例如有個每周的cron 任務來清除它。 last 命令浏覽wtmp 文件。

  utmp 和wtmp 都是二進制格式 (見utmp 的man頁);不幸的是,沒有特殊的程序無法查看它們。

  X和xdm

  META: X implements logins via xdm; also: xterm -ls

  存取控制

  用戶數據庫傳統上包含在/etc/passwd 文件中。有些系統使用影子口令shadow passwords,並把口令移到 /etc/shadow 中。許多計算機的場所可以用NIS或其他存儲用戶數據庫的方法共享帳戶;它們可能也自動從中心位置復制數據庫到所有其他計算機。

  用戶數據庫不僅包含口令,還包括有用戶的其他信息,比如其真實姓名、家目錄、登錄 shell等。這其他信息需要公用,使所有人都能讀。因此口令是加密保存的。這有缺點,任何人取得加密的口令,可以用不同的加密方法猜試口令,而不用試著真正登錄到計算機。影子口令試圖用把口令移動到其他文件的辦法避免這種情況,只有 root能讀(口令還是加密保存的)。 However, installing shadow passwords later onto a system that did not support them can be difficult.

  不管有沒有口令,確認系統中的所有口令是好的是很重要的,即不易猜。 crack 程序可用於破解口令;任何可以精確地找到的口令都不是好的口令。同時crack 可以為入侵者運行,也可由系統管理員運行以避免壞的口令。好的口令也可以被passwd 程序強制實現;這樣對CPU周期來說很有效,因為破解口令需要許多計算。

  用戶組數據庫保存在/etc/group 文件中;有影子口令的系統,是/etc/shadow.group 。

  root通常不能通過更多的終端或網絡登錄,只能通過列在/etc/securetty 文件中的終端登錄。這使得必須能夠物理存取這其中的一個終端。當然也可能通過任何終端用任何擁護登錄,然後使用su 命令變成root。

  Shell啟動

  當一個交互的登錄shell啟動時,它自動執行一個或更多預定義的文件。不同的shell執行不同的文件;更多的信息見每個shell的文檔。

  多數shell首先運行一些全局文件,例如,Bourne shell(/bin/sh ) 和它引出執行的/etc/profile ;另外,它們執行用戶家目錄中的.profile 。 /etc/profile 允許系統管理員建立一個公用的用戶環境,特別是建立PATH,以包括本地命令目錄。另外,.profile 允許用戶通過覆蓋按照自己的口味客戶化環境,如果必要,使用確省環境。
copyright © 萬盛學電腦網 all rights reserved