SFTP-сервер отвечает HTTPS-файлом

У меня есть сервер REST-API по HTTPS. Мне нужен способ вызова API, когда файл извлекается с использованием SFTP. Контент генерируется динамически по запросу. Есть ли простой способ сделать это без необходимости добавлять учетные записи пользователей и вводить дыры в безопасности на сервере? Наличие ключа позволит любому получить содержимое файла, но не более того.

Вот что у меня есть:

GET https://myservice/api/items/get?key=XXXX

и делать это должно вернуть то же самое:

sftp XXXX@myservice:/items (or sftp myservice:/items/XXXX)

1 ответ

Я думаю, я понимаю, что вы имеете в виду. Вы хотите создать файл на основе текущего пользователя (или запрошенного файла). В настоящее время вы делаете это через HTTPS, но вы также хотите сделать его доступным через SFTP... Верно? Интересная проблема.

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


Мой первый подход предполагает написание вашей собственной файловой системы!

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

  • Имейте в списке только один [поддельный] файл в readdir()
  • Узнайте, как найти имя пользователя из файловой системы.
  • Горячий провод open() а также read() вытащить из requests.get('your URL') используя имя пользователя. open() возможно, просто нужно подделать и read() быть ручкой на requests запрос.
  • Вам, вероятно, придется исправить и использовать многие другие методы, чтобы они возвращали данные, но в большинстве случаев это, очевидно, будет подделкой.
  • Смонтируйте эту файловую систему FUSE где-нибудь в вашем SFTP, чтобы каждый мог видеть ее только для чтения

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


Кроме того, если у каждого пользователя есть учетная запись, вы можете попытаться отслеживать доступ к каталогу, принадлежащему каждому пользователю. inotifywatch а также inotifywait может позволить вам следить за доступом к каталогу.

inotifywait -mrq --format '%w' /home/*/magicdir/ | while read DIR; do
    user=${DIR:6:-10}  # that is based on the length of /home/ and /magicdir/
    wget -qO $DIR https://path/to/items/${user}
done

И оставь это где-нибудь на заднем плане. Он будет обновлять файл с веб-сайта каждый раз, когда они получают доступ к каталогу. Вы можете проверить это (с echo blaaa $DIR) чтобы убедиться, что он не забивает сервер. Он может не отображать файл при первой загрузке каталога.

Другие вопросы по тегам