檔案開啟時核心許可權檢查流程

2021-09-25 18:22:27 字數 1199 閱讀 999

核心版本(4.15)

dac:  discretionary access control   自主訪問控制 .  

dac是傳統的linux的訪問控制方式,dac可以對檔案、資料夾、共享資源等進行訪問控制。 在dac這種模型中,檔案客體的所有者(或者管理員)負責管理訪問控制。dac使用了acl(access control list,訪問控制列表)來給非管理者使用者提供不同的許可權,而root使用者對檔案系統有完全自由的控制權。

do_sys_open

do_filp_open

get_empty_filp 

const struct cred *cred = current_cred();

f->f_cred = get_cred(cred);   // 當前程序的 cred賦值給開啟的檔案控制代碼

path_openat

link_path_walk

may_lookup

inode_permission

__inode_permission

do_inode_permission

generic_permission

acl_permission_check

capable_wrt_inode_uidgid

在 acl_permission_check 裡,如果檔案inode的 uid 與當前程序  current_fsuid() 一致,則將 inode的mode 左移6位 mode >>= 6;(即使用檔案owner的許可權模式)  如果 gid 一致(通過 in_group_p(inode->i_gid) 來查詢),則左移3位(即使用檔案 group的許可權模式),其他情況下,則不左移,使用檔案other的許可權模式。 然後使用下面的判斷來匹配:

/** if the dacs are ok we don't need any capability check.

*/if ((mask & ~mode & (may_read | may_write | may_exec)) == 0)

return 0;

此外如果dac檢查沒有通過,則繼續使用 capable_wrt_inode_uidgid 判斷當前程序是否具有如下的能力: cap_dac_read_search , cap_dac_override 來改寫 dac的檢查結果。

需要說明的一點是:其中當前程序 group資訊可以通過系統呼叫 setgroups (groups.c) 來設定。

開啟dubbo之旅 啟動時檢查

正經學徒,佛系記錄,不搞事情 基於上文 官方解釋 dubbo 缺省會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止 spring 初始化完成,以便上線時,能及早發現問題。啟動時檢查分為兩類 另外乙個值得注意的地方是 如果使用的是啟動時檢查,一開始專案啟動報錯,後面服務恢復的時候,系統還是反...

git忽略檔案許可權檢查

如題 每個人本地設定不同 系統不同 環境不同 很有可能在團隊開發的時候進行 不同檔案許可權的設定 但是如果大家都把這種許可權的設定傳上去 那麼所有人的就都亂的 如果要去掉的話 第一步進入這個專案的git目錄 使用命令 然後就可以了 下面解釋一下 為什麼必須進入該git倉庫 因為你會發現兩點 第一點 ...

Windows核心 (4) 資料段許可權檢查

cpl cpl是當前執行的程式或任務的特權級。它被儲存在cs和ss的第0位和第1位上。通常情況下,cpl代表 所在的段的特權級。當程式轉移到不同特權級的 段時,處理器將改變cpl。只有0和3兩個值,分別表示使用者態和核心態。dpl 如果你想訪問我,你應該具備什麼樣的許可權 rpl 用什麼許可權去訪問...