setuid 的風險及開發過程中的避免方式

使用setuid(Set User ID)功能將執行程序的有效用戶 ID 設置為文件所有者的用戶 ID。這意味著執行程序將以文件所有者的特權運行,而不是以執行者自己的特權運行。

盡管setuid是一個有用的功能,但它也會帶來一些安全風險。下面是幾個常見的setuid帶來的風險:

1. 特權濫用

如果執行的程序存在漏洞或被惡意利用,攻擊者可以使用被setuid特權所包含的權限來濫用操作系統資源,例如修改系統配置、刪除文件或者訪問私有數據。

2. 提升權限

如果攻擊者能夠訪問被設置setuid標志的可執行文件,并且成功地利用了其中的漏洞,攻擊者可以以擁有該文件所有者的權限運行惡意代碼。這將使攻擊者能夠提升權限并執行危險的操作。

3. 特權提升攻擊

在某些情況下,惡意用戶可能會利用setuid特權來進一步提升權限,例如通過擁有root用戶的特權來執行危險的操作。

當一個二進制文件設置了 setuid bit,它在執行時會臨時擁有文件所有者的用戶權限。這意味著,即使普通用戶運行了該文件,它仍能以文件所有者的權限來執行,以執行特權操作。

當執行帶有 setuid 位的文件時,以下是其提權的一般原理:

1. 普通用戶執行帶有 setuid 位的可執行文件。
2. 系統會檢查文件的權限,確認用戶有權執行該文件。
3. 系統會驗證文件的 setuid 位是否設置,并檢查文件所有者的用戶 ID。
4. 如果 setuid 位被設置,操作系統會將執行進程的有效用戶 ID 切換為文件所有者的用戶 ID。

一旦有效用戶 ID 被切換為文件所有者的用戶 ID,進程就取得了與文件所有者同等的權限。這使得普通用戶可以執行特權操作,例如讀取只有超級用戶能訪問的文件、修改系統配置,以及執行其他需要特權的操作。

下面舉一個實際案例,案例使用capability來避免使用setuid產生DAC權限問題。

假設我們正在開發一個需要訪問網絡接口的Linux原生應用程序。為了能夠訪問網絡接口,通常需要以root用戶權限運行應用程序。然而,使用setuid將應用程序設置為以root用戶權限運行可能會引起安全風險。

為了避免這個問題,我們可以利用Linux的"capabilities"功能來降低特權。利用capabilities,我們可以給予應用程序僅限于所需的最低權限。

在開發過程中,我們可以創建一個特殊的capability文件,例如 "my_app.cap",并添加以下內容:
```
cap_net_raw=ep
```
這個capability文件將允許應用程序在不需要root權限的情況下,僅擁有訪問網絡接口的能力。

接下來,我們可以使用以下命令將該capability文件與應用程序關聯起來:
```
sudo setcap -v cap_net_raw+ep /path/to/my_app
```
這將確保應用程序在執行時僅具有cap_net_raw權限,并且無需以root用戶權限運行。

通過這樣的設置,我們可以避免使用setuid產生DAC權限問題,并確保應用程序僅具有必要的最低權限來訪問網絡接口。這樣做可以提高應用程序的安全性。

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

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

相關文章

Linux C語言 37- 進程間通信IPC

Linux C語言 37-進程間通信IPC 本節關鍵字:C語言 進程間通信 信號 管道 消息隊列 共享內存 網絡通信(套接字) 相關庫函數: 提示:先做內容框架梳理,后期進行完善補充! 什么是進程間通信&#…

blender 數字鍵盤上的快捷鍵

數字0可以切換到相機視角,即從相機的位置和角度查看場景。數字1、3、7分別可以切換到正交的前視圖、右視圖和頂視圖,即沿著X、Y、Z軸的垂直投影。數字5可以切換正交視圖和透視視圖,即是否考慮遠近的視覺差異。數字2、4、6、8分別可以順時針或…

SD之lora訓練

目錄 為什么要訓練自己的模型 SD模型微調方法 準備素材 1 確定要訓練的LoRA類型 2 圖片收集 3 圖片預處理 4 圖片標注 安裝Koyha_ss 訓練lora 1.準備參數和環境 2.啟動訓練 使用模型 1 拷貝訓練過的lora模型 2 啟動SD WebUI進行圖像生成 為什么要訓練自己的模型 …

webpack該如何打包

1.我們先創建一個空的大文件夾 2.打開該文件夾的終端 輸入npm init -y 2.1.打開該文件夾的終端 2.2在該終端運行 npm init -y 3.安裝webpack 3.1打開webpack網址 點擊“中文文檔” 3.2點擊“指南”在點擊“起步” 3.3復制基本安裝圖片畫線的代碼 4.在一開始的文件夾下在創建一…

【Android】使用Netty庫來實現Socket接收

在Android中使用Netty來實現Socket接收是可行的。Netty是一個高性能的網絡通信框架,支持多種協議,包括原生的Socket通信。 以下是一個簡單的示例代碼,演示如何使用Netty在Android中實現Socket接收: 首先,在你的Andro…

案例061:基于微信小程序的互助學習系統

文末獲取源碼 開發語言:Java 框架:SSM JDK版本:JDK1.8 數據庫:mysql 5.7 開發軟件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序開發軟件:HBuilder X 小程序…

Flask template中使用iframe

Flaks template中使用iframe嵌套新的網頁&#xff08;new_page.html&#xff09;的網頁到歷史網頁&#xff08;old_page.html&#xff09;中&#xff08;減少新網頁的入口&#xff09; 1,增加iframe tag 在old_page.html中適當位置增加iframe入口標簽&#xff1a; <ifram…

django與數據庫交互關于當前時間的坑

背景 在線上服務中使用時間進行數據庫操作時發現異常&#xff0c;而在本地環境無法成功復現此問題&#xff0c;導致難以進行故障排查。 核心問題 view.py class XxxViewSet(viewsets.ModelViewSet):queryset Xxx.objects.with_status().order_by("status", &quo…

【數據結構】插入排序,希爾排序,選擇排序,堆排序,冒泡排序

1.插入排序 思路&#xff1a;插入排序將一個數插入一個有序的數組里面&#xff0c;將這個數和數組元素挨著比較&#xff0c;直到他插入到合適的位置。 動畫演示&#xff1a; 步驟&#xff1a;1.定義一個變量tmp保存要插入的數據 2.在循環中用tmp和有序數組中的元素比較&#…

談一談Linux下的進程和線程

文章目錄 進程線程進程與線程比較 進程 什么是進程&#xff1f; 概念上來說&#xff0c;進程是擔當OS資源分配的實體。通俗來說&#xff0c;進程是我們OS上一個在運行的程序。 我們的OS上不止有一個進程&#xff0c;當我們的某一個進程像是去磁盤上讀文件時&#xff0c;由于磁…

學習pytorch18 pytorch完整的模型訓練流程

pytorch完整的模型訓練流程 1. 流程1. 整理訓練數據 使用CIFAR10數據集2. 搭建網絡結構3. 構建損失函數4. 使用優化器5. 訓練模型6. 測試數據 計算模型預測正確率7. 保存模型 2. 代碼1. model.py2. train.py 3. 結果tensorboard結果以下圖片 顏色較淺的線是真實計算的值&#x…

國產化軟件突圍!懌星科技eStation產品榮獲2023鈴軒獎“前瞻優秀獎”

11月11日&#xff0c;2023中國汽車供應鏈峰會暨第八屆鈴軒獎頒獎典禮在江蘇省昆山市舉行。懌星科技憑借eStation產品&#xff0c;榮獲2023鈴軒獎“前瞻智能座艙類優秀獎”&#xff0c;懌星CEO潘凱受邀出席鈴軒獎晚會并代表領獎。 2023鈴軒獎“前瞻智能座艙類優秀獎” 鈴軒獎&a…

el-table 跨頁多選

步驟一 在<el-table>中:row-key"getRowKeys"和selection-change"handleSelectionChange" 在<el-table-column>中type"selection"那列&#xff0c;添加:reserve-selection"true" <el-table:data"tableData"r…

隊列排序:給定序列a,每次操作將a[1]移動到 從右往左第一個嚴格小于a[1]的元素的下一個位置,求能否使序列有序,若可以,求最少操作次數

題目 思路&#xff1a; 賽時代碼&#xff08;先求右起最長有序區間長度&#xff0c;再求左邊最小值是否小于等于右邊有序區間左端點的數&#xff09; #include<bits/stdc.h> using namespace std; #define int long long const int maxn 1e6 5; int a[maxn]; int n; …

阿里云磁盤在線擴容

我們從阿里云的控制面板中給硬盤擴容后結果發現我們的磁盤空間并沒有改變 注意&#xff1a;本次操作是針對CentOS 7的 &#xfeff;#使用df -h并沒有發現我們的磁盤空間增加 #使用fdisk -l發現確實還有部分空間 運行df -h命令查看云盤分區大小。 以下示例返回分區&#xf…

python3安裝redis

#!/usr/bin/python3import os import platform import argparse import shutil# 自定義變量 default_system "ubuntu" default_redis_version "6.2.6" default_install_path "/usr/local/redis" default_local_package_dir os.path.dirname(…

eve-ng鏡像模擬設備-信息安全管理與評估-2023國賽

eve-ng鏡像模擬設備-信息安全管理與評估-2023國賽 author&#xff1a;leadlife data&#xff1a;2023/12/4 mains&#xff1a;EVE-ng 模擬器 - 信息安全管理與評估模擬環境部署 references&#xff1a; EVE-ng 官網&#xff1a;https://www.eve-ng.net/EVE-ng 中文網&#xff1…

嵌入版python作為便攜計算器(安裝及配置ipython)

今天用別的電腦調試C&#xff0c;需要計算反三角函數時發現沒有趁手工具&#xff0c;忽然想用python作為便攜計算器放在U盤&#xff0c;遂想到嵌入版python 懶得自己配可以直接下載&#xff0c;使用方法見第4節 1&#xff0c;下載embeddable python&#xff08;嵌入版python&…

React中傳入props.children后, 為什么會導致組件的重新渲染?

傳入props.children后, 為什么會導致組件的重新渲染&#xff1f; 問題描述 在 react 中, 我想要對組件的渲染進行優化, 遇到了一個非常意思的問題, 當我向一個組件中傳入了 props.children 之后, 每次父組件重新渲染都會導致這個組件的重新渲染; 它看起來的表現就像是被memo包…

【1day】?萬戶協同辦公平臺 convertFile 任意文件讀取漏洞學習

注:該文章來自作者日常學習筆記,請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與作者無關。 目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現