打开网易新闻 查看精彩图片

6714字的技术教程,读完能帮你省下一台群晖的钱。这是系列第三篇,前两部分别讲了用Docker搭Nextcloud、搞自动备份。这篇解决一个更原始的痛点——有时候你就是想直接拖文件,不想开浏览器、不想装客户端、不想等同步。

Mac用户打开Finder,Windows用户打开资源管理器,你的服务器像本地硬盘一样躺在那里。这就是Samba(服务器消息块协议)做的事。它和Nextcloud共用同一个存储目录(/srv/nas),但走的是完全不同的门:Nextcloud是云端体验,Samba是局域网原生体验。

有个坑提前说。通过Samba扔进去的文件,Nextcloud不会自动识别,得手动跑扫描命令。我放在文末。

安装与基础配置

安装与基础配置

SSH连上服务器,一条命令装完:

sudo apt install samba -y

验证版本,看到4.x.x就行:

smbd --version

Samba用独立的密码体系,跟Linux登录密码分开。给你的用户设一个:

sudo smbpasswd -a your-username

这里输的是你实际用的Linux用户名。系统会让你设密码,这个密码就是Mac或PC连接时要输的,可以和Linux密码不一样。

打开配置文件:

sudo nano /etc/samba/smb.conf

滚到最底下,加这几段共享配置。我直接贴出来,后面逐行解释:

[NAS]
path = /srv/nas
browseable = yes
read only = no
valid users = your-username
create mask = 0644
directory mask = 0755
force user = www-data
force group = www-data

[Photos]
path = /srv/nas/photos
browseable = yes
read only = no
valid users = your-username
create mask = 0644
directory mask = 0755
force user = www-data
force group = www-data

[Videos]
path = /srv/nas/videos
browseable = yes
read only = no
valid users = your-username
create mask = 0644
directory mask = 0755
force user = www-data
force group = www-data

几个关键参数的意思:path是实际路径;browseable=yes让网络邻居里能看到;read only=no允许写入;valid users限定谁能进;create mask和directory mask控制新建文件和文件夹的权限;force user/group强制用www-data身份操作,这是为了让Samba和Nextcloud能和平共处——Nextcloud的Docker容器跑在www-data下,两边得用同一个身份才能互相读写。

打开网易新闻 查看精彩图片

保存退出(Ctrl+X,Y,回车)。然后改存储目录的归属:

sudo chown -R www-data:www-data /srv/nas
sudo chmod -R 775 /srv/nas

775的意思是:所有者(www-data)可读写执行,同组用户可读写执行,其他人只能读和执行。这个设置让Nextcloud和Samba都能正常工作,又不至于权限太松。

重启Samba服务生效:

sudo systemctl restart smbd
sudo systemctl enable smbd

enable是开机自启,restart是立即生效。两条都要执行。

Mac端挂载:Finder原生支持

Mac端挂载:Finder原生支持

Mac连Samba最省事,系统级集成。打开Finder,菜单栏选「前往」→「连接服务器」,或者按Command+K。

输入地址:

smb://你的服务器IP

比如smb://192.168.1.100。点连接,选「注册用户」,填刚才设的Samba用户名和密码。可以勾选「记住密码」,以后直接连。

连上之后,NAS、Photos、Videos三个共享会出现在Finder侧边栏,像本地磁盘一样用。拖拽复制、预览、甚至直接编辑都行。速度取决于你的网卡,千兆内网跑满110MB/s没问题。

有个细节:Mac默认用SMB 3.0协议,加密传输。如果你的服务器性能弱(比如树莓派),可以强制用SMB 2.0提升速度。在连接服务器时这样写:

smb://你的服务器IP?vers=2.0

但一般家用场景不用折腾这个,现代NAS或者小主机性能都够。

Windows端挂载:两种姿势

Windows端挂载:两种姿势

Windows对Samba的支持更原生,毕竟SMB协议就是微软发明的。两种常用方式:网络发现和直接映射网络驱动器。

方式一:资源管理器左侧「网络」里直接找。如果看不到,检查Windows功能里「SMB 1.0/CIFS文件共享支持」有没有开(控制面板→程序→启用或关闭Windows功能)。不过SMB 1.0有安全风险,建议只开SMB 2.0/3.0。

打开网易新闻 查看精彩图片

方式二:更稳定的做法,直接映射。资源管理器→「此电脑」→右键→「映射网络驱动器」。文件夹填:

\\你的服务器IP\NAS

勾选「登录时重新连接」,这样开机自动挂载。填用户名密码,完事。Z盘、Y盘随便你指定,之后打开「此电脑」就能看见。

Windows 10/11默认要求SMB加密,如果服务器配置没跟上会连不上。在Samba配置里加一行解决:

server min protocol = SMB2

放在smb.conf的[global]段里。或者更粗暴的,在Windows本地组策略里放宽要求(gpedit.msc→计算机配置→管理模板→网络→Lanman工作站→启用不安全的来宾登录)。但建议改服务器配置,别动Windows安全策略。

权限设计的核心逻辑

权限设计的核心逻辑

回头看那个force user = www-data的设置。这是整个方案能跑通的关键,也是很多教程没讲透的地方。

Nextcloud的Docker容器内部以www-data用户运行,它创建的文件所有者就是www-data。Samba如果不强制用www-data,而是以连接用户的身份写入,就会产生权限割裂:Samba传上去的文件Nextcloud改不了,Nextcloud上传的文件Samba删不掉。

force user把Samba的所有操作都伪装成www-data,两边看到的文件所有权一致,才能互相操作。代价是你在Samba连接时用的那个Linux用户,实际上被忽略了,真正起作用的是Samba密码验证。

这有点像酒店前台:你用自己的身份证登记(Samba用户名密码),但进房间用的是房卡(www-data身份)。前台只负责验证你是谁,房卡决定你能进哪扇门、能干什么。

create mask 0644和directory mask 0755是另一层保险。0644意味着新建文件:所有者读写,同组只读,其他人只读。0755意味着新建文件夹:所有者读写执行,同组读执行,其他人读执行。Nextcloud和Samba都在www-data组里,所以互相能读,但默认不能互相覆盖——需要额外配置或者手动改权限。

如果你希望Samba传上去的文件Nextcloud能直接编辑,把create mask改成0664(同组可写)。但这样风险是任何能连Samba的人传的东西,Nextcloud都能改。家用场景一般没问题,多人共用要谨慎。

移动端:不太完美但能用

移动端:不太完美但能用

iOS和Android都能连Samba,但体验比桌面端差一截。

iOS:文件App→右上角菜单→「连接服务器」,填smb://地址。连上之后能在文件App里浏览,但第三方App调用不方便。比如你想用LumaFusion剪视频,素材在Samba上,得先下载到本地,剪完再传回去。不像MacFinder,可以直接在Samba路径上工作。

Android:各厂商差异大。三星「我的文件」、小米「文件管理」都自带SMB支持,第三方用Solid Explorer、MiXplasma也行。Android的优势是能后台挂载,像ES文件浏览器可以把Samba映射成本地路径,其他App无感知访问。但稳定性看运气,有时候后台被杀就断了。

所以移动端的结论:能应急,别依赖。照片视频自动备份还是走Nextcloud的App更靠谱,Samba适合在电脑上大批量整理文件。

性能调优:千兆跑满需要什么

性能调优:千兆跑满需要什么

内网传输速度瓶颈通常不在Samba本身,在硬件链条的某个环节。排查顺序: