Samba
小知识:SMB 是目前应用得最广泛的局域网文件共享协议,在主流的操作系统中都有内建的支持。CIFS 是微软(Windows)对 SMB 的一个实现,而我们会用到的 Samba 是另一个实现了 SMB 协议的自由软件。
很多成品 NAS 系统的卖点都是能够用图形化的方式去控制文件共享的设置,但实际上直接编写 Samba 的配置文件也没有那么难。
Samba 直接采用了 Linux 的用户和文件权限机制,天然地支持多用户。
我们需要先为每个人创建 Linux 用户,将其加到 staff 组中方便后续管理。
# 可以在 path 中使用占位符来为每个用户提供单独的 Home 目录
# 可以在 valid users 中使用用户组来控制可访问的用户
[Home]
path = /storage/private/homes/%U
writeable = yes
valid users = @staff
# Samba 默认以登录用户创建文件,但 NextCloud 以 www-data 运行,可以用 force user 覆盖为特定的用户
[NextCloud]
path = /storage/nextcloud/data/%U/files
writeable = yes
valid users = @staff
force user = www-data
# 通过这些设置可以让 macOS 的 TimeMachine 也通过 SMB 进行备份
# 详见 https://www.reddit.com/r/homelab/comments/83vkaz/howto_make_time_machine_backups_on_a_samba/
[TimeMachine]
path = /storage/backups/timemachines/%U
writable = yes
valid users = @staff
durable handles = yes
kernel oplocks = no
kernel share modes = no
posix locking = no
vfs objects = catia fruit streams_xattr
ea support = yes
inherit acls = yes
fruit:time machine = yes
# 对于共享的目录可以用 force group 覆盖文件的所属组、用 create mask 覆盖文件的权限位
[VideoWorks]
path = /storage/shares/VideoWorks
writeable = yes
valid users = @staff
force group = staff
create mask = 0775
# 还可以设置游客可读、指定用户组可写的公开目录
[Resources]
path = /storage/public/Resources
guest ok = yes
write list = @staff
force group = +staff
create mask = 0775