#user #s3 #bucket #db #sqlite #svanill

bin+lib svanill-vault-server

svanill-vault服务器

1个不稳定版本

0.1.0 2020年10月10日

#1023HTTP服务器

AGPL-3.0-or-later

64KB
1.5K SLoC

svanill-vault-server

一个HTTP服务器,用于存储/检索由svanill(命令行Web)生成的文件。

经过身份验证的用户可以向一个专门的S3桶推送、列出或删除文件。

第三方服务

需要

  • S3兼容的服务(AWS S3、minio等)

可选

  • Sentry(用于记录错误)

目前用户数据从SQLite数据库读取,因此不需要外部数据库。

构建

您需要 Cargo,Rust软件包管理器。

cargo build

运行

构建工件位于项目根目录的目标文件夹中(如多crate Rust仓库的常规做法)。

默认情况下,AWS凭证通过环境变量 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 读取,但还有其他回退选项,请参阅 rusoto文档。您也可以将它们作为参数传递(请参阅 --help)。

cargo run # or execute the binary from `../target/debug` or `../target/release`
# most params can be provided as env variables, here we just use arguments
RUST_LOG=trace,actix_server=trace,actix_web=trace cargo run -- \
    --s3-access-key-id=test_s3_access_key \
    --s3-secret-access-key=test_s3_secret_key \
    --s3-bucket testbucket \
    --s3-region=us-east-1 \
    --s3-endpoint=http://localhost:9000 \
    -H 127.0.0.1 \
    -P 5000 \
    -d test.db \
    -v

数据库

svanill-vault-server 访问只读SQLite数据库文件。如果数据库文件不存在,它将自动创建并运行迁移。您可以通过运行查询等方式添加用户

sqlite3 test.db
sqlite> .schema
CREATE TABLE __diesel_schema_migrations (version VARCHAR(50) PRIMARY KEY NOT NULL,run_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);
CREATE TABLE user (
  username VARCHAR(50) NOT NULL PRIMARY KEY,
  challenge VARCHAR(255) NOT NULL,
  answer VARCHAR(32) NOT NULL
);
sqlite> INSERT INTO user VALUES ('your username', 'the challenge', 'the answer');

身份验证

用户通过请求一个挑战并然后提供对该挑战的答案来进行身份验证。

answer 应该是一个随机字符串,例如使用 hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random

challenge 是使用对称算法(据说使用Svanill(Web命令行))加密的答案。

它是这样工作的,这样Svanill用户可以使用单个密码来加密/解密文件并安全登录(Svanill使用AES-GCM加密,不会受到已知明文攻击的影响)。

依赖项

~76MB
~1.5M SLoC