Linux內核進程管理子系統有什么第四十回 —— 進程主結構詳解(36)

接前一篇文章:Linux內核進程管理子系統有什么第三十九回 —— 進程主結構詳解(35)

本文內容參考:

Linux內核進程管理專題報告_linux rseq-CSDN博客

《趣談Linux操作系統 核心原理篇:第三部分 進程管理》—— 劉超

《圖解Linux內核?基于6.x》 —— 姜亞華 機械工業出版社

特此致謝!

進程管理核心結構 —— task_struct

8. 進程權限相關成員

進程權限相關成員包括以下幾個:

	/* Process credentials: *//* Tracer's credentials at attach: */const struct cred __rcu		*ptracer_cred;/* Objective and real subjective task credentials (COW): */const struct cred __rcu		*real_cred;/* Effective (overridable) subjective task credentials (COW): */const struct cred __rcu		*cred;

這幾個字段的描述如下:

上一回開始對于struct cred進行解析,本回繼續。為了便于理解和回顧,再次貼出struct cred的定義,在include/linux/cred.h中,如下:

/** The security context of a task** The parts of the context break down into two categories:**  (1) The objective context of a task.  These parts are used when some other*	task is attempting to affect this one.**  (2) The subjective context.  These details are used when the task is acting*	upon another object, be that a file, a task, a key or whatever.** Note that some members of this structure belong to both categories - the* LSM security pointer for instance.** A task has two security pointers.  task->real_cred points to the objective* context that defines that task's actual details.  The objective part of this* context is used whenever that task is acted upon.** task->cred points to the subjective context that defines the details of how* that task is going to act upon another object.  This may be overridden* temporarily to point to another security context, but normally points to the* same context as task->real_cred.*/
struct cred {atomic_t	usage;
#ifdef CONFIG_DEBUG_CREDENTIALSatomic_t	subscribers;	/* number of processes subscribed */void		*put_addr;unsigned	magic;
#define CRED_MAGIC	0x43736564
#define CRED_MAGIC_DEAD	0x44656144
#endifkuid_t		uid;		/* real UID of the task */kgid_t		gid;		/* real GID of the task */kuid_t		suid;		/* saved UID of the task */kgid_t		sgid;		/* saved GID of the task */kuid_t		euid;		/* effective UID of the task */kgid_t		egid;		/* effective GID of the task */kuid_t		fsuid;		/* UID for VFS ops */kgid_t		fsgid;		/* GID for VFS ops */unsigned	securebits;	/* SUID-less security management */kernel_cap_t	cap_inheritable; /* caps our children can inherit */kernel_cap_t	cap_permitted;	/* caps we're permitted */kernel_cap_t	cap_effective;	/* caps we can actually use */kernel_cap_t	cap_bset;	/* capability bounding set */kernel_cap_t	cap_ambient;	/* Ambient capability set */
#ifdef CONFIG_KEYSunsigned char	jit_keyring;	/* default keyring to attach requested* keys to */struct key	*session_keyring; /* keyring inherited over fork */struct key	*process_keyring; /* keyring private to this process */struct key	*thread_keyring; /* keyring private to this thread */struct key	*request_key_auth; /* assumed request_key authority */
#endif
#ifdef CONFIG_SECURITYvoid		*security;	/* LSM security */
#endifstruct user_struct *user;	/* real user ID subscription */struct user_namespace *user_ns; /* user_ns the caps and keyrings are relative to. */struct ucounts *ucounts;struct group_info *group_info;	/* supplementary groups for euid/fsgid *//* RCU deletion */union {int non_rcu;			/* Can we skip RCU deletion? */struct rcu_head	rcu;		/* RCU deletion hook */};
} __randomize_layout;

上一回講到struct cred中的3組字段:

一般來說,fsuid、euid與uid是一樣的;fsgid、egid與gid也是一樣的。因為誰啟動的進程,就應該審核啟動者有沒有相關權限。但是也存在特殊情況。例如:

用戶張三(zhangsan)想運行一個用戶李四(lisi)安裝的應用程序(比如游戲、視頻播放器等)。由于是李四安裝的,當然該應用程序文件的權限是rwxr--r--。也就是說文件屬主(即文件所有者李四)權限為可讀、可寫、可執行;而屬組(同組用戶)權限為只可讀;組外(其他用戶)權限也是只可讀。

那么問題來了,張三想運行該程序,但沒有可執行權限,該怎么辦呢?需要向用戶李四要授權。李四并無意見,于是將應用程序文件的權限由rwxr--r--改為rwxr-xr-x。也就是分別給屬組和組外權限加入了可執行。這樣,張三就可以正常運行程序了。

接下來問題又來了,張三看著看著視頻覺得不錯,想把這個視頻存下來;或者玩游戲過了幾關,想保存進度。一點下載或保存按鈕,壞了,提示無權限。為什么會這樣?因為下載視頻需要有保存路徑的寫入權限,游戲玩家數據是保存在某個文件中的,也需要寫入權限。由于該文件只給所有者李四開了寫入權限,而進程的euid和fsuid都是張三,那當然寫不了了。

又該怎么解決這個問題呢?可以通過chmod u+s xxx命令,給這個應用程序設置set-user-id,將它的權限變為rwsr-xr-x。此時,張三再啟動這個應用的時候,創建的進程uid還是張三(zhangsan),但是euid和fsuid就不是張三了,而是李四(lisi)。也就是說,因為看到了set-user-id標識,euid和fsuid就改為文件所有者即李四了。

關于chmod u+s命令,詳情參考以下文章:

Linux命令 chmod 例:chmod u+s-CSDN博客

更多內容請看下回。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921011.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921011.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921011.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面試問題:進程和線程,編譯步驟,const,map和unordered_map,深入理解unordered_map

目錄 進程和線程的區別 const修飾指針(左邊內容,右邊指向) 1. const 修飾指針指向的內容(指向常量) 2. const 修飾指針本身(常量指針) 3. const 同時修飾指針本身和指向的內容(指向常量的常量指針&…

利用棒棒糖圖探索Office (US)的IMDB評分

利用棒棒糖圖探索Office (US)的IMDB評分 import numpy as np import pandas as pd import matplotlib.colors as mc import matplotlib.image as image import matplotlib.pyplot as pltfrom matplotlib.cm import ScalarMappable from matplotlib.lines import Line2D from m…

Zephyr如何注冊設備實例

設備樹 → 編譯期生成 → 運行時訪問 流程圖&#xff1a;Zephyr dev->config 工作流程設備樹 (.dts) ───────────────────────────── anx745139 {compatible "analogix,anx7451";reg <0x39>;reset-gpios <&gpio1 5 …

Spring Boot 日志框架選擇指南:Logback vs Log4j2

在 Spring Boot 應用中&#xff0c;您需要明確選擇一個日志框架 - ??不能同時使用兩種日志實現??。以下是關于 spring-boot-starter-log4j2和 spring-boot-starter-logging的全面比較和選擇建議&#xff1a;核心區別特性spring-boot-starter-log4j2(Log4j2)spring-boot-sta…

Axure科技感可視化原型案例:賦能設計與研發的寶藏資源

在當今數字化浪潮中&#xff0c;數據可視化已成為企業洞察市場、優化運營、快速決策不可或缺的工具。Axure&#xff0c;作為原型設計領域的領航者&#xff0c;憑借其強大的功能和豐富的資源&#xff0c;為數據可視化大屏的設計注入了科技活力與創新元素。本文將深入探討Axure科…

跨境電商賬號風控核心:IP純凈度與瀏覽器指紋的防護策略

對跨境電商從業者而言&#xff0c;賬號突然被封是常見卻令人頭痛的問題。即便嚴格遵守平臺規則、使用代理IP&#xff0c;賬號仍可能因風控策略而受限。這背后&#xff0c;IP純凈度與瀏覽器指紋識別是兩大常被忽視卻至關重要的技術因素。本文將從技術角度解析其原理&#xff0c;…

daily notes[7]

文章目錄perl notereferencesperl note A hash in perl can be initialized with array,for example: my %numbers ("one", 1, "two", 2); print $fruit_color{"one"}; it is wonderful that the hash can be sliced to result in an array …

WPF遷移avalonia之圖像處理(一)

從WPF遷移到avalonia中&#xff0c;對于圖像處理部分&#xff0c;在WPF常用System.Windows.Drawing中圖像處理元素&#xff0c;但是在開發avalonia應用時考慮跨平臺特性&#xff0c;則必須有對應的跨平臺替換方案。主要考慮Avalonia.Media.Imaging.Bitmap和SkiaSharp.SKBitmap …

242. 有效的字母異位詞| 349. 兩個數組的交集

242. 有效的字母異位詞 nums [0]*26 : 這行代碼創建了一個包含26個0的列表&#xff0c;這個列表通常用于計數或者作為某種映射的基礎&#xff0c;比如統計字符串中每個字母出現的次數&#xff08;假設只考慮小寫字母a-z&#xff09;。 ord() Python 中的一個內置函數&#x…

HTML第二課:塊級元素

HTML第二課&#xff1a;塊級元素塊級元素塊級元素 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang"zh-CN"> <head><meta http-equiv"Content-…

微論-突觸的作用賦能思考(可能是下一代人工智能架構的啟發式理論)

突觸智能&#xff1a;微觀結構與宏觀智慧的橋梁摘要&#xff1a;傳統人工智能模型&#xff0c;尤其是深度學習&#xff0c;將突觸簡單抽象為一個靜態的權重參數&#xff0c;這極大地簡化了生物計算的復雜性。本文受啟發于生物突觸的微觀功能&#xff0c;提出了一種新的智能架構…

ARM - GPIO 標準庫開發

一、STM32MP157AAA開發板套件介紹1.1 核心板 - 主板如圖所示&#xff1a;主板各部分介紹1.2 IO 拓展板如圖所示&#xff1a;IO拓展板各部分介紹開發板名稱&#xff08;硬件平臺&#xff09;&#xff1a;FS-MP1A主控制器&#xff1a;STM32MP157AAA3 Cortex-A7 * 2 Cortex-M4 -…

橙武低代碼:不僅僅是云SaaS,更是云端開發+本地部署的新范式

版權歸作者所有&#xff0c;轉載請注明出處。 一、低代碼的時代背景 在過去十年里&#xff0c;軟件研發模式經歷了巨大的演變。從傳統的瀑布開發&#xff0c;到敏捷、DevOps&#xff0c;再到如今的低代碼/無代碼平臺&#xff0c;研發效率和交付模式發生了根本性變化。低代碼的…

神經語言學視角:腦科學與NLP深層分析技術的交叉融合

引言&#xff1a;從“統計擬合”到“類人理解”——NLP的下一個范式近年來&#xff0c;以Transformer架構為核心的大型語言模型&#xff08;LLM&#xff09;在自然語言處理&#xff08;NLP&#xff09;領域取得了前所未有的成功 。它們能夠生成流暢的文本、回答復雜的問題&…

Coze源碼分析-工作空間-項目查詢-前端源碼

前言 本文將深入分析Coze Studio項目中用戶登錄后進入工作空間查看和管理項目的前端實現&#xff0c;通過源碼解讀來理解工作空間項目開發功能的架構設計和技術實現。Coze Studio采用了現代化的React TypeScript技術棧&#xff0c;結合微前端架構和模塊化設計&#xff0c;為用…

【系統架構師設計(9)】系統設計:結構化設計與面向對象設計

文章目錄一、核心思想&#xff1a;模塊化與對象化的設計哲學1、結構化設計的核心思想2、面向對象設計的核心思想3、兩種設計方法的本質區別二、結構化設計知識點1、設計階段2、設計原則3、 內聚類型&#xff08;從低到高&#xff09;耦合類型&#xff08;從低到高&#xff09;模…

還在從零開發AI應用?這個項目直接給你500個現成方案!!!

大家好&#xff0c;我是顧北&#xff0c;一名AI應用探索者&#xff0c;也是GitHub開源項目收集者。昨晚又在GitHub上瞎逛...咦&#xff0c;碰到了一個特別有意思的項目。說實話吧&#xff0c;作為一個天天折騰AI工具的人&#xff0c;見過的項目沒有一千也有八百了&#xff0c;但…

react+taro的使用整理

前言&#xff1a; 本文主要整理下我們跨段工具taro的具體使用方法與相關資料。 taro官網&#xff1a; 安裝及使用 | Taro 文檔 安裝&#xff1a; 全局腳手架安裝&#xff1a; npm install -g tarojs/cli 使用腳手架安裝我們的taro項目 taro init myApp 運行到不同小程序教…

從 “容器保姆” 到 “云原生王者”:K8s 全方位指南

目錄 開頭專業總結 一、先搞懂&#xff1a;K8s 到底是什么&#xff1f;能解決什么痛點&#xff1f; 1. K8s 的本質 2. 核心用處&#xff08;解決的痛點&#xff09; 二、K8s 核心知識點&#xff1a;組件與概念&#xff08;標重點&#xff01;&#xff09; &#xff08;一…

03.《交換的底層邏輯:從基礎到應用》

交換基礎 文章目錄交換基礎MAC 地址&#xff1a;設備的 “全球唯一身份證”MAC 地址的基本屬性MAC 地址的三類類型&#xff08;按通信范圍劃分&#xff09;以太幀以太幀的兩個標準格式1. Ethernet_II 格式&#xff08;常用&#xff09;2. IEEE 802.3 格式&#xff08;少用&…