跳轉到內容

UNIX 計算安全/訪問授權

來自華夏公益教科書
把你的密碼當作你的牙刷一樣對待。不要讓其他人使用它,每六個月更換一次。
—克利福德·斯托爾

為了連線到基於 UNIX 的系統並執行活動,使用者必須擁有一個帳戶。該帳戶必須具有唯一的數字識別符號,該識別符號與帳戶名稱或*使用者名稱*相關聯。該帳戶還有一個*密碼*,這是一個使用者知道的字串,當訪問系統時,該字串用於對帳戶訪問進行身份驗證。*使用者名稱*和*密碼*通常足以將使用者連線到系統。

使用者可以在同一個系統上擁有多個帳戶,或者在不同的系統上擁有帳戶。如果帳戶在同一個系統上,則每個帳戶可以使用不同的名稱,或者可以在多個系統上共享一個通用名稱。根據運營系統的個人或機構,個人使用者可能可以選擇他們的帳戶名稱,或者他們可能被分配一個名稱。通常,分配的名稱將基於使用者的真實姓名,並且將是系統上的唯一識別符號。

*使用者名稱*也是登入名,這意味著它是使用者在提示登入時在鍵盤上鍵入的名稱。在 UNIX 系統上,*使用者名稱*的第一個字元必須是字母字元。字元的大小寫很重要:“Joe1234”與“joe1234”是不同的登入名。在大多數情況下,帳戶以小寫字母開頭,這是一個慣例。登入名的其餘部分可以包含數字、字母字元或下劃線。因此,星號或冒號字元對於登入名無效。具有這些特殊字元的帳戶會導致某些系統功能出現問題,例如傳送電子郵件。因此,這些字元通常在許多 UNIX 系統上被禁止。

UNIX 系統通常提供一組系統帳戶來執行特殊操作。這些帳戶可能包括諸如rootbinsyslpuucp之類的帳戶。root帳戶具有授予使用者增強許可權的特殊功能,因此通常會執行預防措施以防止未經授權的個人獲取它。稍後將詳細介紹。

/etc/passwd

[編輯 | 編輯原始碼]

UNIX 帳戶的資訊儲存在位於/etc/passwd的文字檔案中。此檔案包含每行一個帳戶的資訊,每行又細分為用冒號分隔的欄位。欄位的含義如下

登入名 帳戶的文字名稱
密碼 單向雜湊加密的密碼
使用者 ID 帳戶的唯一數字識別符號
組 ID 帳戶的預設組識別符號
GECOS ID 以逗號分隔的使用者資訊的列表
主目錄 使用者的初始工作目錄
shell 用於 shell 介面的程式

當用戶獲得帳戶時,他們會獲得一個預設密碼,以便他們可以登入。當他們連線到系統時,系統會提示他們輸入登入名,然後提示他們輸入密碼。如果系統配置正確,使用者可以輸入他們提供的密碼,並且密碼在鍵入時不會顯示在螢幕上。(某些系統會為每個密碼字元列印一個星號,而另一些系統則不會顯示任何內容。)如果密碼有效,使用者將被允許訪問系統。(系統可能會提示他們立即將密碼更改為只有他們知道的密碼。)

系統以加密形式將密碼儲存在/etc/passwd檔案中。UNIX 使用一種稱為單向雜湊的加密技術。這意味著密碼是使用沒有已知解密方法的技術進行加密的。也就是說,沒有有效的辦法可以根據加密字串確定密碼。

每次使用者登入時,都會對其輸入密碼進行加密並與/etc/passwd檔案中的加密進行比較。如果兩者匹配,則允許使用者訪問。如果兩者不匹配,則拒絕訪問,並再次提示使用者登入。(每個連線允許多次嘗試,以防使用者不小心輸入了錯誤的登入名或密碼。)請注意,密碼也區分大小寫,因此不小心忘記關閉caps-lock鍵可能會導致拒絕訪問。

如果/etc/passwd檔案存在格式錯誤,系統命令將無法讀取檔案中更低位置的條目。如果使用者無法登入到系統,這可能是原因。(這就是為什麼root帳戶必須始終是第一個條目,以便系統管理員可以登入並解決passwd檔案的問題。)UNIX 系統可以包含一個名為pwck的命令,該命令可以執行以檢查passwd檔案的格式問題。建議定期執行此命令,以確保不會引入潛在問題。

在編輯/etc/passwd檔案時,vipw命令使用鎖定機制來阻止另一個管理員同時編輯同一個檔案。(同步編輯會導致來自一個操作員的更改覆蓋來自另一個操作員的更改,這是一種不幸的情況,在多使用者系統上沒有檔案鎖定。)對於所有系統管理員來說,使用vipw命令是一個好習慣,假設他們精通vi的使用。

選擇密碼

[編輯 | 編輯原始碼]

使用者登入到系統後,可以使用passwd命令更改其密碼。然後系統會提示使用者輸入其當前密碼,然後會提示使用者兩次輸入新密碼選擇。(重複提示是為了確保使用者第一次沒有意外地輸入了錯誤的新密碼。)新密碼被接受後,加密的密碼欄位將更新到/etc/passwd檔案中的使用者帳戶條目中。

密碼是系統安全的重要組成部分,用於驗證使用者的身份。因此,必須選擇密碼,使其難以猜測。簡單易猜的密碼通常是未經授權訪問的原因,並且存在一些程式可以透過嘗試常見的密碼來嘗試訪問系統。

以下是一些示例,說明典型密碼可以使其相對容易猜測

  • 人的姓名
  • 他們孩子的姓名
  • 生日
  • 諸如“guess”或“password”之類的簡單單詞
  • 地名
  • 人的電話號碼
  • 常見的鍵盤模式,例如“qwerty”
  • 計算機的名稱
  • 反過來拼寫的單詞
  • 上面列出的內容之一,後面跟著一位數字

現代 UNIX 系統具有安全配置,在設定或更改密碼時提供一定程度的強度檢查。例如,密碼可能需要至少八個字元長,並且包含一個或多個大寫字母和小寫字母、數字以及特殊字元(例如 *、$、#、%、&c)。這些措施可以使密碼更難確定。在可能的情況下,建議實施此類功能,以確保選擇強密碼。

當用戶在多個系統上擁有帳戶時,他們可以選擇在每個系統上使用相同的密碼,以方便記憶。不幸的是,這意味著如果在一個系統上的密碼被其他人確定,他們也可能能夠獲得對其他系統的未經授權的訪問。除了教育使用者並阻止在多個系統上使用密碼之外,系統管理員很難防範這種可能性。

未經授權的登入嘗試

[編輯 | 編輯原始碼]

不幸的是,有些人可能會嘗試透過嘗試使用其他人的帳戶來獲得對系統的未經授權的訪問。他們可能訴諸秘密手段從使用者那裡獲得正確的登入資訊,例如在登入期間觀察他們在鍵盤上的操作,使用社會工程學誘使操作員或使用者讓他們訪問,或者設定模擬正常登入的欺騙程式。

另一種獲得未經授權訪問的方法是嘗試猜測登入名和密碼。通常,登入名會在訪問期間列印在螢幕上,因此該人可能已經知道帳戶名稱。但是,密碼應該在螢幕上保持隱藏狀態。但是,如果使用者選擇了弱密碼,仍然可能能夠猜測密碼。

為了讓猜測密碼的任務更難,大多數UNIX系統在登入系統中內建了限制。第一個限制是在每次登入失敗嘗試之間設定時間延遲,這樣每次嘗試猜測的時間都會更長。另一個限制是限制登入嘗試次數,超過次數後將斷開會話。此外,登入失敗的嘗試會被記錄在日誌檔案中,例如btmp。系統管理員可以定期檢查日誌檔案,檢視是否有異常的登入失敗活動(例如一天內數百次嘗試)。

除了帳戶識別符號之外,UNIX還可以根據組成員資格來限定對系統資源的訪問許可權。每個組可以包含多個帳戶,而一個帳戶可以屬於一個或多個組。一個帳戶將有一個預設組,它們屬於該組,例如users,此資訊儲存在/etc/passwd檔案中。

newgrp命令用於在不更改帳戶的情況下切換您的組。只要組存在並且您的帳戶屬於該組,您就會被更改為選定的組名。現在您將擁有適合該組的訪問許可權。

該組用於管理由多人共享的資訊或資源。它通常用於避免使用共享帳戶的需要,這被認為是不安全的做法。在可能的情況下,系統管理員應要求使用組來提供對共享資源的訪問許可權,並避免使用共享帳戶。有兩個原因。首先,幾乎不可能跟蹤或審計共享帳戶成員的活動。其次,更難終止特定個人對共享帳戶的訪問許可權。

/etc/group

[編輯 | 編輯原始碼]

UNIX組的資訊儲存在位於/etc/group的文字檔案中。該檔案每行包含一個組的資訊,每行被細分為以冒號分隔的欄位。欄位的含義如下

組名 組的文字名稱
密碼 單向雜湊加密的密碼
組 ID 帳戶的預設組識別符號
成員 以逗號分隔的組名列表

要屬於除預設組之外的其他組,必須將帳戶新增到相應的成員列表中。以下是一個/etc/group檔案的簡短示例

 root::0:root
 other::1:root
 bin::2:bin
 users::20:
 secrets::30:billy_bob,sally_sue,frederick

檔案中的每一行都描述了一個組。在此示例中,帳戶billy_bobsally_suefrederick都是secrets組的成員,即使它們的預設組是users。請注意,如果一個組有密碼,即使使用者不是成員,也可以使用密碼更改到該組。

/etc/passwd檔案的pwck命令一樣,通常也提供一個grpck命令,可用於檢查/etc/group檔案的格式。建議使用此命令檢查是否已引入格式錯誤。

識別符號

[編輯 | 編輯原始碼]

UNIX使用整數值來跟蹤和儲存訪問資訊。使用者識別符號或uid是與UNIX系統上使用者的帳戶相對應的識別符號。該識別符號由系統內部使用,用於確定潛在敏感資料和程序的所有權。當系統需要列出資料檔案或程序的所有者時,它通常會將識別符號映射回/etc/passwd檔案中的帳戶名稱,然後顯示資訊。

uid的值通常可以從0到系統支援的最大整數減1。(負識別符號,特別是-2,僅用於特殊用途。)

使用者識別符號通常從100開始分配,每個新帳戶都透過分配以前未使用的識別符號來新增。當某個帳戶因某種原因被刪除時,帳戶條目將從/etc/passwd檔案中刪除。但是,這可能會導致該帳戶建立的檔案具有未分配的uid。隨後建立的新帳戶可能會被分配以前使用的uid,從而使該新使用者成為先前帳戶建立的檔案的所有者。為了防止這種情況發生,系統管理員需要定期維護以查詢缺少有效帳戶的檔案。

預設帳戶

[編輯 | 編輯原始碼]

在系統初始安裝期間,供應商介質可以載入選定的預設帳戶。這些帳戶通常用於系統管理和維護。按照慣例,使用者識別符號0到99幾乎總是為這些帳戶保留,例如rootdaemonbinsys等等。在許多情況下,大多數這些帳戶的密碼都被停用,並且uid用於系統檔案或程序。

特別是root帳戶,其uid為零 (0),是一個特殊帳戶,它擁有比任何使用者更高的許可權。它通常被稱為超級使用者帳戶。需要採取特殊預防措施來防止不適當的個人訪問此帳戶,並且UNIX系統的許多安全相關配置旨在防止這種情況發生。

在某些環境中,可能需要在多個操作員之間共享某些管理功能。當然,這樣做會帶來缺點,即當多人擁有超級使用者訪問許可權時,維護安全系統的難度更大。當系統出現故障時,這也會使執行根本原因分析變得更加困難。

有幾種方法可以幫助降低共享超級使用者訪問許可權的風險,儘管它永遠無法降至零。首先是配置系統,以便無法直接訪問root帳戶。相反,操作員必須使用其使用者帳戶登入,然後su(切換使用者)到超級使用者帳戶。這可以提供有關何時以及由誰訪問超級使用者帳戶的審計跟蹤。它還有助於保護系統免受直接入侵超級使用者帳戶的嘗試。相反,必須先破壞使用者帳戶,然後才能破壞超級使用者帳戶。

限制超級使用者帳戶訪問許可權要求的更復雜方法是透過使用基於角色的訪問控制。這允許指定的使用者帳戶執行通常僅限於root帳戶的一組有限操作。(例如,允許受信任的使用者帳戶修改伺服器的印表機配置。)有很多工具可以使用,包括開源工具和供應商提供的工具,可用於提供基於角色的訪問控制功能。本主題將在後面的章節中詳細介紹。

影子密碼檔案

[編輯 | 編輯原始碼]

雖然使用者的密碼在UNIX系統上以加密字串的形式儲存,但任何可以讀取加密值的人都可以使用程式來測試各種常用的密碼,看看它們是否匹配。也就是說,程式可以嘗試一系列猜測並對其進行加密,看看它們是否與使用者密碼欄位中的值匹配。程式還可以使用一個單詞詞典,對每個單詞進行加密,並依次將它們與系統上的每個加密密碼進行比較。

為了讓猜測密碼程式的這項任務更難一些,加密的密碼包含一個隨機的兩位數“鹽”。即使兩個帳戶的密碼匹配,這個隨機鹽值也最有可能導致不同的加密字串值。因此,程式必須重新計算每個猜測和每個帳戶的加密字串。儘管如此,現代UNIX系統仍然可以在相對較短的時間內處理大量猜測,這使得對密碼僅由簡單單片語成的系統進行暴力破解攻擊變得非常可行。

當密碼使用規則形成時,例如用數字分隔兩個單詞,任務就會變得稍微困難一些。但是,狡猾的人可能擁有大量的計算資源,因此猜測弱密碼可能只是一個時間問題。(例如,一個這樣的程式叫做crack,系統管理員可以使用它定期檢查其使用者的密碼,以查詢可猜測的值。)

為了阻止這種技術,加密的密碼可以儲存在單獨的檔案中,通常稱為影子密碼檔案。只有root帳戶可以讀取影子密碼檔案的內容,並且/etc/passwd檔案的密碼欄位被星號替換。此功能的實現將根據UNIX供應商而有所不同。影子密碼位於Sun系統上的/etc/shadow以及HP-UX系統上的/tcb下。透過這種方式“遮蔽”加密密碼,猜測密碼的任務變得更加困難。

帳戶管理

[編輯 | 編輯原始碼]

正在建設中...

  • 文書工作和記錄
  • 修改密碼
  • 密碼老化
  • 停用帳戶
華夏公益教科書