samba服务需先安装并启动smbd和nmbd:debian/ubuntu用apt install samba,centos/rhel用dnf install samba,再systemctl enable --now smbd nmbd;windows访问需同子网、开启网络发现、放行防火墙端口137-139/445(tcp/udp),并用\ipshare格式访问,配smbpasswd用户及目录权限。

确认Samba服务是否已安装并运行
很多用户卡在第一步:明明配了smb.conf,却从Windows访问不了,根本原因是smbd压根没跑起来。
先检查服务状态:sudo systemctl status smbd
如果显示inactive (dead)或not found,说明没装或没启。Debian/Ubuntu用sudo apt install samba,CentOS/RHEL用sudo dnf install samba(或yum)。
安装后必须手动启动并设为开机自启:sudo systemctl enable --now smbd nmbd
注意:nmbd负责NetBIOS名称解析,Windows网络邻居里要看到Linux主机名,它不能省。
Windows无法发现Linux主机或提示“找不到网络路径”
这通常不是配置问题,而是网络发现协议不匹配或防火墙拦截。
- 确保Linux和Windows在同一局域网子网(比如都是
192.168.1.x),且没启用IPv6-only模式 - Windows端需开启“网络发现”和“文件和打印机共享”(控制面板 → 网络和共享中心 → 高级共享设置)
- Linux防火墙要放行Samba端口:
sudo ufw allow 137:139/tcp、sudo ufw allow 445/tcp、sudo ufw allow 137:139/udp、sudo ufw allow 445/udp - 如果用的是较新版本Windows(如Win10 2004+ 或 Win11),默认禁用SMBv1;而某些旧版Samba(如
samba-4.7以下)依赖它——此时要么升级Samba,要么在Windows中启用SMBv1(不推荐,有安全风险)
配置[share]时权限与认证踩坑点
最常见错误是写完smb.conf就直接重启服务,结果Windows提示“拒绝访问”或“登录失败”,其实问题出在用户映射和目录权限上。
关键三步缺一不可:
- 用
smbpasswd -a <username></username>为Samba单独添加用户(该用户必须是系统已存在的本地用户,且smbpasswd命令不在PATH时可能是/usr/bin/smbpasswd) - 共享目录的属主和权限要放开:
sudo chown -R <username>:<groupname> /path/to/share</groupname></username>,且至少保证drwxr-xr-x(即755),否则Samba进程(以nobody或root身份运行)读不到 -
smb.conf中务必明确指定valid users = <username></username>和browseable = yes;若设guest ok = yes,则无需密码,但必须同时设guest account = nobody并确保nobody对目录有读写权
示例最小可用配置段:
[myshare] path = /srv/samba/myshare browseable = yes read only = no valid users = alice create mask = 0644 directory mask = 0755
从Windows访问时地址怎么填、为什么连不上
别输http://或ftp://,也不要用主机名瞎猜——Windows资源管理器地址栏直接填:\<linux-ip-address><share-name></share-name></linux-ip-address>(例如\192.168.1.100myshare)
如果用主机名(如\ubuntu-pcmyshare)失败,优先换IP访问;成功后再排查nmbd或Windows的Lmhosts配置问题。
遇到“你没有权限访问”的弹窗,注意看Windows是否自动填了当前Windows用户名——它不会自动映射到Samba用户。点击“使用其他账户”手动输入Linux用户名和smbpasswd设的密码。
最后提醒一句:Samba的security = user(默认)要求每个共享用户都得有独立Samba密码;别指望用SSH密钥或系统密码直通,smbpasswd这一步绕不开。











