Рейтинг:10

Как выполнить безопасную автоматическую передачу файлов между двумя серверами?

флаг us

Я хотел бы ежедневно передавать некоторые файлы с сервера A на сервер B (в целях резервного копирования). Однако я не могу найти способ, который не создает нарушений безопасности. Моя цель состоит в том, чтобы кто-то с правами sudo на сервере A не мог использовать эту передачу для подключения к серверу B.

Моя основная идея состояла в том, чтобы сделать cronjob с SCP (или аналогичную) команду в нем. Очевидно, что использование SSH-соединения на основе пароля между A и B не работает, а использование SSH-соединения на основе ключа, насколько я знаю, позволит пользователю сервера A напрямую подключаться к B через A.

Я не эксперт по безопасности, я могу упустить очевидное. Есть ли способ добиться того, чего я хочу?

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

pa4080 avatar
флаг cn
Я бы получил файл через SSH с сервера B, вместо того, чтобы отправлять его с сервера A, с помощью чего-то вроде `user@serverB:~/: rsync -avz serverA:/path/to/file /local/path/to/store/ `. Другой способ — настроить третий экземпляр, который может подключаться через SSH к обоим серверам и использовать `scp` для прямого копирования из A в B (это не поддерживается `rsync`).
флаг us
Я должен был добавить, что я не хочу, чтобы пользователи сервера B также могли подключаться к серверу A. Однако мне нравится третий серверный подход
Ubuntu User avatar
флаг ph
Что вы можете сделать, так это зашифровать свои данные перед отправкой с помощью команды gpg...затем расшифруйте на другом конце, если вы вручную вводите пароли и не записываете их где-то, sudo не может получить к ним доступ. Однако, если вы хотите, чтобы это делалось автоматически, вам может понадобиться что-то еще.
user535733 avatar
флаг cn
Проблема не в "*безопасной автоматической передаче файлов*". Это легко. Проблема в том, что «*кто-то с правами sudo на сервере А не может использовать это*». Другими словами, у вас проблема с людьми, а не с технологиями, программным обеспечением или рабочим процессом. Судо должно быть предоставлено только надежным людям, и супервайзер должен, ну, контролировать их работу. Как и большинство человеческих проблем, программные решения вряд ли будут долго эффективны против определенной внутренней угрозы.
David Foerster avatar
флаг us
Всякий раз, когда вам нужно что-то скрыть или запретить действие для учетной записи пользователя «root», вам нужно переосмыслить свои правила контроля доступа пользователей. В большинстве случаев вам необходимо настроить другую учетную запись пользователя с ограниченным доступом именно к тем привилегированным действиям, которые необходимы пользователю.
spuck avatar
флаг cn
Какое "нарушение безопасности" вас беспокоит? Пользователи могут отправлять непреднамеренные файлы? Если вы не доверяете пользователям сервера A на сервере B (и наоборот), как это улучшится, если добавить сервер C, который доверяет (и доверяет) как A, так и B?
spuck avatar
флаг cn
Не давайте неограниченных прав sudo ненадежным пользователям.
Рейтинг:19
флаг cn

Вы не можете ничего скрыть в системе от того, у кого есть root-доступ. Даже если вы используете зашифрованный домашний каталог, когда вы вошли в систему, он расшифровывается, и пользователь root может получить доступ к данным.

Вероятно, самый простой способ выполнить эту задачу — настроить третий экземпляр, который может входить через SSH как на сервер A, так и на сервер B. Затем вы можете использовать SCP команду (на этом третьем экземпляре) для копирования файла из A в B следующим образом.

scp -3 serverA:/путь/к/файловому серверуB:/путь/к/хранилищу/
  • Хозяева серверA и серверB настроены в ~/.ssh/config в третьем экземпляре.

Обратите внимание на вариант -3, это заставляет третий экземпляр работать как промежуточный сервер. Если этот параметр не указан, серверу A будет предложено подключиться к серверу B, но для этого потребуются учетные данные. Эта опция отключает индикатор прогресса.

Полная версия ответа доступна на история.

Рейтинг:5
флаг ar

Использовать rsync в cronjob, как обычно.

На клиенте rsync пользователи с привилегией «sudo» смогут увидеть имя пользователя и пароль, необходимые для доступа конкретные папки, совместно используемые сервером rsync.

Но эти сертификаты отделены от учетных данных пользователя и не предоставляют SSH-доступа к серверу. Поэтому, если все настроено правильно, все, к чему они получат доступ на сервере, — это резервные копии с их собственной машины.

На rsync-сервере нет ничего, что давало бы доступ к rsync-клиенту.

Рейтинг:4
флаг cn

Просто отправьте файл к serverA вместо того, чтобы пользователь на serverA копировал его с serverB. Если вы хотите скопировать foo.txt от серверB к серверA, вы можете сделать это двумя основными способами:

  1. Запустите команду на серверA принести файл из серверB.
  2. Запустите команду на серверB отправить файл на сервер А.

Во втором случае никто на сервер А нужен доступ к серверB. Итак, настройте ssh на основе ключей от serverB к serverA, а затем добавьте свою строку cron для соответствующего пользователя на сервере B.

Например, чтобы сделать это вручную, вы должны сделать:

user1@serverB $ scp /path/to/foo.txt user1@serverA:/path/to/foo.txt

Таким образом, никто на серверA получает любой доступ к серверB и вам нужно только иметь пользователя на серверB кто может войти в серверA.

Рейтинг:2
флаг id

Обычный способ сделать это — использовать sftp и chroot.

На сервере B вы должны настроить ssh для chroot пользователя с сервера A и ограничиться sftp. например добавить в /etc/ssh/sshd_config

Подсистема sftp /usr/lib/openssh/sftp-сервер

Резервные копии Match Group
    ChrootDirectory /backups/%u
    AuthorizedKeysFile %h/.ssh/authorized_keys
    ForceCommand внутренний-sftp
    AllowTcpForwarding нет

Затем вы создаете пользователя для сервера A на сервере B, например. пользовательA, с каталогом /резервные копии/пользовательA (принадлежит root). Тогда вам понадобится резервные копии группа, которая пользовательA добавляется к. Правило в конфигурации ssh применяется к пользователям в этой группе, и это ограничивает пользователя из A только данными, которые они помещают в этот «дропбокс» sftp, и не позволяет им использовать ssh.

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

Рейтинг:1
флаг cn

ssh и rsync (и SFTP) всегда будут давать вам логин на сервере, к которому вы подключаетесь, который вы можете или не можете контролировать.

Почему бы не использовать HTTPS?

Вы можете либо

  1. запустить сервер на A и иметь B ПОЛУЧАТЬ данные
  2. или запустите его на B и получите A ПУБЛИКОВАТЬ Это.

Чтобы защитить данные от посторонних третьих лиц, вам придется зашифровать соединение (используйте HTTPS, а не обычный HTTP). и использовать по крайней мере базовая аутентификация.

Это не защитит данные от пользователей root ни в одной из двух систем: обе могут читать данные и изменить это на их стороне, и вы буквально ничего не можете с этим поделать.

Простой HTTP-сервер можно запустить несколькими способами, например:

python -m Простой HTTP-сервер 8080

Шифрование соединения требует создания SSL-сертификата и нескольких строк кода Python:

#!/usr/бин/питон
импортировать BaseHTTPServer, SimpleHTTPServer
импорт SSL

httpd = BaseHTTPServer.HTTPServer(('0.0.0.0', 8443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='./certs_and_key.pem', server_side=True)
httpd.serve_forever()

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

Рейтинг:1
флаг th

Существует проблема с предположениями, стоящими за вашим вопросом. SSH предназначен для предоставления доступа к системе, но вы хотите использовать SSH и не предоставлять доступ к системе. Может быть, SSH не подходит для этих требований?

Опция 1

Передача файлов на веб-сайты происходит постоянно, при этом загрузчик не получает доступа к базовой системе. Создайте или найдите простое веб-приложение, которое может принимать загружаемый файл и записывать его в нужный каталог. При необходимости запросите секрет приложения или пароль. Любой пользователь root в системе A сможет увидеть файл, в котором хранится секрет приложения, поэтому он сможет загружать файлы таким же образом. Но пока веб-приложение, которое получает загрузку, не предоставляет никакого доступа для чтения, требование не допускать привилегированного пользователя к Системе B выполняется.

Вариант 2

Вы все еще можете использовать SSH для отправки файлов. Просто ограничьте права. Для пользователя системы B, который используется для передачи SCP, дайте доступ только на запись к определенному каталогу и разрешение на чтение нигде в системе B. Вы можете отправлять команды передачи файлов из системы A для записи в этот каталог, вы просто никогда не будете уметь их читать.Опять же, пользователь root в системе A будет иметь возможность доступа к ключам SSH и загрузки своих файлов в то же место, но если пользователь системы B не имеет прав на чтение в файловой системе, его возможности ограничены. Эту технику легче сказать, чем сделать. Пользователь root системы A по-прежнему может получить оболочку в системе B, поэтому, если вы не ограничите разрешения во всей системе, включая системные исполняемые команды, пользователь все равно сможет запускать множество команд без чтения файлов данных. Так что это зависит от того, что вы подразумеваете под кем-то, имеющим доступ к системе. Опять же, лучше не использовать SSH.

Рейтинг:0
флаг bl
cEz

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

Он также доступен через подходящийвместе со связанными пакетами:

$ apt search -q синхронизация
Сортировка...
Полнотекстовый поиск...
golang-github-syncthing-notify-dev/focal,focal 0.0~git20180806.b76b458-1 все
  Библиотека уведомлений о событиях файловой системы на стероидах

golang-github-syncthing-syncthing-dev/focal,focal 1.1.4~ds1-4ubuntu1 все
  децентрализованная синхронизация файлов — пакет dev

синхронизация/фокус 1.1.4~ds1-4ubuntu1 amd64
  децентрализованная синхронизация файлов

syncthing-discosrv/focal 1.1.4~ds1-4ubuntu1 amd64
  децентрализованная синхронизация файлов - сервер обнаружения

syncthing-gtk/focal,focal 0.9.4.4-1 все
  Графический интерфейс на основе GTK3 и значок области уведомлений для синхронизации

syncthing-relaysrv/focal 1.1.4~ds1-4ubuntu1 amd64
  децентрализованная синхронизация файлов - сервер ретрансляции

Для SSH, в зависимости от частоты интервала и, следовательно, фактора раздражения, вы можете реализовать Двойная аутентификация с помощью Пэм, что будет означать, что для подключения потребуется утверждение.

Ответить или комментировать

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