Keepalive packet

【譯名】無

【說明】在 TCP 中所使用的一種封包,用來測試目的地主機是否正常的訊息,當主機正常時,封包被送到遠端的主機應該會有回應,如果在一段時間內未有回應的話,企圖連結的動作便會中止這樣的一個限制。

【參考】TCP/IP, packet

KERBEROS

【譯名】無

【說明】一般人用 ftprlogin telnet 等服務時,都會要打入自己的通行密碼,如果有人使用一些特別的網路觀察設備,就可以看到您的通行密碼了,UNIX 上有些指令或軟體也可以提供同樣的功能,將在網路上的每一個封包展示出在螢幕上,無論您用 SECURE RPC SECURE telnet 等,通行密碼仍要經過網路才可被檢查合不合格,對這種侵入,UNIX 本身是毫無辦法的。另外,如果有人忘了簽離或是數據線路遭人插入,一旦侵入者得到機會使用他人的帳戶,他可能永遠不願意簽離,您如何確定所有正在使用的人都是合法的呢?唯一的方法就是每隔一段時間,就再問一次通行密碼,可是我們不可能每過一段時間就將使用者的處理程序殺掉或是重新啟動整個系統,KERBEROS 就是對上述的問題提供了解決的方案。

KERBEROS 是由 MIT ATHENA 計劃中發展出的產品,它本身是有點複雜,所以讓我們先來看一個關於 KERBEROS 的簡單例子。

假設您去一個遊樂場,進門時會有賣票處,您就將這賣票處當作 KERBEROS 的伺服器,賣票處檢查合格(譬如要至少 10 歲或一定要有會員証等)後,發給您一張許可証,証上用特別的符號寫明了您的名字、有效時間(假如是 8 小時)等資料,除了許可証外,還有一個密碼鎖,您可用密碼鎖將自己的証件關好,這個密碼鎖只有您和場內售票亭內的人才知道,在遊樂場內,另有一個售票亭(算是 KERBEROS TICKET GRANT SERVICE),您要玩任何遊戲都還要到此售票亭內去買票,此處的「遊戲」即為任何的服務,如 rlogin 等,售票亭的人在您來買票時,要先確定您的確是許可証的持有人,所以問了您的身份後用同樣的密碼將鎖打開,在確定了您的身份無誤後,接著還要看您的許可証的有效期限是否到期了,如果到期了,您必須到原賣票處去再買一張新的(KERBEROS 的指令 kinit 即在做此功能),當您拿到售票處的票後,才可去玩所要玩的遊戲,在拿票時,售票亭的人也同樣的給您另一個暫用的密碼鎖,在您玩遊戲前,將自己的証件用密碼鎖關好,連同票交給此遊戲的收票員,如果您想換另一個遊戲玩時,這票不能用而要再去購買新的,您拿的票也不能借給別人玩,因為要玩之前,收票員會用您的密碼來打開鎖以檢查持票人的身份,同樣的,收票員也須確定您的票期限是否有效?是否用過了?所以就算您是持票人,玩過一次後,要玩第二次時,仍需要去售票亭索取新的票。玩完遊戲後,暫時的密碼鎖可以丟了,但和售票亭共用的密碼鎖還不可扔,須等到許可証到期才可扔。

現在讓我們進一步的解釋 KERBEROS,首先我們來看所要用的符號:

符號

意       義

c 用戶端(client)。
Kerberos KERBEROS 的 伺服器。
tgs KERBEROS 的 TICKET GRANT SERVICE。
s 使用者要用的 伺服器。
Kx x 的私用鎖,如 Kc 指用戶端 的鎖,通常即為其通行密碼。
Kxy x 和 y 的「SESSION KEY」。
Txy x 拿到的 TICKET 而可以使用 y,此 TICKET 內存有關於 x 的一些資料,因為 x 並不需要知道其內容,所以這 TICKET 都是用 y 的鎖加上密碼的。
{info}Kx 用 Kx 將 info 加上密碼。
Ax x 的授權者(AUTHENTICATOR)。
addr 指用戶端的 IP 地址。

KERBEROS 規定,要使用任何一個伺服器都要有 TICKET。一般而言,ATICKET 是由 TICKET GRANT SERVICE 來發,但一開始使用者簽入時,TICKET GRANT SERVICE (簡稱 TGS )對他而言也是一個新的伺服器,所以他也要有和 TGS 聯絡的 TICKET ,因此 KERBEROS 伺服器會發給他 TICKET,這 TICKET 在前一段中即將其稱為「許可証」。

在使用者簽入時打入他的簽入名字後,該機器上的簽入(login)程序會|把它簽入的名字及使用 TGS 的要求一起送入 KERBEROS 的伺服器上。KERBEROS 伺服器收到後會查看簽入之名字是否合法,如果沒有問題,KERBEROS 伺服器便產生一個只有在此 用戶端 TGS 之間可以使用的「SESSION KEY」以及使用 TGS TICKET(用 Tc,tgs 來表示)。TICKET 內包括了 CLIENT 的名字,目前的時間,TICKET 的有效期,用戶端 IP 地址,因為這 TICKET 只是當使用者和 TGS 連絡時遞給 TGS,所以使用者並不需要知道內部有什麼,為了安全起見,伺服器便使用只有 TGS 所知的鎖將 TICKET 加入了密碼(用 {Tc,tgs}Ktgs 來表示),最後將加了密碼的 TICKET SESSION KEY 所使用的鎖(也就是使用者的通行密碼)把兩者都加上密碼(用 {Kc,tgs,{Tc,tgs}Ktgs}Kc),再送回了用戶端上的 login 處理程序。

login 程序收到後,利用使用者打入的通行密碼來解碼,如果成功了,表示是合格的簽入,而使用者也拿得了可使用 TGS TICKET SESSION KEY,由此可知,在 KERBEROS 的環靜下,通行密碼是不需要離開本身機器的,因此不會被持有網路觀察設備的侵入者偷看到。

Kernel

【譯名】核心程式

【說明】核心程式是 UNIX 作業系統中的重心,它負責了作業系統中最主要的幾個功能﹐包括:處理程序的排程、記憶體管理、提供系統呼叫介面(system call interface 以及提供處理程序間的通訊功能等。

由於核心程式是如此地重要﹐因此必須受到妥善的保護﹐以避免被不正確的操作破壞了。所以﹐核心程式擁有自己的作業區域﹐並和使用者的作業區域隔離﹐如此一來﹐使用者無法觸及核心區域﹐自然無法破壞核心程式了。

其實我們不妨將 kernel 視為基本的作業系統(base operating system),它是應用程式與硬體之間的橋樑,其主要是由檔案子系統(file subsystem)和處理程序控制系統(process control system) 所組成。

核心程式的主要功用如下:

  1. 檔案管理及其安全維護。
  2. 輸入/輸出服務。
  3. 處理程序排程和管理。
  4. 記憶體管理。
  5. 中斷(Interrupt)和錯誤控制。
  6. 系統計費(System Accounting)。

Kernel mode

【譯名】核心模式

【說明】當一個程式執行了系統呼叫(system call)後,就會從原本的「使用者模式」(user mode) 變成「核心模式」,並且具有執行核心常式(kernel code)的權利。這個時候我們稱此處理程序(process)是在「核心模式」下執行。

【參考】system call, user mode, process

Kernel process

【譯名】核心處理程序

【說明】在UNIX系統中,所有的處理程序(processes)可分為三類:

  1. 使用者處理程序(user process)。
  2. 核心處理程序(kernel process)。
  3. daemon 處理程序。

當一個處理程序被啟始後,它多半是執行它本身的程式碼,在此刻這個處理程序我們稱作「使用者處理程序」。但是一旦這個程式執行了系統呼叫(system call),那麼它就變成「核心處理程序」,並具有執行核心碼 (kernel code) 的權利了,直到離開系統核心空間(kernel space)為止。

核心處理程序典型的兩個例子是「處理程序排程程式」(process sheduler )及「page daemon」名詞解釋

【參考】system call, processdaemon process, kernel space

Kernel space

【譯名】核心區間

【說明】「核心區間」指的是記憶體中的一塊位置,在該處載有一切系統核心的常式。使用者不可以直接使用它,必須經由系統呼叫的過程才能獲得這些系統核心常式的服務。它包含三個部份:

1. 本文區段:儲存系統核心常式的程式部份。

2. 資料區段:記載各處理程序、檔案之間的資料、表格、參數等。

3. 堆疊區段:處理所有系統呼叫的功能運作。

同時系統核心區間會為每一個處理程序保留一塊記憶體空間,用來記錄此處理程序現在執行的狀況。

【參考】system call, process

Kernel stack

【譯名】核心堆疊

【說明】核心堆疊的作用與使用者堆疊類似,但是它所儲存的訊息是供核心程式來取用的,例如核心程式所使用的參數、核心程式執行結束後的返回地址等。

Korn shell

【譯名】無

【說明】Korn shell(簡稱 K shell)是由 David Korn 在貝爾實驗室所發展出來的一種新的 shell。由於 korn shell System V Bourne shell 向上相容(upward compatibility),除了少許的不相同外﹐Korn shell擁有 Bourne shell 所提供的一切特性;而在 Bourne shell 下所發展的程式也可以在 Korn shell 下執行。

Korn shell 所擁有的特點包括:

  1. 內建的編輯器可以模擬 emacs vi 以及歷史清單)。
  2. 內建的整數運算能力。
  3. 處理字串的能力。
  4. 命令的別名(alias)。
  5. 提供陣列(array)的資料型態。
  6. 工作控制(job control)。

【參考】Bourne shell