Avamar:如何使用 sudo 在不使用根用户的情况下执行 Linux VMware 文件级恢复

Summary: Avamar FLR Sudo

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Symptoms



Avamar FLR 背景:
Avamar 的文件级恢复是一种无代理恢复解决方案,可用于从虚拟机映像备份恢复一个或多个来宾文件。用于支持文件级恢复的机制是 VMware 工具和 vSphere API 来宾操作功能。在浏览过程中,虚拟机映像备份会在 Avamar 代理上装载虚拟磁盘 (.vmdk)。选择要恢复的文件后,系统会将传输文件从代理复制到目标虚拟机。

FLR 强制要求:
  1. 目标虚拟机必须处于开机状态。
  2. 目标虚拟机必须已安装 VMware 工具,并且在恢复操作过程中服务必须保持运行。 
  3. Avamar 管理员或 Avamar 备份/恢复操作/用户必须在目标来宾上具有有效的凭据(VMware 来宾操作 SDK 的要求),并且必须在文件级恢复操作开始时输入此凭据。
  4. 目标来宾用户必须具有写入位置的权限,否则操作将失败。对于 Windows 虚拟机,恢复 VM 用户还必须有权在没有 UAC 提升的情况下进行写入,对于 Linux 虚拟机,恢复虚拟机必须能够在没有 sudo 的情况下写入。 
FLR 可选要求:更快的 HTTPS 传输方法的要求。 
  1. 目标虚拟机必须具有对代理虚拟机的 TCP 443 访问权限。
  2. 对于 Linux 虚拟机,在恢复操作之前,必须在虚拟机内部安装现代 wget 应用程序。  
如果未满足操作要求,则在提交作业之前会显示以下警告:

如果目标虚拟机无法建立到代理的 HTTPS 连接,请执行以下操作:

kA23a000000GIVvCAO_3_0

在代理内:/usr/local/avamarclient/bin/logs/VSphereWebService.log,请参阅 wget 非零退出代码

[VWS - DEBUG] 2020/02/24 15:56:20 TID=2403 MID=398040: sGuestExeFullFilename = /usr/bin/wget --no-check-certificate --spider -t 1 -T 10 https://182proxy.burlington.lab:443/test
[VWS - DEBUG] 2020/02/24 15:56:20 TID=2403 MID=398041: sUnicodeExeDir = /usr/bin
[VWS - DEBUG] 2020/02/24 15:56:20 TID=2403 MID=398042: sExeFullPath = /usr/bin/wget
[VWS - DEBUG] 2020/02/24 15:56:20 TID=2403 MID=398043: sParameters = --no-check-certificate --spider -t 1 -T 10 https://182proxy.burlington.lab:443/test

[VWS - FUNC]  2020/02/24 15:56:2 TID=3662 MID=254389: VirtualMachineWs::CheckProcessStatus ENTER
[VWS - DEBUG] 2020/02/24 15:56:2 TID=3662 MID=254390: ullPid = 3053
[VWS - WARN]  2020/02/24 15:56:2 TID=140664473914958 MID=254428: CheckProcessStatus Succeeded
[VWS - DEBUG] 2020/02/24 15:56:2  TID=3662 MID=254441: StartProgramInGuest Succeeded. Ret: 4



没有 wget 的 Linux:

kA23a000000GIVvCAO_3_1

在代理内:/usr/local/avamarclient/bin/logs/VSphereWebService.log,请参阅:

[VWS - DEBUG] 2020/02/24 15:56:20 TID=2403 MID=398040: sGuestExeFullFilename = /usr/bin/wget --no-check-certificate --spider -t 1 -T 10 https://182proxy.burlington.lab:443/test
[VWS - DEBUG] 2020/02/24 15:56:20 TID=2403 MID=398041: sUnicodeExeDir = /usr/bin
[VWS - DEBUG] 2020/02/24 15:56:20 TID=2403 MID=398042: sExeFullPath = /usr/bin/wget
[VWS - DEBUG] 2020/02/24 15:56:20 TID=2403 MID=398043: sParameters = --no-check-certificate --spider -t 1 -T 10 https://182proxy.burlington.lab:443/test
[VWS - ERROR] 2020/02/24 15:56:20 TID=140363826202979 MID=398068: StartProgramInGuest Error: SOAP 1.1 fault: "":ServerFaultCode [no subcode]
"File /usr/bin/wget was not found"
Detail: <FileNotFoundFault xmlns="urn:vim25" xsi:type="FileNotFound"><file>/usr/bin/wget</file></FileNotFoundFault>

或者

[VWS - DEBUG] 2020/02/24 15:34:22 TID=2397 MID=395783: StartProgramInGuest Succeeded.Ret: 1


FLR 可选功能:恢复访问控制列表 (ACL)

此功能默认不启用。
结果:
无 ACL 功能(默认):

来自文件级恢复功能的所有已恢复文件将归在 FLR 操作期间输入的虚拟机来宾凭据用户所有,并且将不会设置以前的文件权限。

启用 ACL 功能:
如果用户希望获得已恢复文件的原始创建文件所有权和权限集,则必须启用此可选功能。

kA23a000000GIVvCAO_3_2

结果:
在恢复操作期间,新文件将创建为 FLR 虚拟机用户,但在恢复结束时,ACL 工作流将运行并将所有权和文件权限设置回原始状态。


在代理内:/usr/local/avamarclient/bin/logs/VSphereWebService.log,请参阅:

[VWS - FUNC] 2020/03/03 03:42:29 TID=140664473914958 MID=254066: VirtualMachineWs::ExecuteRestoreAcl ENTER
[VWS - FUNC] 2020/03/03 03:42:29 TID=140664473914958 MID=254067: VirtualMachineWs::ExecuteRestoreAcl RestoreAcl Input file created
[VWS - FUNC] 2020/03/03 03:42:29 TID=140664473914958 MID=254068: VirtualMachineWs::ExecuteRestoreAcl Input File transfer /usr/local/avamarclient/bin/7fc01f28-c871-4835-948d-2d8a14bd1d8b.xml to /tmp/7fc01f28-c871-4835-948d-2d8a14bd1d8b.xml
[VWS - FUNC] 2020/03/03 03:42:32 TID=140664473914958 MID=254140: VirtualMachineWs::ExecuteRestoreAcl Exe File transfer /usr/local/avamarclient/bin/RestoreAcl to /tmp/7fc01f28-c871-4835-948d-2d8a14bd1d8b.exe
[VWS - DEBUG] 2020/03/03 03:42:40 TID=3662 MID=254349: sGuestExeFullFilename = /tmp/7fc01f28-c871-4835-948d-2d8a14bd1d8b.exe /tmp/7fc01f28-c871-4835-948d-2d8a14bd1d8b.xml 0001
[VWS - FUNC] 2020/03/03 03:42:42 TID=3662 MID=254389: VirtualMachineWs::CheckProcessStatus ENTER
[VWS - DEBUG] 2020/03/03 03:42:42 TID=3662 MID=254390: ullPid = 3053
[VWS - WARN] 2020/03/03 03:42:47 TID=140664473914958 MID=254428: CheckProcessStatus Succeeded
[VWS - DEBUG] 2020/03/03 03:42:47 TID=3662 MID=254441: StartProgramInGuest Succeeded.Ret: 0
[VWS - FUNC] 2020/03/03 03:42:47 TID=140664473914958 MID=254519: VirtualMachineWs::ExecuteRestoreAcl LEAVE

Cause

在某些 Linux 发行版(如 Ubuntu 或 Photon 操作系统)中,默认情况下不会设置或配置操作系统根用户。相反,Linux 管理员依赖于 sudo 命令来运行提升操作。  

但是,由于 VMware 工具和 VMware SDK,因此 VMware 工具不能执行 sudo 命令的大多数操作(VM_LoginInGuest、CopyFileFromHostToGuest 和 ListFilesInGuest)。

当使用普通用户执行恢复操作时,该操作可能会因目标来宾权限不足而失败。

Resolution

对于禁用、未配置或出于安全考虑而无法共享 Linux 根用户的环境,请考虑以下解决方案步骤:

选项 1.以非根用户身份恢复至备用位置。
示例:
源文件:  /root/test(受限文件夹/文件)
目标文件:  /home/flruser/(不受限位置)
虚拟机来宾创建:  “flruser”

结果:
在 FLR 浏览期间,虚拟磁盘将装载到 Avamar 代理并显示在用户界面中(其中包括所有文件夹和文件),浏览 /root 文件夹并选择 file1.txt,然后选择“restore everything to a different location”,并浏览至或键入 /home/flruser/ 作为 Absolution 目标。

kA23a000000GIVvCAO_2_0

结果
root/test 文件将被恢复到 /home/flruser/test
注意,文件将具有 FLR 来宾用户权限。

选项 2.使用 sudo 功能恢复至具有恢复 ACL 选项的备用位置。
在 Avamar 18.2 中,安装代理修补程序 318791(或更高版本)
在 Avamar 19.2 中,安装代理修补程序 318791(或更高版本)


这些修补程序添加默认情况下禁用的新“enablesudouserrestore”功能。

启用 sudo 功能的说明:
在 Avamar 代理上:
  1. 在代理上,安装上面的修补程序
  2. 编辑 /usr/local/avamarclient/bin/config.xml,向文件添加 /edit 行 (<enablesudouserrestore>1</enablesudouserrestore>)
  3. 通过此命令重新启动 FLR:service vmwareflr restart
在每个将启用 FLR 功能的 Linux 虚拟机上:
  1. 创建专用 FLR 用户:  示例 flruser。  为增强安全性,可以为此帐户禁用 shell
  2. 使用固定位置 /usr/bin/RestoreACL 将 /usr/local/avamarclient/bin/RestoreAcl 二进制文件从 Avamar 代理复制到目标虚拟机,并使用 chmod 将权限设置为 755
示例:
linux-da91:~ # ls -l /usr/bin/RestoreAcl
-rwxr-xr-x 1 root root 148016 Feb 13 17:48 /usr/bin/RestoreAcl
  1. 修改 /etc/sudoers 以允许步骤 1 中的 FLR 用户在无需密码的情况下执行 RestoreACL 二进制文件。 
示例
flruser ALL=(ALL) NOPASSWD: /usr/bin/RestoreAcl

注:如果启用了 sudoers requiretty 设置(文件中存在“Defaults requiretty”行),我们还需要此行。  
Defaults!/usr/bin/RestoreAcl !requiretty


选项3:使用 sudo wget 方法和 ACL 恢复至原始位置。

注: 

  • 此选项仅当可选网络 HTTPS 可用并且恢复选择选择了大于 5 Mb 或 10 个文件时才可用。
  • 使用 Avamar GUI 浏览具有受限文件夹位置的活动目标虚拟机位置可能会失败,但在“Absolution Destination”中明确键入可正常工作。 
  1. 在代理上执行选项 2 中的步骤以启用 ACL 恢复。
  2. 在 Avamar 代理上,编辑 /usr/local/avamarclient/bin/wget_linux_script.template 
之前:
wget "$url/$filepath" -N  -nH -x -P "$dest" --no-check-certificate -S --restrict-file-names=nocontrol  --no-parent --tries 5 --header="Authorization:$token" --cut-dirs=2 --content-disposition 2>>    $logfile

之后:
sudo wget "$url/$filepath" -N  -nH -x -P "$dest" --no-check-certificate -S --restrict-file-names=nocontrol  --no-parent --tries 5 --header="Authorization:$token" --cut-dirs=2 --content-disposition 2>>    $logfile
  1. 通过此命令重新启动 FLR:service vmwareflr restart
  2. 在每个将使用 FLR 恢复至原始位置的 Linux 虚拟机上,将 /etc/sudoers 修改为允许步骤 1 中的 FLR 用户无需密码即可执行 wget 二进制文件。 
示例:
flruser ALL=(ALL) NOPASSWD: /usr/bin/RestoreAcl
flruser ALL=(ALL) NOPASSWD: /usr/bin/wget
 
注:如果启用了 sudoers requiretty 设置(文件中存在“Defaults requiretty”行),我们还需要这些行:
Defaults!/usr/bin/RestoreAcl !requiretty
Defaults!/usr/bin/wget !requiretty

Affected Products

Avamar

Products

Avamar, Avamar Client for VMware
Article Properties
Article Number: 000081871
Article Type: Solution
Last Modified: 25 Apr 2025
Version:  3
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.