什么是葡萄酒计划的’ptrace_scope’解决方法,是否有任何风险?

要在WINE中运行某些Windows程序,您需要以下解决方法:

echo 0|sudo tee /proc/sys/kernel/yama/ptrace_scope 

根据支持网站的说法,这是由于Ubuntu内核中的一个错误阻止了ptrace和WINE一起播放。

使用上面的命令你将ptrace设置为0根据我所做的研究(不要问我哪些网站,我看起来很多),ptrace与程序之间的交互有关。 0设置比1更宽松。

我必须假设Ubuntu有一个很好的理由想要ptrace = 1,所以这会让我回到问题的简短forms。

设置ptrace = 0是否存在任何风险。 降低安全性? 问题调试? 我还没有想到的任何其他人???

对于任何阅读此内容的人来说PS都会想知道这个bug会导致什么,Windows程序根本无法打开,在系统监视器中你会看到程序的许多实例试图打开,然后他们最终会全部退出并且如果你运行程序对于终端,您将收到一个错误,告诉您已达到最大程序实例数。

简短的回答:没有实际的危险,但请继续阅读以获得更好的方法……


无论如何,这个ptrace是什么东西?

这是因为Ubuntu内核中的一个错误会阻止ptrace和WINE一起播放。

  • 不,ptrace保护是在Ubuntu 10.10周围首次引入的深思熟虑的内核安全措施 。 这不是一个错误 ,因此不会被“修复”。

  • 简单来说,默认的ptrace_scope值为1阻止一个进程检查和修改另一个进程, 除非第二个进程(子进程)由第一个进程(父进程)启动。

  • 由于wineserver为这些程序提供“Windows服务”的方式,这可能会导致Wine下的某些程序出现问题。

ptrace_scope设置为0什么风险?

  • 这将恢复旧行为,即一个进程可以“跟踪”另一个进程,即使没有父子关系也是如此。

  • 从理论上讲,一件恶意软件可以用它来伤害你/你的电脑; 例如,它可以附加到Firefox并记录您的所有URL /密码等。实际上,除非您从随机站点等盲目安装二进制deb,否则这是极不可能的。

  • 就调试而言,除了用提升的权限(sudo)运行它们之外, gdbstrace等实际上需要0设置才能附加到非子节点。

解决方法有什么问题?

  • 解决方法有些问题,因为ptrace_scope是一个全局值,并且当它设置为0 ,系统上的所有进程都免于非子限制。
  • 如果您使用解决方法,请将其放在一个启用它的简单bash脚本中,运行Windows程序,然后在退出时禁用(设置为1)。
    • 不要像论坛post推荐的那样使ptrace_scope世界可写的(666) – 这是一个巨大的安全风险,因为现在任何进程都可以随意改变它!

有更好的解决方案吗?

  • 更安全且不需要重复修改ptrace_scope的更好的解决方案是授予Wineserver ptracefunction 。

    • 在终端:

       sudo apt-get install libcap2-bin 
       sudo setcap cap_sys_ptrace = eip / usr / bin / wineserver
       sudo setcap cap_sys_ptrace = eip / usr / bin / wine-preloader
      
    • 这使得wineserverwine-preloader二进制文件免于非子ptrace限制,并允许它们进行任何进程。

    • 它只需要完成一次,并且更安全,因为这些二进制文件通常来自可靠的来源 – 官方存储库或官方Wine PPA,因此它们不会是恶意软件。

如果你正在使用Crossover

安装libcap2:

  sudo apt-get install 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 

在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_PTRACEfunction临时授予ptrace权限,尽管此方法允许任何进程的ptrace。

所以我想简短的答案是,它不太安全,但个人计算机遭受这种攻击的可能性很小。

更新以上说明:

 sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wineserver; sudo setcap cap_sys_ptrace=eip /opt/cxoffice/bin/wine-preloader; 

在Ubuntu 18.04.1和PlayOnLinux v.4.2.12上使用最新的稳定版本Wine已经安装了v.3.0.1 libcap2,从不适用于9/15/2018。

Gnome终端中的错误消息如下:

 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 

不知道这意味着什么…..但我想我会把它放在那里供任何人解释,也许有一个新的,可行的解决方案。

谢谢。