要在 WINE 中运行某些 Windows 程序,您需要采取以下解决方法:
echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope
根据支持网站,这是由于 Ubuntu 内核中的一个错误导致 ptrace 和 WINE 无法很好地协同运行。
使用上述命令将 ptrace 设置为 0,根据我所做的研究(不要问我哪些网站,我看过很多),ptrace 与程序之间的交互有关。0 设置比 1 更宽松。
我必须假设 Ubuntu 想要 ptrace=1 是有充分理由的,所以这让我回到问题的简短形式。
设置 ptrace=0 是否存在风险?安全性较低?调试时出现问题?还有其他我没想到的问题吗?
PS,对于任何读过这篇文章并想知道这个错误会导致什么的人,Windows 程序将根本无法打开,在系统监视器中,您将看到许多程序实例试图打开,然后它们最终将全部退出,如果您为终端运行该程序,您将收到一个错误,告诉您已达到程序实例的最大数量。
答案1
简短的回答:目前还没有实际危险,但请继续阅读以找到更好的方法......
这是什么跟踪无论如何?
这是由于 Ubuntu 内核中的一个错误导致 ptrace 和 WINE 无法很好地协同运行。
不,ptrace 保护是刻意的内核安全措施最早是在 Ubuntu 10.10 左右推出的。它不是一个错误,因此不会被“修复”。
简单来说,默认
ptrace_scope
值1
阻止一个进程检查和修改另一个进程除非第二个进程(子进程)由第一个进程(父进程)启动。由于 Wine
wineserver
为这些程序提供“Windows 服务”的方式,这可能会导致 Wine 下的一些程序出现问题。
ptrace_scope
设置为 有哪些风险0
?
这恢复了旧的行为,即一个进程可以“追踪”另一个进程,即使不存在父子关系。
理论上,恶意软件可以利用这一点来损害您/您的计算机;例如,它可以附加到 Firefox 并记录您的所有 URL/密码等。实际上,除非您盲目地从随机站点安装二进制 deb,否则这种情况极不可能发生。
就调试而言,除非您使用提升的权限(sudo)运行它们,否则这些
0
设置实际上需要用于gdb
、strace
等附加到非子项。
该解决方法存在哪些问题?
- 该解决方法有些问题,因为
ptrace_scope
是一个全局值,当它被设置为时0
,系统上的所有进程都不受非子限制。 - 如果您使用该解决方法,请将其放入一个简单的 bash 脚本中,启用它,运行您的 Windows 程序,然后在退出时禁用(设置为 1)。
- 不要按照论坛帖子的建议,将
ptrace_scope
其设置为全球可写(666)——这是一个巨大的安全风险,因为现在任何进程都可以随意更改它!
- 不要按照论坛帖子的建议,将
有没有更好的解决办法?
更安全且不需要重复修改的更好解决方案ptrace_scope是授予 Wineserver ptrace 功能。
在终端中:
sudo apt-get 安装 libcap2-bin sudo setcap cap_sys_ptrace=eip /usr/bin/wineserver sudo setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
这免除了葡萄酒服务器和wine-预加载器二进制文件不受非子 ptrace 限制,并允许它们对任何进程进行 ptrace。
- 它只需要执行一次,并且更安全,因为这些二进制文件通常来自可信来源 - 官方存储库或官方 Wine PPA,所以它们不会是恶意软件。
如果你使用 Crossover
安装 libcap2:
sudo apt-get 安装 libcap2-bin;
然后,为 Crossover 添加一个例外:
sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wineserver; sudo setcap cap_sys_ptrace = eip / opt / cxoffice / bin / wine-preloader;
最后,将其库添加到 ld.so.conf(否则您将收到“加载共享库时出错:libwine.so.1:无法打开共享对象文件:没有此文件或目录”):
echo /opt/cxoffice/lib/ | sudo tee /etc/ld.so.conf.d/crossover.conf sudo /sbin/ldconfig
答案2
在里面ubuntuforums.org我通过以下链接得到了答案
https://wiki.ubuntu.com/SecurityTeam/Roadmap/KernelHardening#ptrace_Protection
这是来自链接的粘贴内容(我添加了重点)
随着 Linux 越来越受欢迎,它将成为恶意软件日益增长的目标。Linux 进程接口的一个特别令人不安的弱点是单个用户能够检查其任何进程的内存和运行状态。例如,如果一个应用程序(例如 Firefox)受到攻击,攻击者就有可能附加到其他正在运行的进程(例如 gpg-agent)以提取其他凭据并继续扩大攻击范围。
这不是一个理论问题。如果正常允许 ptrace,则完全有可能实现 SSH 会话劫持,甚至任意代码注入。
解决方案是,一些应用程序使用 prctl() 来明确禁止此类 ptrace 附件(例如 ssh-agent)。更通用的解决方案是仅允许 ptrace 直接从父进程到子进程(即直接 gdb 和 strace 仍然有效),或以 root 用户身份(即 gdb BIN PID 和 strace -p PID 仍然以 root 身份有效)。
此行为通过 /proc/sys/kernel/yama/ptrace_scope sysctl 值控制。默认值为“1”,用于阻止非子 ptrace。值为“0”可恢复之前更宽松的行为,这可能更适合某些仅具有管理员帐户的开发系统和服务器。使用“sudo”还可以通过 CAP_SYS_PTRACE 功能临时授予 ptrace 权限,但此方法允许任何进程的 ptrace。
因此,我想简短的回答是它不太安全,但个人电脑遭受此类攻击的可能性非常小。
答案3
更新上述说明:
sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wineserver;
sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wine-preloader;
自 2018 年 9 月 15 日起,在 Ubuntu 18.04.1 和 PlayOnLinux v.4.2.12 上使用最新稳定版本 Wine(v.3.0.1 libcap2 已安装)时无法运行。
Gnome Terminal 中的错误信息如下:
Failed to set capabilities on file `/usr/bin/wineserver' (Invalid argument)
The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file
不确定这意味着什么.....但我想把它放在那里让任何人都能解释,也许会有一个新的、可行的解决方案。
谢谢。
答案4
在 Ubuntu 19.10 上/usr/bin/wineserver
,/usr/bin/wine-preloader
实际上是符号链接而不是文件。这可能也适用于 18.04。我在另一篇文章中看到了以下解决方案,但我再也找不到了。试试这个:
sudo setcap cap_sys_ptrace=eip "$(readlink -f "/usr/bin/wineserver")"
sudo setcap cap_sys_ptrace=eip "$(readlink -f "/usr/bin/wine-preloader")"
根据您使用的 wine 包,您必须添加类似以下内容:
echo /opt/wine-stable/lib/ | sudo tee /etc/ld.so.conf.d/wine.conf
或:
echo /opt/wine-staging/lib/ | sudo tee /etc/ld.so.conf.d/wine.conf
后跟:
sudo /sbin/ldconfig