创建符号链接:协议错误。

38

我在虚拟机 VirtualBox 上创建了 Linux(CentOS)操作系统。当我通过 SSH 登录到该系统后,我尝试在具有完全访问权限的共享文件夹中创建符号链接时:

ln -s path/folder/example myFolder

我遇到错误:

ln: creating symbolic link `myFolder': Protocol error

有没有任何原因或解决方案可以解决这个问题?


你能够解决这个问题吗?我也遇到了类似的问题:root @ 57856515e02b:/ artifacts / test / install / lib#ln-s / usr / share / tcltk / tcl8.5 / artifacts / test / install / lib / ln:无法创建符号链接'/ artifacts / test / install / lib / tcl8.5':协议错误 - user5154816
对我来说,以管理员身份运行还不够,但这是我的答案:https://stackoverflow.com/a/60741351/470749 - Ryan
9个回答

35

在您的命令提示符上右键单击,并选择“以管理员身份运行”(或者您用于创建符号链接的程序需要以管理员身份运行)。


11
实际上,在运行在Windows上的虚拟机中创建符号链接时发生协议错误是很常见的。以管理员身份运行命令行通常可以解决这个问题。 - baaj
1
你能解释一下如何“右键单击”吗?这是SSH会话中的特定转义序列吗? - Toby Speight
1
@TobySpeight 指的是在Windows中右键单击启动命令提示符的图标/快捷方式/任何东西。 - alexw
@alexw,Windows与这有什么关系? - Toby Speight
1
OP说他们的主机操作系统是Windows 7。 - alexw
显示剩余3条评论

30

以下是在virtualbox.org网站的一个帖子中提供的解决方案:

https://www.virtualbox.org/ticket/10085#comment:32 (注意:使用管理员权限在控制台中执行“whoami /priv”命令)

我对这个错误进行了一些 Windows 研究。

如果您的用户是管理员类型(而不是标准帐户),则没有办法在没有 UAC 提示的情况下运行 VB 并使符号链接工作。

如果您有一个标准用户帐户(或者愿意将您的帐户切换为标准用户并创建一个单独的管理员帐户),则可以解决问题。但是,您需要管理员权限来完成几个步骤(不一定是您的用户帐户)。

  1. 运行本地安全策略(Win+R,输入“secpol.msc”,确认 UAC)。然后导航到“本地策略->用户权限分配”。
  2. 找到名为“创建符号链接”的权限并双击它。将您的用户添加到具有此权限的对象列表中。或者您可以添加“Users”组。注销并重新登录。您可以通过在控制台中运行以下命令来检查是否成功:

    whoami /priv
    

    如果您看到启用了 SeCreateSymbolicLinkPrivilege 特权,则说明做得很好。

  3. 确保您的用户可以访问主机系统上的共享文件夹。

  4. 如早先在此处提到的,执行

  5. VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1
    

    在C:\Program Files\VirtualBox文件夹中的控制台。不要忘记用你的VM名称替换VM_NAME和共享文件夹的名称替换SHARE_NAME(正如它出现在VM设置中的那样)。

  6. 完成了。

  7. 如果您拥有Windows的“较低版本”之一(例如7 Home),则没有“secpol.msc”实用程序。请参见如何在Windows Vista家庭版上授予SeCreateSymbolicLink权限寻求帮助。


1
谢谢,使用 secpol.msc 并给自己授权。完美地解决了问题。 - partyd
2
可以了,谢谢!不过有个小提示:如果 whoami /priv 列出你的权限为“已禁用” - 不要担心,这只是意味着其他事情(https://social.technet.microsoft.com/Forums/ie/en-US/e24a35b3-fb72-4918-8e51-562e2ad8d8f5/what-is-the-state-column-returned-by-whoami-priv?forum=winserversecurity)。如果它被列出来,那么它适用于你的用户。 - tporeba
谢谢。这帮助我解决了在Drupal VM中的符号链接问题。 - drupalfan

26

这是一个与主机文件系统有关的问题。请检查主机文件夹的权限是否足够,并且主机文件系统是否支持符号链接。


主机系统是Windows 7。有没有解决方案可以启用它? - TroodoN-Mike
6
在Windows 7中,创建符号链接的办法是使用mklink命令。例如:mklink /D myFolder path/folder/example。然而这不是一个好的解决方案。 - TroodoN-Mike
1
这里的 Protocol error 消息来自哪个 API/层? - n611x007
3
无论您使用哪个应用程序启动虚拟机,如VBox、Vagrant等,您都必须以管理员身份运行该应用程序。 - sandman

4
据我所知,Windows VirtualBox主机不支持链接(来自https://www.virtualbox.org/manual/ch04.html#sharedfolders)。
从4.0版本开始,VirtualBox共享文件夹也支持符号链接(symlinks),但需要满足以下条件:
主机操作系统必须支持符号链接(即需要Mac、Linux或Solaris主机)。
目前仅Linux和Solaris Guest Additions支持符号链接。
出于安全原因,默认情况下,不允许客户机操作系统创建符号链接。如果您相信客户机操作系统不会滥用此功能,可以使用以下命令启用“sharename”的符号链接创建:
VBoxManage setextradata "VM name" VBoxInternal2/SharedFoldersEnableSymlinksCreate/sharename 1

3

我通过更改Windows中的本地安全策略来解决了这个问题。搜索本地安全策略并打开它,然后在左侧选择本地策略 -> 用户权限分配 -> 创建符号链接

  • 点击“添加用户或组”
  • 在选择用户/组提示中键入everyone
  • 重新启动系统

应该可以解决问题。


1

默认情况下,VirtualBox VM 禁用符号链接的创建。

Oracle VM VirtualBox 共享文件夹在以下条件下支持符号链接:

  • 主机操作系统必须支持符号链接。例如,需要 Mac OS X、Linux 或 Oracle Solaris 主机。
  • 目前只有 Linux 和 Oracle Solaris 客户端附加组件支持符号链接。
  • 出于安全原因,默认情况下不允许客户端操作系统创建符号链接。

要启用共享文件夹的符号链接创建,请执行以下操作:

  1. 在主机上运行此命令(其中 {VM_name} 是虚拟机名称,{share_folder_name} 是共享目录名称):
$ VBoxManage setextradata "{VM_name}" VBoxInternal2/SharedFoldersEnableSymlinksCreate/{share_folder_name} 1

在我的情况下,它看起来像这样:
$ VBoxManage setextradata "ubuntu16" VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1

2. 重启虚拟机。
更多信息可以在这里找到:

https://docs.oracle.com/cd/E97728_01/E97727/html/sharedfolders.html https://www.virtualbox.org/ticket/18572?cversion=0&cnum_hist=2


0

我在虚拟机Virtual box中(运行在Windows 10上的Lubuntu)遇到了相同的错误。通过使用“以管理员身份运行”选项来运行“Oracle VM Virtualbox”,问题得到解决。


0

基本上,您需要再次告诉VirtualBox启用符号链接。以下是完整的解决方案

在您的vagrant文件中添加以下内容:

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/Folder_Name", "1"]
end

我建议注释掉任何同步文件夹,并让默认的./(在主机上)同步到/vagrant(在客户机上)。这将确保您的共享文件夹(Folder_Name)名称始终为vagrant,如此处所述https://www.vagrantup.com/docs/synced-folders/。此外,您不会遇到ssh问题

如果符号链接协议错误在重启后返回或仍然存在,请运行

VBoxManage setextradata "VM_Name" VBoxInternal2/SharedFoldersEnableSymlinksCreate/Folder_Name 1

vagrant halt
vagrant up

vagrant ssh

通常,VBoxManagee位于C:\Program Files\Oracle\VirtualBox\

通过进入/vagrant并运行来验证符号链接的工作

touch test.txt && ln -s test.txt test1.txt

附注:我已经在Windows Home上尝试过,该系统对安全设置的可访问性有限。


0

找到cmd.exe文件。 右键单击cmd.exe。 选择“以管理员身份运行”菜单选项。 它应该可以完美地工作。


3
你似乎有些困惑,为什么你会期望一个CentOS系统有cmd.exe,而且你如何期望在SSH会话中执行“右键单击”操作? - Toby Speight
这个答案是针对主机操作系统的。你忽略了 OP 提到他们正在使用 Windows 的那部分内容。 - AaronHS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接