最初在 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
发生了什么事?有解决办法吗?
答案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。