Ubuntu 18.04.6 Samba共享文件夹搭建与跨平台访问全攻略

📅 2026/8/13 6:20:32
Ubuntu 18.04.6 Samba共享文件夹搭建与跨平台访问全攻略
1. 从“共享”这个需求说起为什么我们需要共享文件夹在任何一个需要协作的环境里无论是小型工作室、家庭局域网还是开发团队内部文件共享都是一个刚需。想象一下你在一台Ubuntu服务器上部署了一个项目团队成员需要频繁地访问和更新其中的文档、代码或者媒体资源。如果每个人都通过U盘拷贝或者用聊天工具传来传去效率低下不说版本管理也会成为一场噩梦。这时候一个稳定、便捷的局域网共享文件夹就显得至关重要了。Ubuntu 18.04.6作为一个长期支持版本至今仍在许多生产环境和开发机器上稳定运行。虽然它的桌面环境可能不如新版炫酷但其在服务器和作为开发主机的角色上依然非常可靠。在它上面搭建Samba共享意味着你可以在Windows、macOS以及其他Linux机器上像访问本地磁盘一样访问Ubuntu上的文件这种无缝的体验能极大提升工作效率。很多人第一次接触共享文件夹时可能会被“Samba”、“NFS”、“权限”这些术语吓到觉得这是系统管理员的专属领域。其实不然通过图形化工具和简单的命令行配置普通用户完全可以在十分钟内搭建起一个可用的共享。本文将手把手带你完成在Ubuntu 18.04.6上创建Samba共享文件夹的全过程并详细解释每个步骤背后的“为什么”最后还会告诉你在其他系统上究竟该“在哪打开”这个共享文件夹以及过程中可能遇到的坑和解决办法。2. 创建前的核心准备理解Samba与用户权限在动手之前我们必须先理清两个核心概念Samba服务和Linux文件权限。这是保证共享既能被访问又足够安全的基础。2.1 Samba是什么为什么是它简单来说Samba是一套让Linux系统能够理解和响应Windows网络邻居SMB/CIFS协议请求的软件。Windows和macOS原生就支持访问SMB共享因此在Ubuntu上安装并配置Samba就相当于为你的Linux机器安装了一个“Windows文件共享协议兼容层”。这样局域网内的其他设备就能通过熟悉的“网络”位置发现并连接它。为什么不选NFSNFS在纯Linux/Unix环境间共享性能极佳但Windows和macOS需要额外配置才能访问。而Samba的通用性更好是跨平台共享的首选。在Ubuntu 18.04.6上我们将使用Samba这个软件包来实现。2.2 Linux文件权限共享安全的基石这是最容易出问题的地方。Linux有一套严格的用户和文件权限系统User, Group, Others的读r、写w、执行x权限。Samba共享的访问最终会映射到Linux系统的某个用户上。举个例子你打算共享/home/yourname/Projects这个目录。当Windows用户通过Samba连接时Samba服务会以某个Linux用户的身份去读取这个目录。如果这个Linux用户对/home/yourname/Projects没有读或写权限那么即使在Samba配置里允许了访问客户端也会收到“拒绝访问”的错误。因此我们的操作逻辑是确定或创建一个用于共享的Linux系统用户比如专门创建一个用户sambauser或者使用你已有的普通用户。确保要共享的目录对这个用户有适当的权限至少要有读权限如果需要写入则要有写权限。在Samba配置中将这个共享目录与上述Linux用户绑定并设置Samba专用的密码。很多人配置失败问题就出在只配置了Samba却忽略了底层Linux文件系统的权限导致“明明配置都对就是访问不了”。接下来我们就从零开始一步步操作。3. 实战步骤安装、配置与创建共享我们假设你要共享的目录是/srv/share这是一个常用于存放服务相关数据的标准目录并使用一个新建的用户sambashare来管理这个共享。3.1 第一步更新系统与安装Samba首先打开终端CtrlAltT确保软件源是最新的然后安装Samba。sudo apt update sudo apt install samba -y注意-y参数表示自动确认安装避免中途询问。安装完成后Samba服务smbd和nmbd会自动启动。smbd处理文件和打印共享nmbd处理网络名称解析让其他电脑能在网络邻居里看到你的机器。你可以用以下命令检查Samba服务是否在运行sudo systemctl status smbd如果看到active (running)的字样说明服务运行正常。3.2 第二步创建共享目录与设置系统权限现在创建我们计划共享的目录并为其设置正确的所有权和权限。# 创建共享目录 sudo mkdir -p /srv/share # 创建一个专门用于Samba共享的系统用户不创建家目录不允许登录shell sudo useradd -M -s /usr/sbin/nologin sambashare # 将共享目录的所有者改为sambashare用户及其同名用户组 sudo chown sambashare:sambashare /srv/share # 设置目录权限例如755所有者可读可写可执行组用户和其他用户可读可执行 sudo chmod 755 /srv/share参数解释与避坑点-M不创建用户的家目录因为我们只是用它来授权文件访问不需要登录。-s /usr/sbin/nologin禁止该用户通过Shell登录系统增强安全性。chown sambashare:sambashare将目录的用户和用户组都改为sambashare。这意味着sambashare用户对这个目录拥有完全控制权受chmod权限限制。chmod 755这是目录的典型权限。7rwx代表所有者sambashare可读、写、进入5r-x代表同组用户和其他用户可读、可进入但不能写。如果你希望所有访问者都能自由创建删除文件可以设为777但极不安全不推荐在生产环境使用。3.3 第三步配置Samba——核心环节Samba的主配置文件是/etc/samba/smb.conf。在修改前强烈建议先备份。sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup然后使用文本编辑器如nano或vim进行编辑sudo nano /etc/samba/smb.conf滚动到文件末尾添加以下共享定义段落[Share] comment Ubuntu 18.04 Shared Folder path /srv/share browseable yes read only no guest ok no valid users sambashare create mask 0644 directory mask 0755逐行解析配置理解每个参数的意义[Share]共享的名称也就是其他电脑在网络里会看到的文件夹名字。你可以改成[MyProjects]等任何你喜欢的名字。comment共享的描述信息方便管理员识别。path这是最关键的路径必须与你之前创建的目录/srv/share完全一致。browseable yes允许在网络邻居中浏览到这个共享。read only no共享可写。如果只想提供只读共享则设为yes。guest ok no禁止匿名访问。必须提供用户名密码才能访问更安全。valid users sambashare指定允许访问这个共享的Samba用户。这里只允许sambashare用户。create mask和directory mask分别控制客户端新建文件和目录时的默认权限。0644意味着新建文件所有人可读仅所有者可写0755意味着新建目录所有人可读可进入仅所有者可写。这保证了文件的基本安全性。3.4 第四步设置Samba用户密码Samba有一套独立的用户密码数据库。我们需要将系统用户sambashare添加到Samba数据库并为其设置一个密码。这个密码可以与系统登录密码不同并且为了安全建议设置不同的强密码。sudo smbpasswd -a sambashare系统会提示你输入并确认密码。这个密码就是之后从其他电脑连接时需要输入的密码。重要提示smbpasswd -a是“添加”用户。如果你想修改已存在Samba用户的密码直接使用sudo smbpasswd sambashare即可。3.5 第五步重启服务并应用配置修改完配置并添加用户后必须重启Samba服务才能使更改生效。sudo systemctl restart smbd nmbd为了确保配置无误可以使用testparm工具检查配置文件语法sudo testparm如果输出中没有报错并且能看到你定义的[Share]段落的配置信息说明配置文件语法正确。4. 防火墙与网络发现打通访问的“最后一公里”服务配好了但在其他电脑上可能还是找不到或连不上。问题通常出在防火墙和网络发现协议上。4.1 配置UFW防火墙如果启用Ubuntu 18.04默认使用UFW防火墙。Samba需要开放几个端口139和445用于SMB文件共享。137和138用于NetBIOS名称服务网络发现。如果UFW是激活状态可通过sudo ufw status查看需要放行这些端口sudo ufw allow samba这条命令等价于放行上述一组端口。你也可以更精确地只允许来自局域网的访问例如sudo ufw allow from 192.168.1.0/24 to any app samba。4.2 确保网络发现正常工作在Windows的网络邻居里看到Ubuntu电脑依赖于NetBIOS over TCP/IP和WS-Discovery等协议。有时可能需要调整Samba配置中的workgroup设置使其与Windows电脑的工作组一致默认为WORKGROUP。在/etc/samba/smb.conf的[global]部分通常会有类似设置workgroup WORKGROUP server string %h server (Samba, Ubuntu) wins support yes确保workgroup一致并可以尝试将wins support设为yes这有助于在混合网络环境中进行名称解析。5. 客户端访问指南在不同系统上“打开”共享文件夹这是标题中的另一个核心问题“在哪打开共享文件夹”答案因操作系统而异。5.1 在Windows上访问有几种常用方法文件资源管理器直接在地栏输入\\ubuntu_ip_address例如\\192.168.1.100或\\ubuntu_hostname然后回车。系统会弹出凭据窗口输入用户名sambashare和你用smbpasswd设置的密码。网络邻居打开“此电脑”在左侧导航栏点击“网络”。如果发现功能正常你应该能看到你的Ubuntu计算机名。双击它同样需要输入凭据。映射网络驱动器在“此电脑”中点击“计算机”选项卡下的“映射网络驱动器”。选择一个驱动器号如Z:在文件夹栏输入\\ubuntu_ip_address\Share注意Share是你的共享名。勾选“使用其他凭据连接”然后输入用户名密码。这样每次开机后会自动连接。Windows访问常见问题错误0x80070035找不到网络路径通常是因为Windows禁用了SMB 1.0而Ubuntu 18.04默认可能使用更高版本。可以在Ubuntu的smb.conf的[global]部分添加server min protocol SMB2强制使用SMB2或以上协议然后重启smbd。用户名密码错误请确认你输入的是Samba用户名sambashare和用smbpasswd设置的密码而不是Ubuntu的系统登录密码。5.2 在macOS上访问在Finder中按下Command K或点击菜单栏“前往”-“连接服务器...”。在服务器地址中输入smb://ubuntu_ip_address或smb://ubuntu_hostname.local点击“连接”。在弹出的窗口中选择“注册用户”输入名称sambashare和对应的密码。连接成功后会显示可用的共享卷即你的[Share]双击即可打开。5.3 在另一台Linux机器上访问图形界面如GNOME Files打开文件管理器。在侧边栏找到“其他位置”或类似选项。在“连接到服务器”的输入框中输入smb://ubuntu_ip_address/share然后点击连接并输入凭据。命令行挂载 有时需要永久挂载可以编辑/etc/fstab文件添加一行//192.168.1.100/share /mnt/share cifs credentials/home/yourname/.smbcredentials,uid1000,gid1000,iocharsetutf8 0 0其中.smbcredentials是一个包含用户名和密码的纯文本文件内容如下usernamesambashare passwordyour_samba_password务必设置该文件权限为600chmod 600 .smbcredentials以保护密码。然后使用sudo mount -a测试并挂载。6. 高级配置与故障排查深度解析基本的共享搭建完成后你可能会遇到一些特定需求或问题。这里深入探讨几个进阶场景。6.1 多用户与权限精细控制上面我们只用一个sambashare用户。现实中可能需要为不同的人设置不同的访问权限。例如让用户A只能读用户B可以读写。实现方法创建多个系统用户并添加到Sambasudo useradd -M -s /usr/sbin/nologin user_a sudo useradd -M -s /usr/sbin/nologin user_b sudo smbpasswd -a user_a sudo smbpasswd -a user_b修改共享目录的属组和权限# 创建一个用户组比如share_group sudo groupadd share_group # 将user_a和user_b都加入这个组 sudo usermod -aG share_group user_a sudo usermod -aG share_group user_b # 将共享目录的所属组改为share_group并设置setgid位 sudo chown sambashare:share_group /srv/share sudo chmod 2775 /srv/share2775中的2是setgid位它使得在该目录下新建的文件/目录其所属组自动继承父目录的share_group而不是创建者的主要组。修改Samba配置[Share] ... valid users share_group write list user_b read list user_ashare_group表示允许share_group组的所有成员。write list指定有写权限的用户read list指定只有读权限的用户。这样user_a只能读user_b可读写。6.2 匿名共享无密码访问对于打印机共享或完全公开的资料库可能需要允许匿名访问。务必谨慎仅在内网安全环境使用。配置修改[Public] comment Public Anonymous Share path /srv/public browseable yes read only yes # 通常匿名共享设为只读 guest ok yes # 关键允许访客 guest only yes # 可选强制所有访问均为访客 force user nobody # 将所有访客访问映射到系统用户nobody同时需要确保目录/srv/public对系统用户nobody有读权限chmod 755且所有者最好设为root。6.3 系统性故障排查链路当共享无法访问时不要盲目尝试。遵循以下排查链路可以高效定位问题本地基础检查服务状态sudo systemctl status smbd nmbd确认服务在运行。配置语法sudo testparm确保无语法错误。防火墙sudo ufw status查看Samba相关端口是否放行。可临时关闭防火墙测试(sudo ufw disable)测试后记得重新开启。从Ubuntu自身测试 使用smbclient命令从本机连接自己这是最直接的测试。smbclient -L localhost -U sambashare%输入密码后如果能看到Share共享列表说明Samba服务本身配置正确。网络连通性与端口扫描从客户端ping Ubuntu的IP地址确保网络层通畅。在Ubuntu上使用sudo netstat -tlnp | grep smbd查看139和445端口是否在监听。从客户端使用telnet ubuntu_ip 445Windows需开启Telnet客户端功能测试端口是否可达。客户端连接测试与日志分析在客户端尝试连接时注意弹出的具体错误代码和信息。查看Samba日志获取最详细的错误信息。主要日志文件在/var/log/samba/目录下如log.smbd。可以使用sudo tail -f /var/log/samba/log.smbd实时查看连接尝试的日志这对于诊断权限错误尤其有用。权限问题深度检查 这是最常见的问题。请严格按照以下链条检查Samba配置中的path绝对路径是否正确目录是否存在Linux文件系统权限执行ls -ld /srv/share确认目录的所有者和权限。访问用户或force user指定的用户是否对该目录及其父目录有x执行/进入权限对要访问的文件是否有r读权限SELinux/AppArmorUbuntu默认使用AppArmor。虽然对Samba限制不多但极端情况下也可能干扰。可以尝试临时禁用AppArmor对Samba的配置进行测试sudo aa-complain /usr/sbin/smbd。测试后可通过sudo aa-enforce /usr/sbin/smbd恢复。通过这样一层层由内到外、由服务到权限的排查绝大多数共享访问问题都能被定位和解决。搭建共享文件夹不是一劳永逸的事理解其背后的原理和掌握排查方法才能在各种环境下都应对自如。