0

0

Python 权限最小化原则的落地

冰川箭仙

冰川箭仙

发布时间:2026-02-25 15:33:09

|

426人浏览过

|

来源于php中文网

原创

os.chmod不生效的根本原因是当前进程无权限修改目标文件权限,常见于文件属主非当前用户或挂载点为只读;需检查属主、挂载选项,并用stat模块替代硬编码八进制。

python 权限最小化原则的落地

为什么 os.chmod 改权限不生效?

常见现象是调用 os.chmod('/path/to/file', 0o600) 后,ls -l 看权限没变,或者报 PermissionError: [Errno 1] Operation not permitted。根本原因不是函数写错了,而是当前进程没权限修改目标文件的权限位——尤其是当文件属主不是当前用户、或文件在只读挂载点上时。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 先确认当前用户是否为文件属主:os.stat(path).st_uid == os.getuid(),否则 chmod 失败是预期行为
  • 检查挂载选项:mount | grep $(df . | tail -1 | awk '{print $1}'),若含 ro(只读),任何 chmod 都会失败
  • 避免硬编码八进制字面量;用 stat.S_IRUSR | stat.S_IWUSR 更可读,也兼容不同平台对权限位的解释差异

如何让 Python 脚本启动时不带多余权限?

很多脚本一上来就用 sudo python script.py,结果后续所有生成的文件都带 root 属主,后续普通用户操作反而被卡住。这不是“要不要提权”,而是“提权时机和范围是否精准”。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 把需要特权的操作拆出来单独执行,比如用 subprocess.run(['sudo', 'ip', 'link', 'set', 'eth0', 'up']),而非全程跑在 root 下
  • 启动后立刻降权:用 os.setgid()os.setuid() 切换到非特权用户(需提前查好目标 uid/gid,且当前进程必须是 root 才能调用)
  • 注意 os.setuid() 不可逆,且一旦降权,无法再升回 root;务必在完成所有特权操作后再调用

tempfile.mkstemp 创建的文件为什么还是可被其他用户读?

默认情况下,tempfile.mkstemp() 返回的文件描述符对应文件权限是 0o600,但实际创建时受 umask 影响。如果系统 umask0o022,最终权限会变成 0o644——其他用户可读。

Gatekeep
Gatekeep

Gatekeep AI是一个专注于将文本转化为教学视频的智能教学工具,主要用于数学和物理等学科的教育。

下载

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 显式传入 dirprefix 参数还不够,必须配合 mode 参数:tempfile.mkstemp(mode='w+b', dir='/tmp', prefix='myapp_')
  • 更稳妥的做法是创建后立刻修正:os.fchmod(fd, 0o600)(注意是 fchmod,作用于 fd,不受 umask 干扰)
  • 别依赖 /tmp 的 sticky bit 来防窥探;它只防删,不防读——真正敏感内容应写入 /run/user/$(id -u)$XDG_RUNTIME_DIR

subprocess 调外部命令时怎么避免继承父进程权限?

Python 进程以 root 启动,再用 subprocess.run(['curl', ...]),子进程默认继承父进程的 uid/gid 和 capability 集。这意味着 curl 也能绑定低端口、访问 root-only 文件——完全违背最小权限原则。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • preexec_fn=os.seteuid + user 参数组合不可靠;推荐直接用 subprocess.run(..., user='nobody')(Python 3.9+),它会自动处理 uid/gid 切换和组权限清理
  • 旧版本 Python 可手动构造 preexec_fn:先 os.setgroups([]) 清空补充组,再 os.setgid(nobody_gid),最后 os.setuid(nobody_uid)
  • 特别注意:shell=True 会让权限控制失效——因为中间多了一层 shell 进程,且环境变量(如 PATH)可能引入不可控行为;一律禁用,改用列表形式传参

权限最小化不是“少开几个 sudo”,而是每次打开权限都要有明确的、不可绕过的理由,并在第一时间关掉。最容易被忽略的是子进程继承和 umask 漏洞——它们不会报错,只会悄悄扩大攻击面。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

192

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

13

2026.02.03

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

452

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

182

2023.10.30

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

46

2026.02.25

Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法
Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法

本专题系统整理Steam官网最新可用入口,涵盖网页版登录地址、新用户注册流程、账号登录方法及官方游戏商店访问说明,帮助新手玩家快速进入Steam平台,完成注册登录并管理个人游戏库。

5

2026.02.25

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

5

2026.02.25

Python数据处理流水线与ETL工程实战
Python数据处理流水线与ETL工程实战

本专题聚焦 Python 在数据工程场景下的实际应用,系统讲解 ETL 流程设计、数据抽取与清洗、批处理与增量处理方案,以及数据质量校验与异常处理机制。通过构建完整的数据处理流水线案例,帮助开发者掌握数据工程中的性能优化思路与工程化规范,为后续数据分析与机器学习提供稳定可靠的数据基础。

0

2026.02.25

Java领域驱动设计(DDD)与复杂业务建模实战
Java领域驱动设计(DDD)与复杂业务建模实战

本专题围绕 Java 在复杂业务系统中的建模与架构设计展开,深入讲解领域驱动设计(DDD)的核心思想与落地实践。内容涵盖领域划分、聚合根设计、限界上下文、领域事件、贫血模型与充血模型对比,并结合实际业务案例,讲解如何在 Spring 体系中实现可演进的领域模型架构,帮助开发者应对复杂业务带来的系统演化挑战。

0

2026.02.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号