Vastiny

Sep 26, 2017

用 Nginx 建立 WebDAV 盘

Nginx 默认支持 WebDav,但 PROPFIND OPTIONS 等操作还不支持。如果需要在普通客户端打开,需要手动添加模块 nginx-dav-ext-module

Install

通过 nginx -V 获取目前本机 nginx 默认的编译参数

1
git clone https://github.com/arut/nginx-dav-ext-module

接着在 nginx 源码目录添加下面的编译参数

1
2
3
4
5
6
7
./configure \
...
--with-http_dav_module \
--add-module=../nginx-dav-ext-module

make
install

记得把原来的卸载清理干净,因为可能会使用一些原来 nginx 存在的模块,导致 nginx 异常

在 nginx.conf(/etc/nginx/nginx.conf) 中添加下面的一个新域名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80;
server_name xxx.com;

location / {
root /data/dav;
# alias /data/dav;
autoindex on;
dav_methods PUT DELETE MKCOL COPY MOVE;
# 需要 nginx-dav-ext-module 才有下面的选项
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
dav_access user:rw group:r all:r;
auth_basic "Authorized Users Only";
auth_basic_user_file /etc/nginx/htpasswd;
}
}

上面的配置中 auth_basic_user_file 需要用 htpasswd 生成用户库,之后重启即可

客户端

  • 在浏览器直接访问 http://xxx.com 即可,提示用户名密码后,就可以访问。
  • 使用 MacOS 的 Finder,Command+K,打开服务器连接,输入 http://xxx.com,填入用户密码
  • 使用专业的客户端: iOS 用 Coda.app

使用命令行操作 DAV 文件

把 stdin 转为二进制流传送到 DAV

1
2
echo 'bbb' | curl -X PUT -u username:password 'example.com/ii' --data-binary @-
cat file | ...

上传文件

1
curl -X PUT -u username:password 'example.com/ii' --data-binary @/home/user/filename

删除文件

1
curl -X DELETE -u yantze:password s.vastiny.com/filename

简单的写了一个脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env bash
set -eu

# 三个行为:
# 一个参数,无流,参数为远程相对路径,获取文件内容
# 一个参数,读取流文件,参数为远程相对路径
# 两个参数,第一参数本地路径,第二参数远程相对路径

WEBDAV="http://xxx.com"
DAVUSER="username"
DAVPASS="password"

# Get file content
if [[ $# -eq 1 && -t 0 ]]; then
curl -su "$DAVUSER:$DAVPASS" "$WEBDAV/$1"

# Upload file
elif [[ $# -eq 1 && -n $1 ]]; then
curl -X PUT -u "$DAVUSER:$DAVPASS" "$WEBDAV/$1" --data-binary @-
echo "$WEBDAV/$1"
elif [[ $# -eq 2 && -n $1 && -n $2 ]]; then
LOCALFILE="$(\cd "$(\dirname "$1")" && \pwd)/$(\basename "$1")"
curl -X PUT -u "$DAVUSER:$DAVPASS" "$WEBDAV/$2" --data-binary @"$LOCALFILE"
echo "$WEBDAV/$2"
fi

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
$ echo "example string" | pan ex1.txt
http://xxx.com/slid/ex1.txt

$ pan ex1.txt
example string

$ echo "example string2" > local_ex1.txt

$ pan local_ex1.txt ex1.txt
http://xxx.com/slid/local_ex1.txt

$ pan ex1.txt
example string2

更多 DAV 指令可以自行探索

用途

  • 简单的加密网站
  • 当作网盘使用

这样的设置 WebDav 一旦发现,容易被爆破,所以真的有价值的内容,可能需要再做进一步处理。

REF

OLDER > < NEWER