Назад | Перейти на главную страницу

Запускать конфиденциальную команду (включая пароли) в Linux без раскрытия данных

У меня есть учетная запись на общем веб-хосте, которая позволяет мне работать на сервере через SSH. Поскольку у меня возникли проблемы с установкой Magento с помощью веб-установщика, я переключился на установку из командной строки. Команда для установки выглядит примерно так:

php -f install.php -- \
...
--db_host "dbhost" \
--db_name "dbname" \
--db_user "username" \
--db_pass "password" \
...
--admin_username "username" \
--admin_password "password" \
...

Пока команда выполняется (и выполняется в течение нескольких минут), конечно, все остальные на этом сервере могут видеть параметры (и пароли), проверяя запущенные процессы (с помощью ps aux например). Мне просто было интересно, можно ли каким-то образом скрыть эти данные (например, с помощью каких-то сценариев / программ оболочки)?

Не легко. Если вы написали сценарий оболочки, который выполнял эту команду, эта команда все равно будет отображаться в ps.

Если бы вы знали достаточно PHP, вы могли бы открыть это install.php, найдите, где он обрабатывает эти флаги пользователя / передачи, и самостоятельно жестко запрограммируйте значения (убедитесь, что в сценарии есть 700 разрешений, чтобы никто другой не мог его прочитать), затем вы можете запустить команду без флагов.

Предполагая, что их сценарий не пытается угадать, как он выполняется, и не реагирует должным образом, вы можете сделать что-то вроде этого:

<?php
  unset($argv);
  $argv=array("install.php",
     "--db_host","dbhost",
     "--db_name","dbname",
     ...
     "--and_so_on","value"
     );
  include("install.php");
?>

как новый скрипт (снова режим 700) и запустите его php newinstall.php. $argv обычно представляет собой массив аргументов команды (начиная с имени команды), поэтому здесь вы unset() существующий и создайте новый со всеми необходимыми параметрами командной строки, затем вы include() install.php, чтобы PHP выполнял этот сценарий (с измененным списком $ argv, чтобы install.php думал, что он был выполнен с этими параметрами).

Менее технический подход (и я понимаю, что в конечном итоге это не ответ на ваш вопрос!), Но в таких ситуациях для простоты в прошлом я просто использовал одноразовые детали и после установки меняю их через систему администратора / сгенерированные файлы конфигурации.