как безопасно получать файлы от конечных пользователей через rsync - PullRequest
3 голосов
/ 15 декабря 2010

Я бы хотел, чтобы пользователи моего веб-приложения могли загружать содержимое каталога через rsync. Это просто пользователи, которые зарегистрировались онлайн, поэтому я не хочу создавать для них постоянные учетные записи Unix, и я хочу убедиться, что все загружаемые ими файлы хранятся на моем сервере только в каталоге, соответствующем их учетной записи. В идеале поток должен выглядеть примерно так:

  1. пользователь говорит: «Я хотел бы обновить свои файлы с помощью rsync» через аутентифицированный веб-интерфейс
  2. сервер говорит: «Хорошо, пожалуйста, запустите: rsync / path / to / yourfiles uploaduser123abc @ myserver: /»
  3. клиент запускает это, обновляя все файлы, которые были изменены на сервере
    • Расположение загрузки - chroot или что-то в этом роде - мы хотим, чтобы клиент записывал только файлы в указанный каталог на сервере
    • в идеале, клиенту не нужно вводить пароль - 123abc в имени пользователя достаточно для секретного токена, чтобы обеспечить безопасность одной транзакции rsync, а после транзакции этот токен уничтожается - больше не будет rsyncs до нового шага 1 встречается.
  4. сервер имеет обновленный набор файлов пользователя.

Если вы использовали Google AppEngine, желаемое поведение аналогично его команде «обновить» - он отправляет только измененные файлы в appengine для хостинга.

Какой лучший подход для реализации чего-то подобного? Будет ли создание одноразовых пользователей, а затем запускать демон rsync в chroot-тюрьме под этими учетными записями? Существуют ли какие-либо библиотеки (желательно Python) или сценарии, которые могут делать что-то подобное?

1 Ответ

0 голосов
/ 15 декабря 2010

Вы можете запустить ssh jailrooted и rsync в обычном режиме, просто используйте PAM для аутентификации на «альтернативном» authdb.

...