![如何在不授予任何 Internet 访问权限的情况下运行 Windows 程序?](https://linux22.com/image/176020/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E6%8E%88%E4%BA%88%E4%BB%BB%E4%BD%95%20Internet%20%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E8%BF%90%E8%A1%8C%20Windows%20%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
所以我在 Linux 上有 CrossOver,但由于这基本上是我也帮助 Wine 人员的项目,并且几乎所有基础知识都适用于两者,所以我在下面询问葡萄酒。
是否可以在Wine下启动一个Windows程序,使其完全无法访问互联网?
到目前为止,我在这件事上还是两手空空。我正在考虑编写自己的共享对象,以便进行修补,LD_PRELOAD
但这类事情无论如何都与主题无关。
有没有办法从纯粹的用户角度来实现我想要的?内核命名空间可以以任何方式用于此目的吗?
答案1
我可以想到这种复杂的方式:创建一个单独的用户帐户,例如 wineuser 并在其下运行您的 Windows 应用程序。您可能想在您的用户帐户下运行此命令:(xhost +SI:localuser:wineuser
以允许 wine 用户访问您的图形会话)并在 wine 帐户下导出 DISPLAY 变量,例如export DISPLAY=:0
要限制此用户访问 Internet,请运行此命令/添加此 iptables 规则:
iptables -I OUTPUT -m owner --uid-owner wineuser -j DROP
(或者您可以使用 REJECT 而不是 DROP)。
您还可以尝试 OpenSnitch:https://itsfoss.com/opensnitch-firewall-linux/或 LAF(Linux 应用程序防火墙):https://github.com/matrix-ac/LAF
答案2
您可以取消共享网络命名空间:
sudo unshare -n -- su your_user -c your_command