Внедрение FTP-интерфейса/протокола

Меня попросили настроить FTP-сервер с использованием python, на который могут входить разные пользователи, и в зависимости от их входа в систему будет отображаться другая файловая структура.

Часть структуры будет доступна только для чтения, а другая часть будет писать, читать, создавать и удалять.

Файловая структура и файлы не будут существовать на сервере, и их придется создавать ленивым способом, поскольку пользователь расширяет папки, запрашивая внешние серверы.

Я думаю, серверы должны имитировать интерфейс/протокол FTP извне, но работать совершенно по-другому внутри.

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

Есть ли уже что-то подобное? кто-нибудь делал что-то подобное раньше?

Есть ли очевидные проблемы при попытке реализовать такую ​​модель?


person GP89    schedule 24.09.2012    source источник


Ответы (2)


twisted проект будет очевидным местом для начала; следующий пример запускает простой FTP-сервер, который аутентифицирует пользователей по файлу паролей, но также разрешает анонимный доступ

from twisted.protocols.ftp import FTPFactory, FTPRealm
from twisted.cred.portal import Portal
from twisted.cred.checkers import AllowAnonymousAccess, FilePasswordDB
from twisted.internet import reactor

p = Portal(FTPRealm('./'),
           [AllowAnonymousAccess(), FilePasswordDB("pass.dat")])
f = FTPFactory(p)

reactor.listenTCP(21, f)
reactor.run()

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

person Martijn Pieters    schedule 24.09.2012
comment
Таким образом, возможно ли, чтобы твисты вызывали мои собственные функции для файлов и каталогов, и я делал там все, что угодно, и возвращал результат обратно в скрученные? - person GP89; 24.09.2012
comment
В яблочко. Следуйте инструкциям Twisted; отложенные концепции являются мощными, но вы должны прочитать документацию, чтобы полностью оценить эту силу. - person Martijn Pieters; 24.09.2012
comment
Блин, спасибо за направление в правильном направлении! Я не был уверен, с чего начать в этом :) - person GP89; 24.09.2012
comment
Итак, как я могу переопределить или изменить поведение файлов и каталогов? В вашем примере вы обслуживаете ./ как файлы/папки, верно? Мне нужно обслуживать что-то почти виртуальное (файловая структура хранится в кассандре, а файлы лежат на s3) - person GP89; 27.09.2012

Почему питон? Я имею в виду, какое отношение к этому имеет питон? Я бы искал какой-нибудь модуль PAM, способный создавать структуру виртуальной файловой системы для конкретного пользователя при входе в систему, и если готовой нет, рассмотрите возможность изменения некоторого pam_mount, что-то в этом роде.

http://pam-mount.sourceforge.net

person Piotr Wadas    schedule 24.09.2012
comment
..и этот вопрос, вероятно, принадлежит superuser.com - person Piotr Wadas; 24.09.2012
comment
Большая часть кода для создания файловой структуры пользователя уже написана на питоне, только с другим интерфейсом. - person GP89; 24.09.2012