适用于: ✔️ NFS 文件共享
NFS 文件共享的权限由客户端作系统而不是 Azure 文件服务强制实施。 Root squash 是 NFS 中的一项管理安全功能,可防止客户端计算机对 NFS 服务器进行未经授权的 root 用户权限访问。 此功能是保护用户数据和系统设置免遭不受信任的或遭入侵的客户端操纵的重要一环。
管理员应该在多个用户或系统访问 NFS 共享的环境中启用 root 用户压缩,尤其是在客户端计算机不完全受信任的情况下。 通过将根用户转换为匿名用户,根 Squash 可确保即使在客户端计算机遭入侵的情况下,攻击者也无法利用根权限访问或修改 NFS 服务器上的关键文件。
本文介绍如何配置和更改 NFS Azure 文件共享的 root squash 设置。
如何与 Azure 文件一起使用 root squash
Root squash 的工作原理是将 root 用户的用户 ID (UID) 和组 ID (GID) 重新映射为服务器上匿名用户的 UID 和 GID。 访问文件系统的根用户会自动转换为匿名且特权较低的用户/组,其权限有限。
尽管 root squash 是 NFS 的默认行为,但在创建 NFS Azure 文件共享时,它并不是默认选项。 必须在文件共享上显式启用 root squash。 可以在创建 NFS Azure 文件共享时执行此操作,也可以稍后这样做。
根用户压缩设置
可以从下述三个根 Squash 设置中进行选择:
- 无 root squash:关闭 root squash 功能。 此选项主要用于无盘客户端或工作负荷文档指定的工作负荷。 这是创建新的 NFS Azure 文件共享时的默认设置。
- 将所有 UID 和 GID 映射到匿名用户 (All squash)。 适用于需要由所有客户端进行只读访问的共享。
- Root Squash:将来自 UID/GID 0(root)的请求映射到匿名 UID/GID。 这不适用于任何其他可能同样敏感的 UID 或 GID,例如用户 bin 或组员工。
下表突出显示了配置特定根目录 Squash 选项时,从服务器观察到的 UID 行为。
|
选项 |
客户端 UID |
服务器 UID |
| root_squash |
0 |
65534 |
| root_squash |
1000 |
1000 |
| no_root_squash |
0 |
0 |
| no_root_squash |
1000 |
1000 |
| all_squash |
0 |
65534 |
| all_squash |
1000 |
65534 |
可以通过 Azure 门户、Azure PowerShell 或 Azure CLI 配置根 Squash 设置。
登录到 Azure 门户,然后导航到包含 NFS Azure 文件共享的 FileStorage 存储帐户。
在服务菜单中的“数据存储”下,选择“文件共享”。
选择要为其修改根 Squash 设置的文件共享。
在服务菜单中,选择“属性”。 然后根据需要切换Root squash设置。
选择保存以更新根 squash 值。
登录到 Azure,然后选择订阅。
Connect-AzAccount -Environment AzureChinaCloud
Select-AzSubscription -SubscriptionId "<your-subscription-id>"
若要在文件共享上启用 root squash,请运行以下命令。 将<resource-group-name>、<storage-account-name>和<file-share-name>替换为您自己的值。
Update-AzRmStorageShare `
-ResourceGroupName <resource-group-name> `
-StorageAccountName <storage-account-name> `
-Name <file-share-name> `
-RootSquash RootSquash
若要在文件共享上禁用root squash功能,请运行以下命令。 将<resource-group-name>、<storage-account-name>和<file-share-name>替换为您自己的值。
Update-AzRmStorageShare `
-ResourceGroupName <resource-group-name> `
-StorageAccountName <storage-account-name> `
-Name <file-share-name> `
-RootSquash NoRootSquash
如需强制所有用户进行 Squash,请运行以下命令,将所有用户 ID 映射为匿名。 将<resource-group-name>、<storage-account-name>和<file-share-name>替换为您自己的值。
Update-AzRmStorageShare `
-ResourceGroupName <resource-group-name> `
-StorageAccountName <storage-account-name> `
-Name <file-share-name> `
-RootSquash AllSquash
若要查看文件共享的根 Squash 属性,请运行以下命令。 将<resource-group-name>、<storage-account-name>和<file-share-name>替换为您自己的值。
Get-AzRmStorageShare `
-ResourceGroupName <resource-group-name> `
-StorageAccountName <storage-account-name> `
-Name <file-share-name> | fl -Property ResourceGroupName, StorageAccountName, Name, QuotaGiB,AccessTier,EnabledProtocols,RootSquash
登录到 Azure 并设置订阅。
az login
az account set --subscription "<your-subscription-id>"
若要在文件共享中启用 root squash,请运行以下命令。 用您自己的值替换<resource-group-name>、<storage-account-name>和<file-share-name>。
az storage share-rm update \
--resource-group <resource-group-name> \
--storage-account <storage-account-name> \
--name <file-share-name> \
--root-squash RootSquash
若要在文件共享上禁用 root squash,请运行以下命令。 将<resource-group-name>、<storage-account-name>和<file-share-name>替换为您自己的值。
az storage share-rm update \
--resource-group <resource-group-name> \
--storage-account <storage-account-name> \
--name <file-share-name> \
--root-squash NoRootSquash
若要强制对所有用户进行 Squash,请运行以下命令,将所有用户 ID 映射到匿名用户。 将<resource-group-name>、<storage-account-name>和<file-share-name>替换为您自己的值。
az storage share-rm update \
--resource-group <resource-group-name> \
--storage-account <storage-account-name> \
--name <file-share-name> \
--root-squash AllSquash
若要查看文件共享的根 Squash 属性,请运行以下命令。 将<resource-group-name>、<storage-account-name>和<file-share-name>替换为您自己的值。
az storage share-rm show \
--resource-group <resource-group-name> \
--storage-account <storage-account-name> \
--name <file-share-name>
另请参阅