LWN:Fedora 和 pkexec!

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

关注了就能看到更多这么棒的文章哦~

Fedora and pkexec

By Jake Edge
February 2, 2022
DeepL assisted translation
https://lwn.net/Articles/883547/

pkexec 中那个烦人的漏洞已经在 Linux 世界中激起了涟漪,引出了对底层 polkit 授权工具包(authorization toolkit)的大量安全更新。它也引出了最近在 Fedora 开发邮件列表中关于 pkexec(用来以另一个用户的身份运行程序)是否真的有必要、或者说是否在某些或所有发行版中有必要的讨论。但是 pkexec 被许多不同的 Fedora 组件所使用,尤其是在桌面版本 Fedora 中,在需要以另一个用户的权限运行程序时,它也许是一个比其他选项更好的选择。

Adam Williamson 在 PwnKit 漏洞披露的第二天提出了这个问题。正如他所指出的,这是一个长期存在的(从 2009 年第一个版 pkexec 开始)本地 root 权限升级问题。这让他开始思考:

这个问题和周围的一些评论,促使我想知道——为什么 `pkexec'仍然有必要存在?尤其是,为什么它仍然是我们在每一个 Fedora 安装中都默认使用的东西?

我的印象中,pkexec 是一个让我们摆脱 consolehelper 的笨办法:一些应用没有被改写成在 policykit 下的正确方式,他们仍然希望整个应用以 root 身份运行,而 pkexec 是实现这一目的的一种方法。

consolehelper 是另外一个允许用户以其他用户身份运行代码的程序,而 PolicyKit 是 polkit 的旧称。2013 年的时候,Fedora Usermode Migration 这个功能的设计目标就是将 consolehelper 的所有用户者都转移到 polkit。Williamson 想知道,当前的 Fedora 中有哪些部分仍然需要 pkexec(毕竟其更像是一个拼凑的用法)。但是,由于它被包含在 polkit 软件包中,而 polkit 的使用非常广泛,也许可以把 pkexec 分割成一个 sub-package,只在真正需要它的地方安装,这是他的建议。

在后续的讨论中,Williamson 指出,根据 Usermode migration 的 bug ticket 看来它还没有完成。Fedora 中仍有 15 个软件包需要 consolehelper。Peter Robinson 说,其中大部分 "似乎是历史遗留" 软件包,没有再被普遍使用了。

Michael J Gruber 开玩笑地问,他是否应该把他的软件包从 pkexec 切换到使用基于 consolehelper 的 beesu 包装过的 su 命令上去,因为 beesu 在 Fedora 中仍然存在。但 Williamson 说他可不建议这么做:

并不是说 pkexec 在本质上比任何其他做差不多的事情(也就是提示输入某个密码,然后以 root 身份运行整个应用程序)的工具更糟糕。不幸的是 pkexec 碰巧有一个巨大的安全缺陷,但如果有人决定仔细检查进去的话,其他做同样事情的工具没准也有安全缺陷。问题是,*整个设计* 就不是最优的。

他说,我们的想法是,应该让应用程序转而使用 polkit 提供的其他机制,以进行他们的特权操作。对于那些不进行这种改变的应用程序来说,pkexec 是一个 "不那么好的第二选择",可以让它们能继续工作。删除 consolehelper 是为了减少发行版需要注意的 "以 root 身份运行命令" 的工具的总数,尽管这还没有完全完成。"从 pkexec 切换到其他任何 '以 root 身份运行东西'的工具都不能算是改进。"

如果你无论如何都要以 root 身份运行程序, pkexec 可能比使用 sudo 或其他选项更好,Lennart Poettering 认为。pkexec 已经使用 polkit 进程间通信(IPC)机制来请求以 root 身份运行二进制文件,这在他看来是一个优越的模式:

我的意思是,polkit 有一些问题,但我非常肯定,"pkexec" 本身我认为并不是大问题。或者换个说法:像 su/sudo/setpriv/runuser/suid binaries 这些工具的整个理念才是[有问题的]:也就是说,我非常肯定,如果我们能系统地禁止通过 execve() 获得权限,而把重点放在把权限操作委托给 IPC 服务上,我们会过得更好——当然,这种做法与传统 UNIX 相比有很大区别。

[…] "pkexec "是一个 短小 的程序,它实际上只运行了很少的特权代码。这使得它比 "sudo" 这个[巨大的]代码怪物要好上许多倍。它有一个更小的 安全规模(security footprint),而且比 "sudo" 更容易 review。这实际上是很有价值的。

但是 Sam Varshavchik 反对这样的观点,他不认为把特权操作转移到 IPC 机制(比如 socket)的另一端,真的会解决什么根本问题。当前的问题是,一些以 root 身份运行的程序有 bug:

在 suid[也就是 setuid]二进制文件中可被利用的 bug,如果出现在等价的无 suid 的程序中,也同样可以被利用,攻击方式完全相同。如果你在 suid 二进制文件中由于精心设计的命令行参数或环境变量而导致缓冲区溢出,那么如果你用一个相同的 bug-for-bug 实现来替换 suid 二进制文件,使用 socket 来仔细传递相同的环境变量或参数给本地 root 权限的二进制程序,并且产生相同的缓冲区溢出,那么你猜怎么着:你仍然有相同的漏洞。

suid 不是问题所在。execve 执行的程序将继承环境变量以及打开的文件描述符,也许还有一些其他的东西,而一个接受 socket 连接的独立 daemon 程序是没有这些东西的。但这些是大多数漏洞利用的东西,所以清理掉环境变量和已打开的文件描述符可以弥补这个漏洞。要利用其他内容的话,攻击者就需要更加费力了。

然而,Poettering 并不这样看。在执行 setuid 二进制文件时,会有大量的状态变化,而且这些状态会随着时间的推移而增加:

setuid/setgid 的问题在于,被调用的特权进程继承了很多隐含的状态和上下文,而人们并没有真正意识到、或完全理解这些状态和上下文。也就是说,它不仅仅是 env vars 和 argv[],还包括 cgroup membership、audit fields 字段、security context 安全上下文、打开的 fds、子进程 pids、父进程 pids、cpu mask、IO/CPU 调度优先级、各种 prctl()设置、tty 控制、signal mask+handler,…等等。甚至不清楚什么会被继承下来,因为进程一直在不断增加更多的属性。

如果你通过 IPC 来对特定的操作进行特权执行,你就会得到保证,无论做什么,都是在一个定义良好的、原始的执行环境中完成的,不会隐性地泄露上下文。IPC 消息是 全部的 脆弱攻击面了,这是我们能做到的最小的攻击面。这很好。

Varshavchik 说,虽然所有这些上下文和状态都存在于 setuid 程序中,但根本问题是在程序本身:

而这些都没有任何区别,除非代码本身也有一个潜在的逻辑错误。而这将是真正的问题。那么,问题就来了,有多少漏洞利用了这些特别的资源,比如 cgroup members、tty control 以及所有其他那些不被注意的属性?我想可能有几个,但我想不起来了。另一方面,完成 execve("/bin/bash") 的漏洞也同样有效,因为 root 守护进程中有同样的潜在 bug,可以通过其前端或 suid 程序触发。一个经过消毒的环境不会有什么帮助。

但对于 setuid 程序来说,完全净化环境是很难或不可能做到的,Poettering 说。有许多相互交互的属性是由 setuid 二进制程序的调用者(也就是攻击者)控制的,而且这个数字还在不断增加:

你可能*希望*没有通过所有这些代码的交互引入错误,但我想说的是,"struct task "和内核中的相关对象一直在被扩展,而那些没有预料到这些添加物的 suid 程序将被暴露在其中,而且即使他们想重置它们,也不能理智地重置,因为通常开发人员不能展望未来(而且 cgroup 的东西甚至根本不能合理地重置)。

Varshavchik 想拿到一些数据依据,来证明这里设想的各种漏洞的情况。他和 Poettering 来回讨论了一阵有什么算是合适的数据,但没有真正达成一致。Poettering 在结束他对这个子话题的参与时指出,他可以理解 "你对 suid 和 sudo 的热爱",但他和其他人认为它们是 "一个非常糟糕的主意"。Varshavchik 认为他并不是对这些机制感到着迷:

我说不上喜欢或者不喜欢 suid + sudo,就跟我喜欢我的螺丝刀差不多。我对这两者都不感冒。两者都只是工具。两者都可以被人们正确使用。两者也都可以被人们以错误的方式使用。但是,并不会因为这一点而用扳手来替代螺丝刀。

Demi Marie Obenour 建议,被一个 setuid 二进制文件继承哪些状态信息,应该由该二进制文件来选择。"状态的继承绝对应该是精心选择过的,但某些 audit 数据可能例外,如 audit user ID"。从事 Linux audit 系统开发工作的 Steve Grubb 说,audit 依赖于二进制文件继承 security context 和 audit 信息,所以现有的 polkit 机制是不够的。如果采用 kdbus 这样的内核机制,那么这个问题就可以避免了。就目前的情况来看,polkit "不能满足我们的安全要求":

[……]因为 policy 是千变万化的 javascript, 而不是一些可以被什么扫描程序来检查的一些固定配置,所以无法确定应该允许哪些状态,拒绝哪些状态。而且决定是否能访问,也并不经过 audit 系统。因此,我们对那些使用了 IPC 启动的应用程序,很少能了解它的访问控制以及信息流情况。

Setuid 可能对某些人来说是很令人讨厌的。但它的属性是众所周知的,完全可以对平台提供一定程度的保证。

他并不是唯一一个抱怨 polkit 的 JavaScript 配置机制的人,因为这被许多人看作是一个糟糕的设计决策。同时,Andrew Lutomirski 说,实现一个内核内的 IPC 机制是很困难的问题。他对 setuid 也有一些想法:

我希望在 Linux 内核中看到一个很好的 IPC 安全模型,但我还没有见过可靠的提案出来。这个问题是 非常难的 。

至于 setuid,我强烈认为 setuid 无论是在过去和现在都是一个错误。执行一个进程不应该增加权限。

回到他最初的主题,Williamson 指出,这个话题的讨论已经很清楚地表明,目前至少有一些 Fedora 的桌面版之类的发布(spin)需要 pkexec,不过:"这不是一个容易回答的问题,因为我们的打包系统并没有区分哪些东西需要 polkit 哪些东西需要 pkexec 。" Fedora 项目负责人 Matthew Miller 认为这至少是可以修改的:"我想,第一步可能是把 pkexec 拆成一个 subpackage,然后逐渐消灭对它的依赖。"

这就是目前为止的所有情况了。把 pkexec 拿出来它打包,似乎是一个好的计划,不管它是否应该慢慢地从实际使用中移除出去。如果出现另一个漏洞,也会更加容易地追查哪些其他 package 在使用它。长期来说,转向更多的或完全是 polkit 式的权限提升功能可能不一定会实现。在这条道路上的共识尚未完全弄清楚,而且这也是一个发行版中不希望看到大量改动的领域,至少不太会有很多代码 review。

就像大多数(所有?)漏洞一样,真正的罪魁祸首是缺乏对代码的集中安全审查(focused security review)。对于 setuid 二进制文件以及其他那些以 root 身份运行的代码来说,review 应该是必须的,但目前还不清楚是否有大量密集的 review 正在进行。每当另一个影响广泛的漏洞出现时,我们就会被提醒,但相关的影响似乎很快都会消失,事情又恢复了 "正常"。这是一个相当令人担忧的状态。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

01ac47790bd7a3e33d2ca00b6d3f6488.png

ConsoleHelper 控制台助手 这是一个简单的库,用于处理控制台应用程序中的执行参数。 要开始使用它,请从 nuget 安装包 Install-Package Console.Helper 然后定义一些命令并注册它们 命令类应实现接口 IConsoleCommand 并具有带有命令关键字的命令属性 [ Command ( " hello " )] class HelloCommand : IConsoleCommand { public void Execute ( CommandArgs args ) { Console . WriteLine ( " Hello World! " ); } } 注册命令后,您可以要求 ConsoleHelper 处理输入参数 class Program 立即下载

相关推荐

ROS环境下UR机械臂与Realsense相机手眼标定实战指南

本文提供了在ROS环境下,对UR机械臂与Realsense相机进行手眼标定的完整实战指南。详细介绍了从环境搭建、软件包安装、硬件配置到分步数据采集与计算的完整流程,并分享了常见的避坑技巧与精度优化方法,旨在帮助开发者高效、准确地完成标定,为后续的机器人视觉应用奠定坚实基础。

sunny的博客 647

[个人笔记].NET网络编程-控制台帮助类测试

ConsoleHelper.WriteLine("唯我超电磁炮永世长存!"); ConsoleHelper.WriteLine("唯我超电磁炮永世长存!","御坂美琴",ConsoleColor.Blue); Exception ex = new NotImplementedException("你指尖跃动的电光,是我此生不变的信仰!"); Exception exception = new NotImplementedException("唯我超电磁炮永世长存!",ex); ConsoleHelper.

zhangshu4114的博客 312

Coze HTTP请求节点实战:5分钟搞定天气API对接(含动态参数技巧)

本文通过一个天气预报API对接的实战案例,详细讲解了如何在Coze平台使用HTTP请求节点实现外部数据交互。文章重点演示了动态参数传递、JSON响应解析与错误处理等核心技巧,帮助开发者在5分钟内快速构建稳定可靠的智能体外部服务调用能力。

weixin_29233333的博客 675

ConsoleHelper 类

//Writes colored text to the console and allows to clear previously written lines //as long a not line break is present //Sample - screenshot at http://img299.imageshack.us/img299/3931/consolex....

weixin_33811961的博客 362

MaxEnt软件的下载与安装

1、下载网站:http://lucky-boy.ys168.com/ (这是之前在网上搜到的,里面有许多软件安装包,感谢网页主的资源共享,违权必删)

weixin_42191203的博客 2万+

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

【数字IC刷题】华为海思数字IC笔试题(3)详细解析版

MoorePlus的博客 2370

C#控制台窗口的显示与隐藏

1. 定义一个Consolse帮助类,如下: /// <summary> /// 控制台帮助类 /// </summary> public static class ConsoleHelper { /// <summary> /// 获取窗口句柄 /// </summary...

guard_hao的博客 3566

OpenClaw Docker 安装与部署教程,环境隔离不冲突技术指南

本文介绍了使用Docker容器化部署OpenClaw的完整教程。首先通过流程图详细说明了Docker环境检测流程,包括系统支持性检查、Docker安装状态验证、版本检测和服务配置等步骤。然后提供了Windows、macOS和Linux(Ubuntu/CentOS)系统下的Docker安装指南,涵盖从下载、安装到权限配置的全过程。最后介绍了OpenClaw官方镜像的拉取方法以及自定义镜像构建的Dockerfile示例。该教程适用于开发和生产环境,利用Docker实现环境隔离和快速部署。

一键难忘的博客 987

【亲测免费】 VSCode Console Helper:提升前端开发者调试效率的秘密武器

VSCode Console Helper:提升前端开发者调试效率的秘密武器 在前端开发的世界里,Visual Studio Code (VSCode) 已经成为了许多开发者的首选代码编辑器。其强大的插件系统让开发者可以根据自己的需求定制工作环境。今天,我们要介绍的就是一款能够进一步提升开发者效率的VSCode插件——。 项目简介 VSCode Console Helper 是一个专为前端开发者设...

gitblog_00058的博客 559

基于STM32L4XX、HAL库的MAX13487EESA RS485总线收发器驱动程序设计

MAX13487EESA是一款3.3V供电的RS-485/RS-422收发器,由Maxim Integrated生产。PA4 (控制引脚) ---> /RE, DE (连接在一起)具有±15kV ESD保护的驱动器输出和接收器输入。半双工RS-485/RS-422通信。工业温度范围:-40°C至+85°C。工作电压范围:3.0V至3.6V。数据速率高达250kbps。

zhusl6688的博客 687

YOLOv11改进策略【卷积层】| ICCV-2023 LSK大核选择模块 包含二次独家创新

LSK module是。

Limiiiing的博客 1385

Linux 下的根用户安全管理策略及实践,第 2 部分: 权限安全使用和密码管理

root 权限安全使用 配置 sudo 安装后只有仔细配置,sudo 才会安全和可靠。sudo 配置文件是 /etc/sudoers。可以编辑这个文件,以赋予特定用户只能够以 root 特权运行某些特定命令(而非任何命令)的能力。还可以限制这些用户只能使用某些特定的选项或参数运行命令。或者可以设置 sudo,使一个特定用户当以 root 特权运行命令时,不能使用一个特定的选项或参数。 编

我在全球村 2334

Python爬虫实战 | 拼多多商品评论采集与深度分析

本文从 API 调用、网页渲染到情感分析与关键词提取,全流程剖析了“拼多多商品评论采集与分析”项目。Scrapy + API 可快速抓取评论;Playwright 可突破 API 限制,抓取完整页面内容;数据清洗 + 分析揭示用户真实反馈;可持续部署、扩展至更多商品 & 时间段;

2201_76125261的博客 1696

随笔5 - C#控制台窗口的显示与隐藏

1. 定义一个Consolse帮助类,如下: /// /// 控制台帮助类 /// public static class ConsoleHelper { /// /// 获取窗口句柄 /// /// /// ///

leixf 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pkexec简介

名字 pkexec - 以其他用户身份执行命令 概要 pkexec[--version] [--help] pkexec[--用户用户名]程序[参数...] 描述 pkexec允许授权用户以其他用户身份执行程序。如果未指定用户名,则程序将以管理超级用户root 身份执行。 返回值 成功完成后,返回值是PROGRAM的返回值。如果调用进程未获得授权,或者无法通过身份验证获得授权或发生错误,则 pkexec将退出,返回值为 127。 安全说明 以其他用户身份执行程序是特权操作。默认情...

sherlockmj的博客 7802

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

linux pkexec允许授权用户以其他身份执行程序

ubuntu官方开发网站 http://manpages.ubuntu.com/ pkexec命令(详细介绍见如下网址) http://manpages.ubuntu.com/manpages/bionic/man1/pkexec.1.html pkexec 以其他用户身份执行的命令 pkexec [--user username] PROGRAM [ARGUMENTS...] pkexec允许授权用户以其他用户身份执行PROGRAM。如果用户名不是指定,则程序将以管理超级用户 root身份执行。 成功完

qq_42896627的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

linux pkexec以root身份运行基于qt的应用程序

接上篇 在登录用户为普通用户的情况下,因为我们需要弹窗来供用户输入,以root身份是不需要输入密码的,下面碰到的情况是以普通用户运行时碰到的情况 以 pkexec /home/jin/work/ConfidentialCheckSystem/Client运行我们的客户端 jin@jin:/tmp$ pkexec /home/jin/work/ConfidentialCheckSystem/Client QXcbConnection: Could not connect to display 已放弃 (核

qq_42896627的博客 4974

linux java pkexec提权并打开一个图形界面程序

程序示例 static void pkexecGui() throws Exception { try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec("pkexec env DISPLAY=:0 XAUTHORITY=/home/yeqiang/.Xauthority filezilla"); InputStream stdin = proc.

hknaruto的专栏 1042

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 406

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 235

【每天一个 Python 小案例30】Python 基础知识综合小项目:我的工具盒

作为系列收官,本篇把前 29 篇的知识点合成一个能直接用的命令行工具"我的工具盒":计算器(用 ast 解析表达式,不碰 eval)、单位换算与温度转换(一张换算表 + 特例分支)、记账与分类统计(Decimal + JSON 持久化)、以及用"字典当命令表"把菜单和业务逻辑解耦的主循环。文中对比了 eval 的安全隐患与 ast 白名单的做法,解释了 lambda 闭包在字典里的写法与晚绑定陷阱,并在最后给出整个系列的知识地图,把变量、数据结构、控制流、函数、类、异常、文件、标准库八块内容对应到具体篇目。

xinjiyaya的博客 426

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 207
上一篇: LWN:统一Linux 随机数设备!
下一篇: LWN:更好地理解为何会丢弃网络包!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值