Root доступ к виртуальной машине зависит от аргументов, передаваемых в расширение собственного скрипта - PullRequest
0 голосов
/ 10 апреля 2020

Ниже приведено определение ресурса виртуальной машины в шаблоне моей руки.

        {
            "type": "Microsoft.Compute/virtualMachines",
            "apiVersion": "2019-07-01",
            "name": "[parameters('vmName')]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[variables('nicName')]",
                "[variables('imageName')]"
            ],
            "tags": {
                "displayName": "VirtualMachine"
            },
            "identity": {
                "type": "SystemAssigned"
            },
            "properties": {
                "hardwareProfile": {
                    "vmSize": "[parameters('vmSize')]"
                },
                "osProfile": "[variables(parameters('authenticationType'))]",
                "storageProfile": {
                    "imageReference": {
                        "id": "[resourceId('Microsoft.Compute/images', variables('imageName'))]"
                    },
                    "osDisk": {
                        "managedDisk": {
                            "storageAccountType": "Premium_LRS"
                        },
                        "createOption": "fromImage",
                        "diskSizeGB": 64
                    }
                },
                "networkProfile": {
                    "networkInterfaces": [
                        {
                            "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]"
                        }
                    ]
                }
            },
            "resources": [
{
                    "type": "Extensions",
                    "apiVersion": "2018-04-01",
                    "name": "ExtensionForConfiguringCP",
                    "location": "[parameters('location')]",
                    "dependsOn": [
                        "[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
                    ],
                    "properties": {
                        "publisher": "Microsoft.Azure.Extensions",
                        "type": "CustomScript",
                        "typeHandlerVersion": "2.0",
                        "autoUpgradeMinorVersion": true,
                        "settings": {
                            "fileUris": [
                                "[variables('scriptFileURL')]"
                            ]
                        },
                        "protectedSettings": {
                            "commandToExecute": "[format('sh {0} \"{1}\" \"{2}\" \"{3}\" \"{4}\" \"{5}\" \"{6}\" \"{7}\"', variables('cpscriptFileName'), parameters('isProxy'), parameters('httpProxy'), parameters('httpsProxy'), parameters('noProxy'), parameters('cpUsername'), variables('keyVaultName'), union(if(not(equals(parameters('publicIpNewOrExisting'), 'none')), array(reference(parameters('publicIpName')).dnsSettings.fqdn) , array('')),variables('splitHostnames')))]"
                        }
                    }
                }
]

Вы видите, что я передаю несколько аргументов скрипту через атрибут commandToExecute. Я наблюдаю, что значения аргументов, которые передаются в сценарий, решают, могу ли я иметь root доступ к виртуальной машине или нет. Пример: если у меня есть команда для выполнения следующим образом, я могу получить доступ к виртуальной машине как root с помощью sudo su

"commandToExecute": "[format('sh {0} \"{1}\" \"{2}\" \"{3}\" \"{4}\" \"{5}\" \"{6}\" \"{7}\"', variables('cpscriptFileName'), parameters('isProxy'), parameters('httpProxy'), parameters('httpsProxy'), parameters('noProxy'), parameters('cpUsername'), variables('keyVaultName'), variables('splitHostnames'))]"

В моем сценарии пользователь может решить, подключать ли publi * 1023 или нет. * ip для vm. Если publicip подключен к vm, тогда я хочу, чтобы имя fqdn и другие имена хостов, которые пользователь передает как значения, разделенные запятыми, были частью сертификата tls, который обрабатывает скрипт.

Для обработки пустого или непустого fqdn У меня есть if(not(equals(parameters('publicIpNewOrExisting'), 'none')), array(reference(parameters('publicIpName')).dnsSettings.fqdn) , array(''))

и функция объединения для обработки дублирующейся записи пользователем в именах хостов, если он снова вводит тот же самый fqdn.

У меня нет доступа к проверке stderr или stdout логи на /var/lib/waagent/custom-script/download/0/.

Из портала vm-> extensions я вижу, что скрипт успешно запущен.

Все, что я хочу знать, это то, почему изменение этих значений вызывает root проблема с доступом на виртуальной машине? Для меня это выглядит очень странно, и я думаю, что могу сделать глупую ошибку, которую azure не может выделить. Я также проверил /var/log/azure/custom-script/handler.log и не вижу там никаких ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...