一个“脑死亡”-简单的文件上传服务器
bdfu的Python项目详细描述
#bdfu:一个“脑死亡”的简单文件上传服务器
[![生成状态](https://travis-ci.org/rjw57/bdfu.svg?branch=master)](https://travis-ci.org/rjw57/bdfu)
bdfu旨在解决让一个或多个用户 以身份验证的方式将文件上载到某个服务器。具体来说 进行了以下简化:
- 用户不能选择上载文件的文件名;每个文件都是 以 [uuid](http://en.wikipedia.org/wiki/Universally_unique_identifier)。
- 一旦上传,用户就不能访问这些文件。允许用户读取访问 上传的文件是一个正交问题
- 使用有限生存期[jwt](http://jwt.io/)令牌对用户进行身份验证 可手动或自动发出。
- 服务器只需要Python和支持CGI的web服务器 尽管可以作为 [wsgi](http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface) 提高性能的应用程序
##安装
安装通过pip或easy_install完成:
`console $ pip install bdfu `
开发版本可以直接从此存储库安装:
`console $ pip install -egit+https://github.com/rjw57/bdfu#egg=bdfu `
##配置
附带了一个[示例配置](examples/simple server.cfg) bdfu的源代码。简化版如下:
`python # Save this as simple-server.cfg JWT_SECRET_KEY = 'supersecret' STORAGE_DIR = '/tmp/bdfu-storage-example' `
配置文件本身是一个python脚本,因此可以计算 这些选项的值
在生产中,可以通过设置环境来告诉BDFU这个文件 变量BDFU_SETTINGS到配置文件的absolute路径。
###入门
首先,使用示例配置运行示例服务器:
`console $ bdfu server /path/to/simple-server.cfg `
这将导致服务器在http://localhost:8080/上运行。现在,生成 “sally”用户的令牌:
`console $ bdfu gen-token sally supersecret >token-sally.txt `
默认情况下,此令牌设置为在生成后一分钟过期。这个 到期时间可以通过--expires-in选项设置为bdfu gen-token。
尝试上载1K随机数据文件:
`console $ dd if=/dev/urandomof=test-file.bin bs=1024 count=1 $ bdfu upload http://localhost:8080/ `cat token-sally.txt`test-file.bin ecbfb21578ad49548472d955b38ac65b `
由bdfu upload输出的字符串是该文件的唯一ID。文件 已上载到$STORAGE_DIR/$USER/$FILE_ID,我们可以检查:
`console $ ls /tmp/bdfu-storage-example/sally/ ecbfb21578ad49548472d955b38ac65b $ diff -qs/tmp/bdfu-storage-example/sally/ecbfb21578ad49548472d955b38ac65btest-file.bin Files /tmp/bdfu-storage-example/sally/ecbfb21578ad49548472d955b38ac65b and test-file.bin are identical `
###代币生成
除了bdfu gen-token命令之外,还有一个 示例](examples/make token.py)随源代码一起提供。令牌生成可以 由任何拥有服务器机密的人执行。代币是标准的 [JWT](http://jwt.io)令牌实际上,可以粘贴 bdfu gen-token进入jwt网站亲自查看他们的结构。
令牌可以由服务器管理员手动生成并提供给 用户或它们可能由某个拥有 秘密。例如,特定机构可以将令牌生成器包装为 由现有身份提供者保护的Web应用程序。 类似地,管理员可以自由选择 按用户使用他们认为合适的策略。
##服务器部署
《华尔街日报》
bdfu web应用程序作为标准wsgi应用程序公开,适合于 在apache或类似软件中通过mod_wsgi运行。有一个独立的 服务器](examples/simple server.py)源代码附带的示例。
应用程序要求HTTPAuthorization头由 网络服务器。这可能不是服务器的默认配置为了 例如,Apache web服务器将需要以下指令:
` WSGIPassAuthorization On `
###cgi
附带了一个示例[cgi包装脚本](examples/cgi-bin/bdfu) 源头
应用程序要求httpAuthorization头由 到cgi脚本的web服务器。这可能不是 你的服务器例如,apache web服务器将需要 指令:
` RewriteEngine on RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] `
##安全注意事项
作为一种“脑死亡”解决方案,bdfu的安全模型力求非常简单; 任何可以访问服务器机密的人都可以生成令牌和必须be 可信的。例如,对于 路径分隔符等愚蠢的服务器管理员可以自由创建用户 如果他们愿意,可以调用../../../../etc/passwd。BDFU假设服务器 管理员知道他们在做什么
一般来说,bdfu的目标是在令牌被 已验证,但假设令牌中的声明尚未生成 一个对手