Копирование файлов между серверами (без использования SCP) - PullRequest
0 голосов
/ 22 марта 2012

Копирование файлов между серверами (без использования SCP).

Есть два сервера Linux. На одном сервере запущена система электронного обучения (сервер 1). Второй сервер - это наш веб-сервер, на котором установлен Drupal (сервер 2).

Теперь нам нужно перенести файлы (копирование) с сервера 1 на сервер 2. Я думал, что пользователь Drupal может инициировать запрос на передачу файлов с первого на второй сервер. (Но было бы лучше, если бы файлы копировались автоматически при добавлении новых файлов в каталог server2 (однако мне это кажется совершенно невозможным)).

Первое требование состоит в том, что это должно происходить ОЧЕНЬ безопасно, многие люди будут использовать это, и они не будут иметь никакого отношения к тому, что происходит на сервере 2.

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

Любые предложения и / или примеры приветствуются!

С уважением

Ответы [ 4 ]

2 голосов
/ 22 марта 2012

вы можете использовать rysnc для синхронизации каталогов и настроить cronjob на rsync каждые X минут / часов или что угодно.

1 голос
/ 15 июня 2012

scp использует ssh-соединение внизу.Взломать ssh-безопасность довольно сложно, если только:

  • вы решили отдать свой закрытый ключ - даже в этом случае вы можете создать новую пару и отозвать старую

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

Как сказал другой пользователь, вы можете создать cronjob, чтобы время от времени запускать rsync, для копирования ваших файлов.rsync может работать и по ssh.Кроме того, вы получаете возможность контролировать, что будет перезаписано, обновлено, создано или удалено на вашем втором компьютере.

запустите man rsync для получения подробной информации.Часть примеров поможет вам.

0 голосов
/ 15 августа 2012

Вот способ сделать это без SCP.

IMO - более простой / безопасный и своевременный подход - при условии, что у вас есть доступ к целевому серверу и вы можете добавить туда некоторый код, который работает под соответствующим веб-сервером - это использовать некоторый код curl php на «клиенте» (сервер 2 - drupal) и некоторый php-код на «сервере» (server 1 - elearning), чтобы получить файл и сохранить его соответствующим образом.

Вам следует проверить документацию PHP по загрузке файлов через POST: http://www.php.net/manual/en/features.file-upload.post-method.php

Также проверьте curl_setopt (), особенно " Пример # 2 Загрузка файла ": http://www.php.net/manual/en/function.curl-setopt.php

Таким образом, каждый раз, когда какое-либо событие по вашему выбору происходит на drupal-server2, вы запускаете код, который загружает файл в скрипт php - что-то вроде этого:

  $remote_url = "http://elearning.server1.com/upload.php";

  $data = array('file' => '@'. $uploadfile);

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $remote_url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt($ch, CURLOPT_VERBOSE, true);
  $ce = curl_exec($ch);
  curl_close($ch);

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

На elearning-server1 ваш код получения, например, http://elearning.server1.com/upload.php должно выглядеть так:

$uploaddir = '/var/www/elearning/drupal_file_uploads/';
$basename = basename($_FILES['file']['name']);
$uploadfile = $uploaddir . $basename;

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
  echo "File is valid, and was successfully uploaded.\n";
} else {
  echo "Possible file upload attack!\n";
}

После завершения передачи файла вы можете сохранить исходный файл на сервере drupal или удалить его (или выполнить проверку работоспособности, такую ​​как сравнение хешей md5 перед удалением).

Вы можете дополнительно защитить код на elearning-server1 с помощью настроек apache (разрешить доступ к этому сценарию только с IP-адреса вашего сервера drupal), использовать HTTPS / SSL и использовать выбранную вами парольную фразу из одного сценария в другой. ,

Я не уверен, достаточно ли это безопасно для вашего ИТ-отдела - но он уважает дух запроса вашего ИТ-отдела - они увидят, что вы уважаете их ответ, и вы можете даже получить некоторую доброжелательность и повысить доверие в ответ.

Прежде чем кто-либо использует ssh / scp в скрипте php - вы должны спросить себя, есть ли более простой способ сделать то, что вам нужно? Вы используете базуку, чтобы убить комара?

Настройка доступа SSH / SCP, даже с аутентификацией по ключу, по-прежнему создает много уязвимостей, о которых упоминали другие выше. Кроме того, теперь у этого соединения есть потенциал для того, чтобы разрушить его, основываясь на его разрешениях на этом конечном сервере. Зачем рисковать, если вам это не нужно?

Задание Rsync cron безопасно, но оно вводит задержку до его запуска - что может или не может быть приемлемо для вас.

0 голосов
/ 16 июня 2012

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

Это стоимость безопасности.

Если вы хотите автоматическое фоновое выполнение, у вас есть два варианта:

  1. Сохраните пароль где-нибудь, что процесс может прочитать, и используйте источник фразы для scp.Это просто поднимает проблему на новый уровень.
  2. Храните закрытый ключ в незашифрованном виде.Должно быть возможно защитить это с соответствующими разрешениями.Если вас это беспокоит, обновляйте его каждые несколько дней.

Третий вариант - использовать третью, заблокированную систему, которая не размещает других пользователей и выполняет удаленную scp-to-scpперечислить.Таким образом, фраза-пароль находится только в третьей системе и ее легче защитить.

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