最初在 r/vmware 上提出的问题

最初在 r/vmware 上提出的问题

最初在 r/vmware 上提出的问题

在 Ubuntu 20.04 上安装了最新的 VMware Workstation (15.5.5)。当我尝试从另一台安装了相同版本 VMware Workstation 的 PC 连接到这台 PC 时,出现错误,提示 VMware Workstation Server 意外关闭了连接。尝试检查 Vmware 日志,但没有任何有趣的内容。在 Ubuntu 19.10 上没有这样的问题。有人遇到过这个问题吗?有什么办法可以解决吗?

笔记: u/EvilEarthWorm 说 19.10 没有这个问题是错误的 :P 但那与此无关,

我对同一问题的重新表述:

尝试连接到 VMware Workstation Pro 14 或 VMware Workstation Pro 15 的共享虚拟机时,在 Ubuntu 19.x 或 Ubuntu 20.x 上运行作为主机,使用另一个 vmware 工作站(例如在 Windows 或其他 Linux 上运行)或使用 Mac Fusion 会/usr/lib/vmware/bin/hostd神秘崩溃。在/var/crash/_usr_lib_vmware_bin_appLoader.<id>.crash但由于没有可用的调试符号,因此信息不多。

通常远程连接会断开并出现类似以下神秘消息:A secure connection to the server could not be stablished

VMWare Fusion 上的神秘信息

发生了什么事?有解决办法吗?

答案1

因此,这就是答案,最初由我在 reddit 上的 r/vmware 上发布,但我认为最好也将其发布在这里:

TLDR;

这是针对 Ubuntu 19/20 或任何其他系统上尝试访问共享虚拟机时崩溃(即/var/lib/vmware/bin/hostd)神秘崩溃的问题的简单修复。

cp /etc/pam.d/vmware-authd ~/vmware-authd.backup
sed  -e '/pam_cap/s/^.*$/# -- pam_cap does not work for multithreaded apps -- /' /etc/pam.d/common-auth | sudo tee /etc/pam.d/common-auth-mt
sudo -i -e 's/common-auth/common-auth-mt/' /etc/pam.d/vmware-authd 

关于为什么这样做的详细信息,

罪魁祸首是 /etc/pam.d/common-auth包含的条目pam_cap.so。事实证明/usr/lib/vmware/bin/hostd这是一个多线程应用程序,并且pam_cap.so无法与它们一起使用:

描述

pam_cap PAM 模块设置当前进程的可继承功能。

功能是从 /etc/security/capability.conf 配置文件或使用 config= 选项指定的备用文件中读取的。

该模块不能被多线程应用程序调用。

(来源:pam_cap(8) 手册页)

事实证明hostd它是多线程的:P

因此,我们创建所有“common-*”文件的“多线程”版本(事实证明它只是 common-auth)并将其用于我们的多线程应用程序。

当然,您可以手动执行上面的 TLDR; 操作,如下所示:

❯ /bin/cat /etc/pam.d/vmware-authd

#%PAM-1.0
auth     include        common-auth-mt
account  include        common-account
password include        common-password
session  include        common-session

❯ cat common-auth-mt

#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules.  See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
auth    [success=1 default=ignore]  pam_unix.so nullok_secure
# here's the fallback if no module succeeds
auth    requisite           pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required            pam_permit.so
# and here are more per-package modules (the "Additional" block)
# -- pam_cap does not work for multithreaded apps --
# end of pam-auth-update config

希望这已经足够清楚了。

更多信息

顺便说一句,这也适用于 mysql mariadb 和其他多线程应用程序身份验证问题,通过检查它们的 pam 模块是否以某种方式包含 pam_cap。

相关内容