我正在尝试使用 Azure 提供的连接字符串在共享文件夹旁边挂载 Samba 共享,但在 16.04 中,我收到“挂载错误 13,权限被拒绝”
安装 cifs-utils 后,连接字符串的工作方式与我预期的完全一样Ubuntu 服务器 17.04
连接字符串:
sudo mount -t cifs //<HOSTNAME>.file.core.windows.net/<SHARENAME> /mnt/etclol -o vers=3.0,username=<HOSTNAME>,password=<PASSWORD KEY>,dir_mode=0777,file_mode=0777,sec=ntlmssp
我知道 16.04 中存在一个问题,它会阻止外部连接以及基于 Azure 的 VM 的跨区域连接,而该问题涉及 16.04 内核不支持的加密。所以我解决了这个问题:
我将存储节点从 GRS(地理冗余存储)更改为 LRS(本地冗余存储),这使我的区域从两个(美国东部和美国中部)减少到只有美国中部(与我的网络服务器相同)。
尝试在同一区域和 Azure 内部挂载这些共享时,我不断收到挂载错误 13。我看过的每篇文章都让我相信这种配置可行。
为了验证这不是本地安装问题,我尝试了 chmod 0777 安装以及我的主目录中的目录。我认为这没什么关系。
我唯一的其他选择是将实时 16.04 服务器迁移到 17.04,这虽然可行,但却很无趣。
TL;DR:为什么这在他们提议的基础设施层次结构中不起作用。补充:有没有办法获得 16.04外部也可以工作吗?
答案1
据我所知,Ubuntu 16.04 LTS 支持 SMB 3.0 的加密功能。
也许我们可以按照以下步骤挂载 Azure 文件共享:
1.安装cifs-utils
包:
sudo apt-get update #we should update it then install cifs-utils
sudo apt-get install cifs-utils
2.为挂载点创建一个文件夹:
mkdir mymountpoint
3.使用 mount 命令挂载 Azure 文件共享:
sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<share-name> ./mymountpoint -o vers=3.0,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino
有关在 Linux 中使用 Azure 文件存储的更多信息,请参阅此关联。
===========================================================
更新:
目前,Azure 存储帐户支持“需要安全传输”,此功能用于 SMB 2.1、无加密的 SMB 3.0 以及某些版本的 Linux SMB 客户端。
默认情况下,ubuntu 16.04 支持 SMB 3.0 的加密功能。所以我们应该关需要安全传输,并直接安装。
Ubuntu 16.04LTS 仅支持密码加密对于 SMB – 因此访问 Azure 文件存储的凭据是加密的,但数据本身作为明文。
使用 Azure 文件服务时,如果启用“需要安全传输”,则任何未加密的连接都会失败。这包括使用 SMB 2.1、未加密的 SMB 3.0 以及某些 Linux SMB 客户端的场景。默认情况下,“需要安全传输”选项处于禁用状态。
关于 Linux 的 Azure 文件存储,请参考此关联。
有关更多信息Require secure transfer
,请参阅此关联。
答案2
我在生产服务器上遇到了同样的问题。我们决定将 Ubuntu 16.04 LTS 升级到Ubuntu 16.10(我验证了启用安全传输的安装是否可行)。我知道这不是一个容易的解决方案,但只有它对我有用。
好的一面是,从 16.04 升级到 16.10 比从 16.04 升级到 17.04 更“安全”;)
答案3
在 Azure Linux VM 中装载文件共享需要以下清单
- VM 必须位于创建存储帐户的同一区域
- 虚拟机上的端口 445 应处于打开状态
cifs-utils.x86_64
应安装在 Linux VM 上以访问 cifs 共享- 如果使用 RHEL 7.2,则使用 smb 2.1,如果使用 7.4 及以上版本,则使用 smb 3.0
- 在存储帐户中 ---> 转到设置 --> 配置 --> 需要安全传输 ---> 禁用,然后共享已在 Linux vm 中安装