linux 上使用 samba 共享文件夹给 windows

本文详细介绍了如何在Windows上使用Samba协议访问Linux服务器的文件,包括安装、配置Samba服务、设置用户权限、安全级别以及解决Windows访问时可能出现的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想要在 Windows 客户端上像访问本地文件一样来访问 Linux 服务器上的文件,除了 rsync、sftp 等工具外能近似满足该需求,最经典、最方便的方式还是使用 Samba。本篇介绍如何使用 Samba 共享 Linux 文件给 Windows。

简介

Samba 是 Linux 和 Unix 系统上实现 smb 协议的一个软件,分为服务端和客户端。smb 是一种在局域网上共享文件和打印机的一种通信协议,为局域网内的不同计算机之间提供文件和打印机等资源的共享服务。

Samba 监听端口有 TCP 139、445,UDP 137、138,其中 TCP 端口对应的服务是 smbd 服务,提供对服务器中文件、打印资源的共享访问;UDP 端口对应的服务是 nmbd 服务,提供基于 NetBIOS 主机名称的解析。

Samba 的使用用户都是系统用户,在 /etc/passwd 中,密码通过如下命令设置:

# username 取值 /etc/passwd,设置的密码可以与系统用户密码不同
smbpasswd -a username
# -a 表示添加系统用户为 Samba 用户并设置访问密码
# -d 表示禁用 Samba 用户
# -e 表示启用 Samba 用户
# -x 表示删除 Samba 用户

Samba 安全级别有3个,分别是 user, server, domain,其中 user 用于本地验证,server 用于由另一台制定的服务器对用户身份进行认证,domain 表示由域控进行身份验证。

安装

BASH

1
2
sudo apt update
sudo apt install samba

查看运行情况:

BASH

1
sudo systemctl status smb.service

设置开机启动:

BASH

1
sudo systemctl enable smb.service

使用

添加需要共享的文件夹信息到配置文件:

BASH

1
2
3
4
5
6
7
8
9
cat >> /etc/samba/smb.conf << EOF
[power]
comment = power
path = /
browseable = yes
guest ok = yes
writable = yes
public = no
EOF

这里我把服务器的根目录添加到共享中,并改名为 power,下面添加 Samba 用户并设置一个访问共享文件夹的密码:

BASH

1
smbpasswd -a jinzhongxu

验证配置文件是否有问题:

BASH

1
testparm

如果一切正常,此时,Windows 就可以访问该服务器的共享文件了。

更多参数设置如下:

参数作用
workgroup表示设置工作组名称
server string表示描述 samba 服务器
security表示设置安全级别,其值可为 share、user、server、domain
passdb backend表示设置共享帐户文件的类型,其值可为 tdbsam(tdb数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(兼容旧版本 samba 密码文件)
comment表示设置对应共享目录的注释,说明信息,即文件共享名
browseable表示设置共享是否可见
writable表示设置目录是否可写
path表示共享目录的路径
guest ok表示设置是否所有人均可访问共享目录
public表示设置是否允许匿名用户访问
write list表示设置允许写的用户和组,组要用 @ 表示,例如 write list = root,@root
valid users设置可以访问的用户和组,例如 valid users = root,@root
hosts deny设置拒绝哪台主机访问,例如 hosts deny = 192.168.1.100
hosts allow设置允许哪台主机访问,例如 hosts allow = 192.168.1.200
printable表示设置是否为打印机

Windows 访问

在 Windows 上使用 win + r 打开运行,输入服务器 IP 地址(这里假设服务器 IP 是 192.168.1.12):

BASH

1
2
# 注意 \\
\\192.168.1.12

或者在资源管理器地址栏输入上面的地址:\\192.168.1.12。然后会弹出一个登录界面,输入设置的 samba 用户 jinzhongxu,然后输入上面设置的密码即可。建议保存凭证和固定共享文件夹到快速访问,下次自动登录。

QA

实际使用中遇到的一些问题:

  1. windows 输入访问地址后,提示:“不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接”,解决方法如下,打开 CMD:

    BASH

    1
    2
    3
    4
    
    # 查看建立的链接
    net use
    # 端口所有链接
    net use * /del /y
    
    然后重新访问。
  2. 如果能够访问服务器图形界面,也可以在需要共享文件夹上右键进行共享。此时,可不用在 Samba 配置文件中添加配置信息。
  3. 对于用户家目录,如 /home/jinzhongxu,不要改变该文件夹的权限,否则将导致通过密钥 ssh 不成功。
### 映射 Windows 文件为网络共享文件 为了在 Windows 上将本地文件映射为网络共享文件,可以通过以下方法完成: #### 方法一:使用“此电脑”中的“映射网络驱动器” 1. 打开“此电脑”,点击左侧菜单栏的“计算机”选项下的“映射网络驱动器”。选择想要分配给新连接的字母。 2. 输入目标 Ubuntu 机器上的共享文件路径,格式如下 `\\<Ubuntu_IP>\shared_folder_name`[^1]。例如,如果 IP 地址是 192.168.1.10 并且共享文件名为 `data`,则应输入 `\\192.168.1.10\data`。 3. 勾选“登录时重新连接”,以便每次启动系统自动建立连接。 4. 如果需要身份验证,则提供具有适当权限的有效用户名和密码。 #### 方法二:命令提示符方式创建持久化映射 对于更高级的需求或希望脚本自动化处理的情况,可以在命令行工具中执行相应指令来设置永久性的映射关系: ```batch net use Z: \\192.168.1.10\shared_folder /persistent:yes /user:<username> <password> ``` 上述代码片段展示了如何利用 net use 命令来进行操作,其中 `<username>` 和 `<password>` 需要替换为目标 Linux 主机的实际凭证信息;而 `Z:` 表示所指定的新逻辑盘符位置[^5]。 #### 注意事项 - 确认防火墙允许 SMB/CIFS 协议通信。 - 双方操作系统间的时间同步非常重要,时间差异过大可能导致认证失败等问题。 - 对于跨平台环境(如 Win-Linux),建议安装并配置 Samba 服务端软件以简化资源共享过程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值