想做个 Windows 上类似 Docker 的软件来安装国产软件

2020-11-11 11:58:46 +08:00
 naoh1000
Sandboxie 的文件权限管理是黑名单机制的,即你只能禁止运行在里面的软件读取某个文件夹。这不能很好地阻止国产软件扫描硬盘。我想做一个软件,在里面运行一个软件安装包会自动创建一个容器,容器内只能访问一些系统文件,用户可以把主机上的某个需要用到的目录挂载进容器,或者创建 volumes 来持久化数据,像 Docker 一样。最近注意到 Containerd 已经支持了 Windows 的进程隔离(非 Hyper-V )想问下 V 友这样做的可行性以及基于 Sandboxie 开发还是 Containerd 开发容易一些。
5791 次点击
所在节点    奇思妙想
22 条回复
mouyase
2020-11-11 12:08:16 +08:00
不懂但是支持
zjlletian
2020-11-11 12:24:00 +08:00
Containerd 是基于 linux 的,你想说的应该是 windows 下的云端软件,你搜一下云端软件就知道了,好几年前比较火,不过这玩意儿已经凉的差不多了。。
naoh1000
2020-11-11 12:25:26 +08:00
@zjlletian 不是云端软件,是运行在用户电脑上的。看 Containerd 的 Readme.md ,这项目是支持 Windows 的。
Cooky
2020-11-11 12:26:46 +08:00
沙盘不用禁止读写,直接把目录设成空的就完了
0TSH60F7J2rVkg8t
2020-11-11 12:28:18 +08:00
我估计实现不了,因为国产软件在 Windows 下全都用了驱动,驱动在 ring0 层,docker 的模式应该隔离不了
jinliming2
2020-11-11 13:53:41 +08:00
我觉得比较靠谱的是参考 windows 10 自带的那个 Sandbox 。
zh584728
2020-11-11 14:05:09 +08:00
@jinliming2 windows 10 自带的沙盒好像不能保存,关闭后就销毁了
Osk
2020-11-11 14:06:24 +08:00
Windows 自带的沙盘,也是 hyper-v 。。。
codehz
2020-11-11 20:28:07 +08:00
我也在研究这个,但是这玩意没有文档,然后我测试了一下 container.dll 里的 WcCreateDescriptionFromXml 函数,大致研究出了一部分选项(里面文本是乱编的,肯定不能正确创建,但是至少试探出了能过解析的选项列表)

然而,一旦传递给 WcCreateContainer 函数,除了 job 命名空间能创建之外,其他的全部爆炸。。。我打算回归手动使用 bindfltapi.dll wcifsapi.dll iphlpapi.dll 去折腾...
前两个大概是和文件系统重定向有关的,后者用 SetJobCompartmentId 来管理网络命名空间
注册表看起来涉及 \Device\VRegDriver
挂载点似乎就是直接和 \\.\MountPointManager 通讯
命名管道也是 \\.\Pipe
lxilu
2020-11-11 21:41:28 +08:00
用标准账户运行
Yangz
2020-11-12 01:57:55 +08:00
@naoh1000 不,那个“云端软件”不是指云端技术,而是有一个软件平台名字就叫做“云端软件”
zjlletian
2020-11-12 11:45:02 +08:00
@naoh1000 只是名字叫云端软件,并不是现在的所谓的云的概念,你去了解一下就知道了
tankb52
2020-11-12 11:52:56 +08:00
@naoh1000
2012 年的 windows 端软件了。
可以看下面的链接介绍。

http://xbeta.info/yunduan.htm
http://xiazai.zol.com.cn/detail/37/366961.shtml
systemcall
2020-11-13 18:44:58 +08:00
Windows 下有不同级别的容器。Windows Sandbox,win32 转制的 UWP,Windows Defend 应用程序高级防护是不同的级别,微软自己的文档有
我想到一个方法,就是用 Windows Sandbox 来弄一块与宿主隔离的环境,里面再跑自己的容器
Windows Sandbox 自己有文件夹共享、启动脚本、GPU 虚拟化这类功能。不能存盘不见得是坏事,只要对应用程序来说是有存盘的功能的就可以了,自己的沙盒漏沙了都不要紧
给 Windows Sandbox 里面加进去存档的目录,启动时运行自己的沙盒就行了。不过没有试过在那里面加载没有签名的驱动,不知道能不能跑起来
systemcall
2020-11-13 18:48:42 +08:00
@ahhui 不知道能不能把那些驱动丢到一个 VM 里面跑。驱动和主程序之间好像走的是 RPC 吧,不清楚这方面的东西。
国产软件为了兼容 XP 和没有装显卡驱动的电脑,就算没有 3D 加速一样的跑。感觉丢到虚拟机里面可能还要快一些,因为没有多少文件给他们扫
0TSH60F7J2rVkg8t
2020-11-13 21:28:57 +08:00
@systemcall 这个问题我回答不了,不是驱动专家。可能要请教相关专业人士。不过国产软件带驱动也能在虚拟机里跑,但你如果本来要做 docker 的结果搞成了 vmware 的话,那工程可就浩大了
codehz
2020-11-14 01:50:54 +08:00
@naoh1000 containerd 的方案没窗口,只能用 ui 自动化 api 操作(
muzuiget
2020-11-16 14:41:46 +08:00
Windows 版的 Docker 还是虚拟机的,不用 Docker 了,直接虚拟机就行。
naoh1000
2020-11-16 15:57:56 +08:00
@muzuiget Docker 的 Containerd 已经支持了 Windows 的进程隔离(限 Windows 2019 )
Joker123456789
2020-11-19 15:46:59 +08:00
可以研究下 ios 的 app 管理机制。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/723961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX