跳轉至內容

UNIX 計算安全/賬戶安全

來自 Wikibooks,開放世界中的開放書籍

建議主題:shell 環境、密碼老化、密碼強度、點檔案、受限 shell、休眠賬戶、安全終端和 root 訪問。


"僅僅因為你疑神疑鬼,並不意味著他們沒有想要算計你。"
—匿名。

Unix 系統的使用者很可能不像系統管理員那樣瞭解其系統的安全方面。因此,使用系統的配置功能來配置這些帳戶以使其具有合理的安全性非常重要。此類配置可以應用於預設的使用者安全設定、執行程式的環境等等。根據伺服器上的訪問和資料安全要求,某些帳戶可能還需要特殊限制。

帳戶投入使用後,系統管理員仍需要保持一定程度的警惕,以確保未濫用訪問許可權,甚至未被不當人員利用。需要檢查密碼的強度並定期更新。需要停用未使用的或不需要的帳戶,以防止將其用於不當目的。

主目錄

[編輯 | 編輯原始碼]

首次建立帳戶時,通常會為其分配一個單獨的主目錄。這是一個目錄,通常位於/home或可能是/user目錄樹下,使用者可以在其中儲存其資料檔案,以及自定義的啟動和配置檔案。(這些可能包括.profile.login.cshrc等。)

主目錄應以這樣一種方式進行保護,即使用者擁有它,並且目錄的組識別符號與帳戶的預設組匹配。此外,主目錄通常被賦予許可權,以限制其他使用者訪問。750700的許可權模式很常見。

許多系統管理員提供一組預設的啟動檔案或“點”檔案,這些檔案會被複制到新的主目錄中。例如,這些檔案可以提供有用的別名和特定於站點的操作。但是,這些預設檔案需要得到適當的保護,否則它們可能會被篡改,任何新帳戶都可能很快被洩露。

缺少的主目錄

[編輯 | 編輯原始碼]

在特定使用者帳戶的主目錄不存在的情況下,許多 Unix 系統上的預設操作是在頂級或斜槓(/)目錄中啟動登入會話。這也是root超級使用者)帳戶的預設目錄。因此,這可能會導致啟動配置檔案的許可權問題和其他意外行為。

為了解決此問題,可以將root帳戶的主目錄放在其自己的目錄樹下。(例如,/root)。通常,此目錄應放置在與斜槓相同的檔案系統上,以便在系統啟動時始終存在該目錄。為root提供一個私有目錄還可以為系統管理員可能想要執行的任何工具和指令碼提供一個更安全的位置。

實施私有 root 主目錄後,系統管理員可以修改斜槓目錄下的“點”檔案,並使用它們為其使用者提供一組預設的啟動檔案。

請注意,讓使用者使用斜槓作為主目錄登入通常不是一個好主意,並且它通常表明系統存在問題。某些版本的 Unix 提供了一種方法,可以在找不到使用者的主目錄時停用使用者登入。

Shell 環境

[編輯 | 編輯原始碼]

許多可用於 Unix 系統的 shell 允許配置環境變數。其中一些變數可能存在安全隱患,而一些變數可以配置為增強系統安全性。

會話超時

[編輯 | 編輯原始碼]

當 Unix 會話無人看管一段時間後,只需要幾分鐘,不法分子就可以利用這種情況來提高自己的訪問許可權。例如,假設系統管理員離開辦公桌一分鐘,然後某人輸入了一些命令在 shell 提示符下

root$ touch /tmp/rubbish
root$ chmod 4777 /tmp/rubbish
root$ exit

這將建立一個可由所有人編輯的檔案,該檔案可以修改為執行可以授予任何執行它的人 root 許可權的命令。該個人現在擁有了系統。正因為存在此類情況,因此對於無人看管的會話而言,要麼將其鎖定,要麼斷開連線非常重要。

某些 shell 型別(包括 Korn Shell、Bash 和某些供應商版本的 Bourne Shell)將支援超時變數,即 TMOUT 或 TIMEOUT。設定此變數後,它將給出 shell 過期之前的無活動秒數。(值為零表示沒有超時。)此變數可用於在使用者或系統管理員離開活動登入會話一段時間後使 shell 過期。通常,此變數將設定為某個值(例如 300 或 5 分鐘),這將限制漏洞期。它通常設定在全域性 shell 啟動檔案中,例如/etc/profile/etc/csh.login

Unix shell 會話使用名為 PATH 的環境變數來確定可從 shell 命令列執行的命令和其他程式的位置。此變數設定為系統上有效目錄的冒號分隔列表。當在 shell 提示符下鍵入命令時,系統將搜尋 PATH 中的每個目錄,查詢名稱匹配的程式。找到匹配項後,搜尋將停止並執行程式。(出於效率原因,最近執行的命令的目錄路徑可能會儲存在快取中。)

$ echo $PATH
/usr/bin:/usr/bin/X11:/usr/contrib/bin:/usr/local/bin:.

在 Unix 中,路徑名中的單個句點(.)或空條目(::)用於表示當前工作目錄。假設某個帳戶在其 PATH 變數中恰好包含這樣一個句點,並且使用者決定執行某個命令。如果在句點之前列出的目錄中未找到該命令,則系統將檢查使用者的當前工作目錄以查詢匹配的檔案。如果找到,則系統將嘗試執行該檔案。由於使用者的當前工作目錄可能位於系統上的任何位置,並且帳戶在該位置具有訪問許可權,因此很容易看出為什麼這可能構成安全問題。

此潛在漏洞對於 root 帳戶尤其如此。假設 root 在其 PATH 變數的開頭有一個句點,然後使用者打電話報告其主目錄中的問題。系統管理員通常會將目錄更改為使用者的主目錄位置,並使用ls命令執行目錄列表。但是,如果使用者在其主目錄中放置了一個名為ls的檔案,則系統將嘗試執行它。此檔案很容易成為一個 shell 指令碼,它利用 root 帳戶的許可權授予使用者增強的許可權,然後簡單地複製ls呼叫的操作。系統管理員可能根本意識不到不當活動。

因此,重要的是 root 帳戶尤其不能在其 PATH 變數中包含句點。請注意,如果 PATH 變數的值以句點開頭或結尾,則系統將將其視為句點。因此,此外,root PATH 變數永遠不能以冒號開頭或結尾,也不能在兩個冒號之間沒有目錄的情況下並排放置兩個冒號。無論如何,系統管理員最好鍵入完整命令路徑,而不是依賴於系統。

如果使用者需要其 PATH 變數包含句點,則應將其放在 PATH 的最後。這將導致系統在嘗試當前工作目錄之前檢查所有包含可執行檔案的標準目錄。在 shell 啟動指令碼(例如/etc/profile)或某些供應商版本的/etc/PATH檔案中設定 PATH 可以幫助系統管理員管理大多數使用者帳戶的 PATH 變數的使用。

關於 PATH 變數的另一個問題是 PATH 中的任何目錄是否允許使用者修改內容。PATH 中目錄的許可權應全部限制寫入許可權,並且這些目錄中的所有檔案都不應允許寫入許可權。否則,不法使用者可以修改一個或多個命令,並期望其他使用者甚至 root 執行其修改後的檔案。定期檢查這些目錄和檔案的許可權對於幫助維護安全系統是必要的。

點檔案

[編輯 | 編輯原始碼]

這些檔案通常位於帳戶的主目錄中,幷包含各種啟動和配置設定以及過程。這些檔案對系統管理員來說很重要,因為在某些情況下,它們會引入 Unix 系統安全性的弱點。

警惕的系統管理員會定期搜尋其系統中是否存在這些檔案,然後檢查許可權和內容是否存在潛在的安全問題。除了使用者新增的不正確的設定外,入侵者還可以修改這些檔案,以便將來重新獲取訪問許可權。

sendmail 程式支援此檔案,用於將電子郵件轉發到新的地址(例如,使用者遷移賬戶後)。該檔案的內容可以包含以逗號分隔的地址列表。然而,在安全方面存在問題,因為地址也可以是系統命令。例如:

sample_address@no.such.com, "|/var/tmp/give_me_access"

當收到電子郵件時,它會被轉發到 .forward 檔案中的地址。它還會作為標準輸入傳遞給字串中列出的程式。例如,這可以是使用者編寫的指令碼,用於執行郵件中包含的命令。

停用使用者密碼可能是停用使用者帳戶的常見做法。但是,如果使用者已將其 .forward 檔案配置為執行命令,他們仍然可以對系統執行操作。不懷好意的人可能會利用此訪問許可權進行不當活動。

ForwardPath

[編輯 | 編輯原始碼]

sendmail 程式的第 8 版開始,可以使用 ForwardPath 選項來定義 .forward 檔案的備用位置。ForwardPath 選項透過 OJ 行(或“O ForwardPath=”)在 sendmail 配置中設定。例如:

OJ/var/forward/$u.forward:$z/.forward

這將導致 sendmail 首先檢查 /var/forward 目錄下是否存在一個檔案,該檔案的名稱為使用者帳戶名稱後跟 .forward。(因此,bob.forward 將被解釋為名為 bob 的使用者帳戶的 .forward 檔案。)如果找不到該檔案,則 sendmail 將在使用者的主目錄中查詢 .forward 檔案。

每當建立新的使用者帳戶時,系統管理員就可以在受控目錄中建立 account.forward 檔案。(這可以作為帳戶建立工具的一部分自動完成。)在使用者確認他們已經具備足夠的 UNIX 知識來正確配置自己的 .forward 檔案後,可以刪除 account.forward 檔案。

使用者可能希望使用 ftp 命令來執行例如從遠端站點批次下載檔案。為了自動化此過程,他們可以配置 .netrc 檔案以提供訪問許可權,而無需輸入密碼。完成後,可以使用指令碼(例如透過計劃的批處理任務)來傳輸檔案。不幸的是,.netrc 檔案的格式以明文儲存密碼。任何擁有 .netrc 檔案讀取許可權的人都可以獲取使用者的登入密碼。

ftp 程序有一個內建限制,可以部分緩解此問題。如果除了所有者之外的任何人都可以讀取使用者的 .netrc 檔案,則自動登入過程將失敗。這迫使所有者限制此檔案的許可權。但是,這只是一個部分解決方案。對於大多數目的,更好的方法是改為使用 sftp 命令的主機身份驗證方法。

最近,cURL 庫允許將 .netrc 檔案與所有協議一起使用[1]

.rhosts 檔案可以在執行遠端登入命令(通常為 rlogin)時為使用者提供自動登入功能。這繞過了正常的登入過程,並立即將使用者連線到系統。正如您所料,此功能可能會給系統帶來許多潛在的漏洞。

假設三個系統被設定為 A 與 B 之間存在信任關係,但 A 不一定信任 C。為帳戶建立連線 A—B 和 B—C 的 .rhosts 可以為個人從 C 到 A 提供後門。也就是說,設法獲得對 C 的不當訪問許可權的人可以使用 .rhosts 檔案獲取對 A 的訪問許可權,即使 A 不信任 C(甚至可能阻止網路訪問)。

.rhosts 檔案的另一個問題是用於輸入允許的帳戶訪問的方法。該檔案可以設定為允許來自任何主機的訪問。例如:

+ joebob

將允許 joebob 帳戶從任何主機連線,而無需輸入密碼。不幸的是,該帳戶可能屬於另一個系統上的完全不同的人,或者它可能是在受損系統上故意建立的,以允許不當訪問。

由於其使用固有的安全風險,通常最好在可能的情況下停用 .rhosts 功能。

References

[編輯 | 編輯原始碼]
華夏公益教科書