搭建基于树莓派的家用服务器/NAS(5)——文件共享(Samba / SMB, Nginx / WebDav)

阅读指南:

  1. 配置树莓派需要有一定的Linux基础。
  2. 不熟悉树莓派的朋友,可以从第一篇文章开始。

0. 关于WebDav和SMB

Samba是一个基于SMB协议的网络共享软件,SMB是一种常见的网络文件共享协议。
SMB的特点是使用专有端口,某些情况下性能有优势,但是它在安全性、通用性方面不如WebDav。

Nginx是一个开源的Web服务软件,它支持WebDAV。
WebDav是基于http的,http有的功能它都有(比如说可以使用ssl加密),还可以直接用浏览器打开。可以看出来它的安全性和通用性非常优秀,适合在互联网上做共享。

如果你的共享是在局域网中使用,建议使用SMB。若是要通过互联网使用,可以考虑WebDav。若两方面需求都有,也可以都搭建,它们能很好的共存互不干扰。

1. Samba / SMB

1.1. 安装

执行sudo apt -y install samba安装。

1.2. 服务端(树莓派)设置

首先确保几个端口可用(如果没有设置防火墙的话这个步骤可以跳过),我的iptables规则如下:

1
2
3
# Allow incoming Samba
-A INPUT -p udp --dport 137:138 -m state --state NEW -j ACCEPT
-A INPUT -p tcp --dport 139 -m state --state NEW -j ACCEPT

把当前的pi用户加入到samba的账号体系中:sudo pdbedit -a -u pi,并设置独立密码.
编辑samba的配置文件:sudo vi /etc/samba/smb.conf,在文件的最下面追加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[public]
# 共享名
comment = public

# 共享目录
path = /media/usb-storage

# 是否允许编辑
read only = no

# 是否允许匿名访问
guest ok = no

# 是否允许所有用户(包括匿名用户)看到该共享
browseable = yes

# 新建文件默认权限
create mask = 0640

# 新建目录默认权限
directory mask = 0750

重启服务:sudo service smbd restart

1.3. 客户端设置

服务端设置好后,Mac或Windows的网络那一栏会自动出现树莓派的名称:

这个图标点开后就是我们刚才设置好的共享目录了。

2. Nginx / WebDav

2.1. 安装

执行sudo apt -y install nginx-full安装。

2.2. 服务端(树莓派)设置

在树莓派上打开一个新文件sudo vi /etc/nginx/sites-available/webdav,输入下面内容后保存:

/etc/nginx/sites-available/webdav
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
# 如果你有设置防火墙的话,注意这里要使用例外端口
listen 8001;
listen [::]:8001;

charset utf-8

# 需要共享的目录路径
root /media/usb-storage;
autoindex on;

auth_basic "Authorized Users Only";
auth_basic_user_file /etc/nginx/.pwdlist;

dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
dav_access user:rw group:rw all:r;

client_max_body_size 0;
create_full_put_path on;
}

然后执行:

  1. sudo bash -c 'echo "username:"`openssl passwd -apr1` > /etc/ngxin/.pwdlist' —— 生成一个存放用户和密码的文件.pwdlist用于webdav权限管理(username是用户名,你可以自定义)
  2. sudo ln -s /etc/nginx/sites-available/webdav /etc/nginx/sites-enabled/webdav
  3. sudo service nginx reload —— 重新加载nginx

2.3. 客户端设置

新版本的MacOS和Windows的文件管理系统本身就支持WebDav,以MacOS为例可以直接按此操作访问共享文件夹:


或者你也可以直接用浏览器访问: