如何在域环境Windows Server 2019中保护Python项目免受域管理员访问?
从RAM运行加密Python项目并防止域管理员访问的可行方案
需求目标
- 使用非域管理员的本地管理员AD账户登录已加入域的Windows Server 2019
- 以服务形式运行Python 3脚本(仅维护时停止),环境已预装Python 3
- 启动时需验证双密码(AD账户密码+加密归档密码)
- 密码验证通过后,将加密归档中的Python项目直接解压至RAM并运行,绕过磁盘临时目录
- 运行期间对归档内类数据库文件的修改需持久化回加密归档
核心要求
防止无该AD账户密码及归档密码的人员(包括域管理员)访问项目的脚本、依赖、类数据库文件及配置
背景原因
项目包含敏感数据,无法信任所有域管理员,且无法修改域管理员权限
已调研情况
已确认基于Dokan的memfs等会话级虚拟RAM盘是可行方向,但希望了解其他Python 3兼容的从RAM运行项目的方式;已排除exec或python.exe -c参数(项目规模大且含多脚本引用),PyFilesystem的MemFS仅支持Python 2,自定义sys.path导入钩子不可行,需提前创建RAM挂载点且直接解压至RAM
可行方案推荐
方案1:Dokan RAM盘 + 加密归档命令行工具组合
这是最直接且符合需求的方案,步骤如下:
- 提前创建RAM挂载点:用目标本地管理员AD账户登录,通过Dokan工具创建会话级RAM盘(如
Z:),并通过NTFS权限设置仅允许该AD账户读写,拒绝域管理员组及其他所有用户的访问权限(即使域管理员有本地管理员权限,NTFS拒绝权限优先级更高)。 - 双密码验证逻辑:编写一个轻量启动器(可使用Python或C#实现),首先验证当前登录的AD账户密码(通过Windows API验证本地凭据),再要求输入加密归档密码。
- 直接解压至RAM盘:验证通过后,使用支持密码的命令行归档工具(如7-Zip的
7z.exe),将加密归档直接解压到RAM盘,命令示例:7z.exe x "C:\path\to\encrypted_project.7z" -p"归档密码" -o"Z:\" -y - 启动Python服务:配置Windows服务以该AD账户身份运行,指向RAM盘中的Python脚本入口文件(如
Z:\main.py),确保服务启动依赖于RAM盘挂载完成。 - 持久化修改:编写定时任务或脚本退出钩子,定期将RAM盘中的类数据库文件(如
Z:\data\db.db)重新加密归档回原存储位置,命令示例:7z.exe u "C:\path\to\encrypted_project.7z" -p"归档密码" "Z:\data\db.db" -y
方案2:Windows内置DiskPart RAM磁盘 + 加密归档
如果不想依赖第三方Dokan工具,可使用Windows自带的diskpart创建RAM磁盘:
- 创建RAM磁盘脚本:编写
.bat脚本通过diskpart创建固定大小的RAM盘,示例:diskpart /s create_ramdisk.txtcreate_ramdisk.txt内容:
注意:创建后同样设置NTFS权限仅允许目标AD账户访问。create vdisk file="C:\RamDisk.vhd" maximum=4096 type=expandable attach vdisk create partition primary format fs=ntfs quick label="RAMDisk" assign letter=Z - 后续步骤同方案1:双密码验证、解压至RAM盘、启动服务、持久化修改。
方案3:Python内存文件系统挂载库(Fusepy)
如果希望纯Python实现内存文件系统,可使用支持Windows的fusepy库(Python 3兼容):
- 安装依赖:
pip install fusepy - 实现内存文件系统:基于
fusepy创建内存中的文件系统挂载点,将加密归档中的文件解压到该内存FS中(使用pyzipper处理加密ZIP归档)。 - 修改Python路径:将内存FS的挂载路径添加到
sys.path,让Python可以正常导入项目中的模块。 - 双密码验证与持久化:同样实现双密码验证逻辑,运行期间监控类数据库文件的修改,定时将修改内容写回加密归档。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

