想要在 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 中,密码通过如下命令设置:

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

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

安装

1
2
sudo apt update
sudo apt install samba

查看运行情况:

1
sudo systemctl status smb.service

设置开机启动:

1
sudo systemctl enable smb.service

使用

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

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 用户并设置一个访问共享文件夹的密码:

1
smbpasswd -a jinzhongxu

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

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):

1
2
# 注意 \\
\\192.168.1.12

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

QA

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

  1. windows 输入访问地址后,提示:“不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接”,解决方法如下,打开 CMD:
    1
    2
    3
    4
    # 查看建立的链接
    net use
    # 端口所有链接
    net use * /del /y
    然后重新访问。
  2. 如果能够访问服务器图形界面,也可以在需要共享文件夹上右键进行共享。此时,可不用在 Samba 配置文件中添加配置信息。
  3. 对于用户家目录,如 /home/jinzhongxu,不要改变该文件夹的权限,否则将导致通过密钥 ssh 不成功。

参考文献

  1. Samba 服务详解