Выполнение команд gcloud в bash - PullRequest
0 голосов
/ 27 февраля 2019

Я потратил 3 дня на то, чтобы побороть голову, прежде чем прийти сюда в отчаянии.

Короче говоря, я подумал, что запусту простой сайт PHP, чтобы позволить модераторам игровой группы I 'м в возможности запуска GCP серверов по требованию.Я не разработчик, поэтому я смотрю на это с точки зрения систем, чтобы найти простейшее решение для этой работы.

Я запустил машину Ubuntu 18.04 на GCP и настроил ее с помощью Google SDK,авторизовал его для доступа к проекту и мог просто запускать команды gcloud, которые работали нормально.Были некоторые проблемы с файлом PHP, вызывающим сценарий оболочки для выполнения тех же команд, но после некоторого тестирования я вижу, что теперь он вызывает сценарий оболочки, не беспокоясь (он передает «тест» стены) на консоль каждый раз, когда я нажимаю кнопку на странице PHP.

Однако чего не происходит, так это выполнения команды gcloud.Если я вручную запускаю этот сценарий оболочки, он запускает экземпляр, не беспокоясь и транслирует стену, если я нажимаю кнопку, которая транслирует, но это все.Я установил, что файлы имеют права на выполнение, и я даже добавил пользователя nginx для запуска с правами sudo, поэтому размещение sudo sh перед командой в файле PHP также не имело никакого значения.Пожалуйста, найдите скрипт bash ниже:

    #!/bin/bash

    /usr/lib/google-cloud-sdk/bin/gcloud compute instances start arma3s1-prod --zone=australia-southeast1-b

    wall "test"

Любая помощь будет принята с благодарностью, в сочетании с автоматическим отключением позволит нашей игровой группе сэкономить деньги, используя только те серверы, на которых хотят играть.

Если вам нужна дополнительная информация о базовой системе, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Итак, я спросил об этом разработчика PHP, и через две секунды она указала на проблему, и теперь я чувствую себя глупо.В / etc / passwd у пользователя www-data был / usr / sbin / nologin, и после того, как я исправил этот сценарий, gcloud потребовал разрешения на запись файла журнала в / var / www.Исправил те и все работает нормально.Меня не очень беспокоит взлом или уничтожение страницы или даже сервера, я могу довольно легко их воссоздать.

Спасибо за помощь, хотя!Иногда я думаю, что мне просто нужно сделать шаг назад и по-новому взглянуть на проблему.

0 голосов
/ 27 февраля 2019

Когда вы запускаете команду при входе в систему, у вас есть права доступа к облачному API Google, но учетная запись PHP их не имеет.

Даже если вы добавляете пользователя www-data в root, это не решит проблему, возможно, создаст некоторые проблемы с безопасностью, но не более того.

Если вы действительно хотите сделать это, вам нужно создать учетную запись службы и передать json переменной env, GOOGLE_APPLICATION_CREDENTIALS, которая толькоу вас есть права на экземпляр compute внутри вашего проекта, поэтому у вашего PHP должно быть достаточно прав для выполнения того, о чем вы его просите.

Обратите внимание, что проблема с этим методом заключается в том, что если вы взломаны, произойдет изменениеэкземпляр, содержащий ваш PHP, также может быть удален.

Вы также можете попытаться вызвать готовую облачную функцию, которая создаст экземпляр, таким образом, даже если ваш экземпляр удален, облачная функция все равно будет там.

...