常见的文件共享协议

default

常见的文件共享协议

常用的文件共享有三种:FTP/SFTP、Samba、WebDAV

名称 描述
FTP/SFTP 性能不高,速度较慢。最新版浏览器已不支持。SFTP 是在 FTP 基础上增加了加密,在 Linux 上安装 OpenSSH 后可以直接用 SFTP 协议传输
Samba 使用简单。Windows下文件共享使用445端口,且不能更改。445端口常常受黑客关照,在广域网上大多运营封掉了访端口,所以这种文件共享只适合在内网使用
WebDAV 基于 HTTP 协议的通信协议,应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。使用HTTPS还能保安全性。Apache和Nginx支持WebDAV,可作为WebDAV文件共享服务器软件。也可以使用专门的WebDAV软件部署。

FTP/SFTP

Samba

WebDAV

创建 WebDAV 服务

go 开源项目实现

GitHub - hacdias/webdav: Simple Go WebDAV server

修改 config.yml 配置文件

 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 监听任意网卡,多网卡可指定对应ip
address: 0.0.0.0
port: 8081
# 如果无需验证填 false
auth: true
# 如果不需要 https 则填 false
tls: true
# https证书和密钥,如果 tls 为 false,cert 和 key 不需要
cert: /data/www/cert/szhome.xf1024.com_nginx/cert.pem
key: /data/www/cert/szhome.xf1024.com_nginx/cert.key
# 访问前缀,建议默认
prefix: /

# 如果 auth 为 false 生效,文件共享的路径
scope: /data/users/public
# 是否允许修改
modify: true
rules: []

# 跨域设置
cors:
  enabled: true
  credentials: true
  allowed_headers:
    - Depth
  allowed_hosts:
    - http://localhost:8081
  allowed_methods:
    - GET
  exposed_headers:
    - Content-Length
    - Content-Range

# 用户信息,如果 auth 为 true 生效
users:
  - username: user1
    password: 123456
    scope: /data/users/2021
  - username: user2
    password: 654321
    scope: /data/users/2022

启动服务

1
webdav -c ./config.yaml

Apache 实现

 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<VirtualHost *:80>
    ServerName dav.engr-z.com
    DocumentRoot /data/webdav
    <Directory "/data/webdav">
        Options Indexes FollowSymLinks
        AllowOverride None
        Dav on
        AuthType Basic
        AuthName "WebDAV Upload"
        AuthUserFile conf/.htpasswd
        AuthBasicProvider file
        Require user webdav
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerName dav.engr-z.com
    DocumentRoot /data/webdav
    <Directory "/data/webdav">
        Options Indexes FollowSymLinks
        AllowOverride None
        Dav on
        AuthType Basic
        AuthName "WebDAV Upload"
        AuthUserFile conf/.htpasswd
        AuthBasicProvider file
        Require user webdav
    </Directory>
#	Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
    # 添加 SSL 协议支持协议,去掉不安全的协议
    SSLProtocol all -SSLv2 -SSLv3
    # 修改加密套件如下
    SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
    SSLHonorCipherOrder on
    # 证书公钥配置
    SSLCertificateFile cert/dav.engr-z.com_apache/public.crt
    # 证书私钥配置
    SSLCertificateKeyFile cert/dav.wangzhengzhen.com_apache/cert.key
    # 证书链配置,如果该属性开头有 '#'字符,请删除掉
    SSLCertificateChainFile cert/dav.engr-z.com_apache/chain.crt
</VirtualHost>
1
2
# 如果需要创建多个用户,在第二次执行时注意去掉 -c 参数,防止生成文件覆盖。
htpasswd -c /etc/webdav/.htpasswd user1

Nginx 实现

 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
server {
        listen 80;
        listen [::]:80;

        server_name dav.engr-z.com;
        auth_basic "Authorized Users Only";
        auth_basic_user_file /etc/.htpasswd;

        location / {
                root /data/webdav;
                client_body_temp_path /var/temp;
                dav_methods PUT DELETE MKCOL COPY MOVE;
                dav_ext_methods PROPFIND OPTIONS;
                create_full_put_path on;
                client_max_body_size 10G;
        }
}

server {
        listen 443;
        listen [::]:443;
        server_name dav.engr-z.com;

        ssl on;
        ssl_certificate /data/www/cert/dav.engr-z.com_nginx/cert.pem;
        ssl_certificate_key /data/www/cert/dav.engr-z.com_nginx/cert.key;
        ssl_session_timeout 5m;
        ssl_protocols SSLv2 SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;

        location / {
                root /data/webdav;
                client_body_temp_path /var/temp;
                dav_methods PUT DELETE MKCOL COPY MOVE;
                dav_ext_methods PROPFIND OPTIONS;
                create_full_put_path on;
                client_max_body_size 10G;
        }

}

Windows 挂载

文件管理器挂载

“计算机” ,点右键添加一个网络位置,按向导填入地址,用户名,密码

直接使用命令挂载

1
net use Y: https://dav.engr-z.com/ /user:engrz /persistent:YES 密码

浏览器访问

http://localhost/虚拟目录名称/ 就可以访问 WebDAV服务器中的内容

Gear(夕照)的博客。记录开发、生活,以及一些不足为道的思考……