家庭文件系统的搭建

大学时买的笔记本一直闲置在自己手里,最近正好想研究下Resilio Sync软件,便拿出自己的笔记本安装上该软件研究了一下。然后想到自己一直想利用树莓派打造一个家庭用的文件共享及备份系统,便对笔记本折腾了一下,算是提前进行实验一番,等到树莓派到手以后便可以直接部署设置了。以下是各个软件的使用目的及配置方法。

Resilio Sync

Resilio Sync(原名”BitTorrent Sync”)是由BitTorrent公司开发的专有的对等网络数据同步工具,可在Windows、OS X、Linux、Android、IOS和FreeBSD上使用。其可在局域网、互联网上通过安全的、分布式的P2P技术在不同设备之间同步文件。
从上面的介绍可以看到,使用Resilio Sync可以在局域网、互联网上在不同设备之间同步文件。因此便想到借助该软件实现不同终端之间的文件备份,此时由于自己工作的笔记本是公司发的ThinkP(Win10),由于无需实时备份文件,自己不想在上面安装Resilio Sync,便想到了使用Samba文件夹共享的方式进行文件共享。

安装

  1. 根据自己的服务器操作系统从官网对应的软件。由于我的是Linux系统,所以自己就只说明下Linux中的配置。从官网中下载下来的是一个tar.gz文件,解压之后会有一个名为rslsync可执行文件,无需编译。(Resilio Sync 2.6.0)
  2. 解压之后,运行./rslsync --dump-sample-config > sync.conf命令,将配置样例输出到sync.conf文件当中

配置

本文只会记录需要的基本配置,其余的自行探索(Resilio Rsync大部分设置均可通过WEB-UI的方式进行更改)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"device_name": "Data Center",
"listening_port" : 9999, // 配置程序监听的端口,该端口不是webui的监听端口,因此可不必特意设置
"storage_path" : "/home/rslsync/.sync",

"webui" :
{
"listen" : "0.0.0.0:8888" // 监听端口,默认是127.0.0.1,如果是在远程部署的话,建议监听0.0.0.0或VPS的端口地址,不然无法访问WEB-UI,便无法管理系统。

/* preset credentials. Use password or password_hash */
,"login" : "admin"
// ,"password" : "password" // (not recommended, better use 'password_hash_unified')
// ,"password_hash" : "<crypt() 3 format password hash>" // (not recommended) Works on *nix only!
// Use either 'password_hash' or 'password_hash_unified' (recommended), but not both of them!
,"password_hash_unified" : "4ADCA2D9F8************************************DDC53EE94182228587" // 16进制的SHA256字符串,配置后不要忘记重启一次。
}

运行

  1. 使用./rslsync --config sync.conf命令运行Resilio Rsync软件
  2. 在浏览器中输入WEB-UI监听的地址与端口,然后在认证窗口中输入用户名和密码(生成sha256的字符串)
  3. 通过输入密钥或链接的方式,同步多个设备之间的文件(IOS系统只能同步照片,电子书等文件则需要挨个通过客户端打开的方式进行同步…….)
    注意,国内对该软件做了屏蔽,因此需要翻墙下载,国内有一款微力同步的软件可以使用,同时还有Syncthing软件实现局域网的同步,由于精力等原因,自己未对这两个软件做测试,大家可根据自己的需求自行搜索下载进行测试

问题

  1. Resilio Sync是单向同步软件,不可以双向的同步文件(Resilio Sync本来就是为了在网络中共享文件的,而不是专门的双向同步软件)

Samba

Samba用来让UNIX系统的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。
前面已经说过了,由于我的主力电脑是公司发的ThinkPad,自己需要每天背着往返于公司、客户之间,因此不想安装一些乱七八糟的软件。有时需要与自己的备份系统之间传输一些文件,故采取了共享文件夹的方式。

安装

使用的debian系统,配置中科大的软件镜像源,因此直接采用apt的方式安装。
安装命令:apt-get install samba samba-common-bin

配置

服务配置

Samba服务器配置主要分为global、homes、printers、sharefiles四种配置,其中global:系统的全局配置,影响整个软件的运行;homes表示为每个samba用户定义其是否能够通过samba服务访问自己的家目录;printers定义打印服务;sharefiles自定义共享的文件系统。本次试验中主要讲解一下global与sharefiles的基本配置。

  1. global配置
    全局配置,在该选项中配置软件基本运行的参数。主要的配置参数如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 配置Samba Server要加入的工作组或域,需要与Windows中的配置一致。
workgroup = WORKGROUP
# 设置Samba Serve监听的网卡或IP地址,可以写网卡名,也可以写该网卡的IP地址
interfaces = 192.168.0.121/24 wlan0
# 设置Samba Server 的NetBIOS名称。如果不填写,默认使用该服务器DNS名称的第一部分
netbios name = DATACENTER
# 设置用户访问Samba Server的验证方式,有五种验证方式:
##share:表示匿名登录,在Samba 4中已经被弃用,可以利用security=user map to guest = Bad User 来代替
##user:表示系统账户要先添加进samba库然后编程samba用户,使用samba用户来登录。Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。
##server: 由另一台samba服务器来对用户进行身份验证。
##domain: 将samba服务器加入到域中,由域控制器进行身份认证。
##ADS: 将samba集成到活动目录中(samba3.0中新增的功能)
security = user
# passdb backend 用户后台,目前有三种后台
## smbpasswd: 使用smb自己的工具smbpasswd来给系统用户设置一个Samba密码,客户端使用该密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下
## tdbsam:使用数据库文件来建立用户数据库,数据库文件名称为pasdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd -a 来建立Samba用户,不过要建立的Samba用户**必须是系统用户**。也可以使用pdbedit命令建立Samba账户。
## ldapsam:基于LDAP的账户管理方式来**验证用户**。首先建立LDAP服务,设置"passdb backend = ldapsam:ldap://LDAP Server"
passdb backend = tdbsam
# 是否将认证加密,(现在Windows都是使用加密密码,因此一般需要开启此项,默认开启)
encrypt passwords = yes/no
# 设置guest用户名
guest account = nobody
# 将所有认证失败的用户都认证为guest,如果的文件夹配置为guest ok = yes,则认证失败的用户也可访问该文件夹
map to guest = Bad User
  1. sharefiles配置
    共享部分的配置,用于为每个共享的文件夹进行配置。也可以在共享部分中设置全局配置,默认共享设置的优先级高于全局配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 共享文件夹名称
[share file name]
# 共享文件的路径
path = /home/
# 是否公开,及能否再网上邻居看到该共享
browseable = yes
# 是否可写
writable = yes
# 是否拒绝匿名访问
guest ok = no
# 指定哪些用户可以访问,如果不指定则所有用户都可以访问
valid users = user1 user2 user3
# 指定哪些用户不可以访问
invalid users = user1 user2
# 客户端上传文件的默认权限
create mask = 0775
# 客户端创建目录的默认权限
directory mask = 0775
# 设置客队文件进行写操作的用户
write list = user1 user2 user3
# 设置共享目录的管理员,可以通过@groupname的形式引用系统的用户组
admin users = user1(@group)
  1. 引用配置文件
  • 第一种
1
2
[global]
config file = /etc/samba/$U.smb.conf
  • 第二种
1
2
[global]
include = /etc/samba/%U.smb.conf

区别:使用config file时,当以kevin的身份访问Samba服务器时,只能看到Kevin,其它在smb.conf中定义的共享资源都无法看到
使用include时,当以Kevin的身份访问Samba服务器时,除了可以看到Kevin,其它在smb.conf中定义的资源也可以看到

  1. 默认变量
  • %U: 当前连接的用户名
  • %u: 当前服务的用户名
  • %g: 当前用户的用户组
  • %G: 当前连接用户的用户组

其它设置

  • 检测配置文件
1
testparm smb.conf
  • 添加用户
    samba账号必须要存在于Linux系统中(/etc/passwd),但其密码却是单独维护的。创建samba用户数据需要使用pdbedit,pdbedit命令用于管理smb服务的账号信息
1
pdbedit -a username
  • 修改密码
1
smbpasswd username

参考文章

  1. 维基百科–Resilio Sync
  2. 维基百科–Samba
  3. samba全局配置含义解释