Linux系統程式設計 (5)程序憑證

2021-10-01 22:05:49 字數 2364 閱讀 5632

每個程序都有一套用數字表示的使用者id(uid)組id(gid),有時將這些id稱之為程序憑證,具體如下圖所示:

1. 實際使用者id和組id

實際使用者id和組id確定了程序所屬的組,標識我是誰。

2.有效使用者id和有效組id

當程序嘗試執行各種系統呼叫的時候,將結合有效使用者id有效組id輔助id來確定賦予程序的許可權。

例如,當程序訪問一些檔案、程序間通訊物件之類的系統資源時,有效使用者id和有效組id會決定系統授予程序的許可權,這些資源的屬主則是由上述所介紹的實際使用者id和實際組id來決定。

有效使用者id為0的程序擁有超級使用者的所有許可權,這樣的程序稱之為特權程序。如果只是為了使程序可以執行某個或某些系統呼叫而將程序的有效使用者id置為0是非常不安全的,因為root的許可權分為很多種,僅為了某乙個訪問許可權而給予別人一切許可權,這樣使得攻擊面變得很大,系統很不安全。

後續會講到linux capability方案,將root許可權切割成更細粒度的小許可權,對於程序來說可以單獨啟用或者禁用某個或者某些許可權。

3.set-user-id和set-group-id程式

set-user-id程式會將程序的有效使用者id置為可執行檔案的使用者id(屬主),從而獲得常規情況下並不具有的許可權。例如,如果可執行檔案是root建立,如果執行了set-user-id許可權,那麼程序在執行的時候,有效使用者id就是變為0(root的使用者id為0),那麼程序在執行過程中就有超級使用者root的所有許可權了。

set-group-id程式對程序的有效使用者組id類似。

可執行檔案有兩個比較特別的許可權位:set-user-id位和set-group-id位,分別對應著set-user-id和set-group-id程式的功能,可以使用chmod來修改這兩個位:

設定完成後,用來表示檔案的可執行檔案許可權x會被s標識所替換

總結:一般情況下,程序的有效使用者id及組id與相應的實際id是相等的,但是當設定了set-user-id或者set-group-id時,在其他使用者執**況下,該程序的有效使用者id或者組id就會變成實際使用者id、實際組id。

4.儲存set-user-id和儲存set-group-id程式

儲存set-user-id和儲存set-group-id的值由對應的有效id複製而來。無論可執行檔案是否設定了set-user-id或set-group-id許可權位,這一複製行為始終會發生。

為了獲取和變更上述討論的各種與程序相關的id,linux提供了一系列的系統呼叫和庫函式,我們在此處指給出一張表,具體用法還需要自己仔細去研究手冊。但是在討論修改使用者id和組id的所有系統呼叫時,要求程序具有cap_setuidcap_setgid能力,這兩種屬於linux capability,後續學習將詳細介紹。

1. 獲取與程序相關id的get***方法集合

除了通過系統呼叫的來檢視上述各種id,可以利用linux系統特有的/proc/pid/status檔案,通過對其中uid、gid和groups各行資訊的檢查,來獲取任何程序的憑證。uid和gid各行按照實際、有效、儲存設定和檔案系統id的順序來展示相應的識別符號。

2. 修改與程序相關id的set***方法集合

修改與程序相關的id一般分為執行者是特權程序還是非特權程序,不同的角色,結果不一樣,具體如下圖所示,在使用的時候,需要具體視情況而定。

Linux系統程式設計之程序

程序狀態 4 5種 就緒 初始化 執行,掛起 等待 停止 pbc成員 1 程序id 2 程序狀態 3 程序切換需要儲存和恢復的cpu暫存器 4 描述虛擬位址空間資訊 5 描述控制終端的資訊 6 當前工作目錄 7 umask掩碼 8 檔案描述符 9 訊號相關的資訊 10 使用者和使用者組id 11 會...

linux系統程式設計 多程序

最近發現每天都在寫業務 好多基礎的東西都忘了,今天開始每天覆習一點基礎知識。今天先複習多程序 程序是具有一定功能的程式的一次執行活動,是系統資源分配和排程的基本單位 孤兒程序 父程序退出,子程序沒有退出,被init程序收養 init程序 是核心啟動後執行的第乙個程序,是所有孤兒程序的子程序。init...

《Linux系統程式設計 程序管理》

在linux的核心的五大組成模組中,程序管理模組時非常重要的一部分,它雖然不像記憶體管理 虛擬檔案系統等模組那樣複雜,也不像程序間通訊模組那樣條理化,但作為五大核心模組之一,程序管理對我們理解核心的運作 對於我們以後的程式設計非常重要。同時,作為五大組成模組中的核心模組,它與其他四個模組都有聯絡。下...