首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >以超级用户身份在python中打开文件

以超级用户身份在python中打开文件
EN

Stack Overflow用户
提问于 2011-09-08 21:37:43
回答 4查看 10.9K关注 0票数 5

我必须打开一个系统文件并从中读取。此文件通常只有root用户(超级用户)才能读取。我有一种方法可以向用户索要超级用户密码。我希望使用此凭据打开文件并从中读取,而无需将整个程序作为超级用户进程运行。有没有办法以一种多平台的方式实现这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-08 23:30:33

由于特权在类Unix系统和Windows上的工作方式完全不同,因此需要特定于平台的代码。在任何情况下,您都需要将程序拆分成两个独立的程序,其中一个程序以提升的权限运行,另一个程序以标准/降低的权限运行。

在类Unix系统(包括Linux和Mac OS X)中,以提升权限运行的可执行文件应执行以下操作:

  1. 假定您是以超级用户身份运行的,并打开文件进行读取。由于您提到该文件非常大,因此实际上并不读取整个文件,而只是保留一个打开的文件描述符。如果打开失败,则打印一条错误消息并退出。
  2. 使用setreuid(2)setregid(2)将您的用户ID和组ID重新设置为非特权用户。
  3. 使用exec(3)函数之一来执行您要创建的非特权用户,以便您可以在不使用sudo的情况下运行此程序,然后使其归超级用户所有并使用root使其成为set- user -ID可执行文件

非特权程序现在将以普通权限运行,但当它启动时,它将有一个打开的文件描述符(文件描述符#3),可用于读取您的特殊文件。

对于Windows,它类似,但略有不同:

  1. 假定您是以超级用户身份运行的,并使用CreateFile打开要读取的文件。不要使用默认的安全属性--创建一个bInheritHandle设置为TRUESECURITY_ATTRIBUTES结构,以便子进程可以继承该句柄。如果打开文件失败,则打印一条错误消息并退出。
  2. 使用CreateProcess启动子进程。在命令行中传入上面的句柄(例如,打印为数值);您也可以使用use a shared memory region,但这比在此可执行文件中将requireAdministrator设置为true时使用此problem.
  3. Embed a manifest更麻烦。执行此操作后,当您运行该程序时,会出现一个UAC提示,询问您是否允许该程序进行更改。

然后,子进程通过解析命令行来获取继承的句柄,然后可以根据需要读取数据。

这种方法的一个问题是,当您继承一个句柄时,您必须使用低级系统调用(在Unix上是read(2),在Windows上是ReadFile )来读取它--您不能使用像C的fread(3)或C++的iostream这样的高级函数(好的,Unix有fdopen(3),但据我所知,在Windows上没有对应的函数)。

我相信你现在已经注意到了,上面的一切都是用C编写的。在Unix中,这可以非常直接地转换成Python,因为os module有很多好东西,比如setreuidexec*fdopen。在Windows上,您也许可以使用ctypes模块和/或Pywin32来做一些这样的事情,但是坚持使用C可能更容易一些。

票数 4
EN

Stack Overflow用户

发布于 2011-09-08 21:45:00

您正在寻找的是所谓的权限提升,这在很大程度上取决于您运行的平台。一般来说,你的程序需要做的就是以超级用户的身份运行一部分。例如,在unix系统上,您可能能够使用sudo读取文件的内容。

但如前所述,这实际上取决于您运行的系统。

票数 4
EN

Stack Overflow用户

发布于 2011-09-08 22:47:40

我会把程序一分为二。

  1. 负责打开文件和访问内容。它可以假定它是用它needs.
  2. Everything的特权启动的,否则不需要特殊特权。

输入一个配置项,描述如何对需要额外权限的命令执行execsubprocess操作。即。

access_special_file: sudo access_special_file

access_special_file: runas /user:AccountWithPrivs access_special_file

这会将特权提升的一些系统细节转移到系统shell,在系统shell中可能有更方便的方法来获得所需的权限。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7354834

复制
相关文章
如何使用mimic在LInux中以普通用户身份来隐藏进程
mimic是一款针对进程隐藏的安全工具,在该工具的帮助下,广大研究人员可以通过普通用户身份来在Linux操作系统(x86_64)上隐藏某个进程的执行。
FB客服
2023/08/08
4460
如何使用mimic在LInux中以普通用户身份来隐藏进程
提示以只读方式打开文件
如果不希望内容审阅者意外修改你的文档,可在发送文档供审阅前将其设为只读。 另一种方法是限制格式和编辑。
MIKE笔记
2023/03/22
1.8K0
提示以只读方式打开文件
在 Azure Application Insights 中记录用户身份信息
Azure Application Insights 是一个非常强大的 APM 工具,用于监视 Web 应用程序。但是,并非我们需要的所有功能都是开箱即用的。例如,为了记录请求和响应正文,我们必须写一个自定义 ASP.NET Core 中间件,就像这篇文章说的那样。
Edi Wang
2021/08/23
1K0
在 Azure Application Insights 中记录用户身份信息
python打开文件
open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象。假设我要打开我硬盘(I:/python/test.txt) 文件,可以用下面方法:
用户8442333
2021/12/16
3.3K0
python中如何打开csv文件_python如何读取csv文件
python如何读取csv文件,我们这里需要用到python自带的csv模块,有了这个模块读取数据就变得非常容易了。
全栈程序员站长
2022/09/16
7.9K0
python中如何打开csv文件_python如何读取csv文件
Android获取超级用户权限删除文件
获取超级用户权限的windows代码如下: 打开命令提示符,进入sdk\platform-tools文件夹,找到adb.exe。然后输入如下代码:
提莫队长
2019/02/21
1.7K0
用户和组账号概述 Linux基于用户身份对资源访问进行控制 用户帐号: 超级用户root、普通用户、 程序用户 超级用户,即root用户,类似于Windows系统中的Administrator用户
Linux基于用户身份对资源访问进行控制 用户帐号: 超级用户root、普通用户、 程序用户
青灯古酒
2023/10/16
4390
用户和组账号概述 Linux基于用户身份对资源访问进行控制 用户帐号:  超级用户root、普通用户、  程序用户 超级用户,即root用户,类似于Windows系统中的Administrator用户
Mac在文件夹/终端中打开终端/文件夹
如图,想要在终端中到该文件夹,自然而然的办法是cd /usr/share/doc/postfix/html, 但其实还有更简洁的办法,即如上安装Go2Shell或cd to插件
fliter
2023/06/18
1K0
Mac在文件夹/终端中打开终端/文件夹
python自学——文件打开
#文件的打开 新建一个文件new file.txt #方法一:f=open("yesterday","r",encoding="utf-8") # #首先给文件内存变量赋予一个变量F, 通常使用F作为变量名称。使用open函数来打开已有文件 #方法二:现在系统默认字符编码为utf-8 open("yesterday",encoding="utf-8").read() 有待更新,等我学习了字符编码在回来改 open("yesterday",encoding="utf-8").read() #f=ope
py3study
2020/01/19
1.9K0
在linux中打开解压和创建rar文件
RAR 是用于创建和提取压缩存档 (.rar) 文件的最流行的工具。当我们从 Web 下载存档文件时,我们需要一个 rar 工具来提取它们。 RAR是用于创建和提取压缩存档(.rar)文件的最流行的工具。当我们从 Web 下载存档文件时,我们需要一个rar工具来提取它们。 RAR在 Windows 操作系统下可以免费使用来处理压缩文件,但不幸的是rarLinux 系统下未预装该工具。 第 1 步:如何在 Linux 中安装 Unrar $ sudo apt-get install unrar Or $ su
入门笔记
2022/06/02
4.2K0
win文件夹上右键后以xx打开
本文是右键在文件夹上的设置,在文件夹和文件上右键是不一样的. 1.打开注册表 win+r输入regedit打开注册表,找到如下路径(地址栏输入). #路径: 计算机\HKEY_CLASSES_ROOT\Directory\shell 2.增加新项 项可以类比为文件夹 shell上右键 -> 新建 -> 项,名称可以自己设置. shell下面的每个项都有些基本的属性 3.设置菜单名字和菜单图标 一般新建项时,右边只会有个默认,Icon部分需要自己添加(新建字符串值). 如果不设置默认值,项的
玖柒的小窝
2021/09/09
1.8K0
win文件夹上右键后以xx打开
vim打开多个文件、同时显示多个文件、在文件之间切换 打开多个文件:
1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开一个文件,并且此时vim里会显示出file文件的内容。
sunsky
2020/08/19
15.4K0
matlab中importdata无法打开文件_importdata无法打开文件
最近使用importdata函数不能读取全部数据,数据集315行,但是读取了197行,那就是197-198之间有问题,百度之后有了思路。由于没有找到具体的证据,所以这里说一下解决思路。
全栈程序员站长
2022/11/16
6.2K0
matlab中importdata无法打开文件_importdata无法打开文件
以管理员身份修改hosts文件_如何修改hosts文件权限
修改host文件的时候若不是以管理员的身份,无权限修改host中的内容。简单说明如何使用powershell的方法修改host文件。
全栈程序员站长
2022/11/08
7.2K1
以管理员身份修改hosts文件_如何修改hosts文件权限
Mac OS X在终端中打开文件夹窗口
版权声明:如未注明转载,则均为公子原创。原创不
大数据工程师-公子
2019/03/14
3.3K0
.java文件怎么在cmd中运行(以Helloworld为例)
提示:下面这个是有关.java文件怎么在cmd中运行的教程(以win10操作系统为主)
全栈程序员站长
2022/09/01
6.6K0
Runas命令能让域用户/普通User用户以管理员身份运行指定程序
举个例子,你需要用administrator权限启动notepad.exe,你可以写成这样: runas /user:administrator notepad.exe
孙杰
2019/10/29
5.4K0
Kubernetes 中的用户与身份认证授权
本章主要简单阐述 Kubernetes 认证相关原理,最后以实验来阐述 Kubernetes 用户系统的思路。主要内容:
从大数据到人工智能
2023/02/21
2K0
Kubernetes 中的用户与身份认证授权
Python打开文件夹
import osos.system("start explorer c:") #c:为要打开c盘,也可以改成其他路径
py3study
2020/01/06
1.6K0
python基础之文件打开
  Python 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。下面我们来介绍一下python的文件打开相关知识。
jiankang666
2022/12/05
7420

相似问题

以超级用户身份从python脚本运行命令

83

无法在DRF中以超级用户身份登录。

15

MariaDB -无法以超级用户身份登录

21

以超级用户身份通过BAT文件运行进程

16

无法以超级用户身份登录mysql

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文