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连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对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本身,在硬件链条的某个环节。排查顺序:
热门跟贴