Samba文件共享
# Samba介绍
# 简介
Samba是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享。
Samba基于C/S架构的SMB(又名CIFS)协议,它能够在网络上支持SMB协议的主机之间共享文件夹或打印机的通信协议。
Samba既可以用于Windows与Linux之间的文件共享,也可以用于Linux系统之间的资源共享。但由于NFS可以很好的完成Linux系统之间的数据共享,因而 Samba较多的用在了Linux与Windows之间的数据共享上面。
# 相关软件包
Samba
:服务端软件包
Samba-client
:客户端工具包
- 该软件包为SMB客户端工具,它可以操作SMB服务器上的文件资源、打印机资源。
Samba-common
:公共文件包
# 服务组成
Samba服务由smbd和nmbd两个守护进程组成,两个进程的启动脚本相互独立。
# smbd
该进程负责验证用户身份、建立会话进程、提供对文件系统和打印机的访问机制,只有smbd进程启动,才能实现网络文件共享。
smbd进程是Samba的核心,对应TCP/445端口,他用于实现smb/cifs协议。
# nmbd
该进程对应TCP/139、UDP/137、UDP/138端口,负责提供NetBIOS主机名称解析服务,实现Windows中通过主机名互相通信的功能。
启动该进程后客户端可以通过Linux系统共享的工作组名称访问共享文件,否则只能通过IP地址来访问共享的文件。
# 相关文件
smb启动脚本
/etc/rc.d/init.d/smb start|stop|restart|status
nmb启动脚本
/etc/rc.d/init.d/nmb start|stop|restart|status
日志文件目录
/var/log/samba/
主配置文件路径
/etc/samba/smb.conf
# 配置文件
# 介绍
/etc/samba/smb.conf是Samba服务的主要配置文件,由3个标准节[global]、[homes]、[printers]和若干个自定义节组成。
- [global] 定义Samba服务的全局环境配置。
- [homes] 定义共享用户主目录。
- [printers] 定义打印机共享配置。
- [共享名称] 定义用户自定义的共享目录。
# 常用配置
[global]
[global]
# 工作组名称
workgroup = WORKGROUP
# 指定SMB端口号
smb ports = 4450
# 服务器介绍信息,可不填,%v表示Samba的版本号
server string = Samba Server Version %v
# 定义NetBIOS名称,如果不填则会使用服务器DNS名称的第一部分。该名称和workgroup配置的名字不能一致
netbios name = smbserver
# 指定监听的网卡,可以写网卡名或IP地址
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
# 允许访问的客户端,多个参数以空格隔开,可以指定IP或网段。hosts deny则相反
hosts allow = 127. 192.168.1. 192.168.10.1
# 指定最大连接数,0表示不限制
max connections = 0
# 设置闲置会话关闭时间,会关闭没有打开任何文件的会话。单位是分钟,0表示关闭。
deadtime = 0
# 设置日志文件路径
# %m代表客户端名,表示每台客户端单独生成一个日志文件
log file = /var/log/samba/log.%m
# 指定单个日志最大大小,单位为kB,0代表不限制
max log size = 50
# 指定用户访问的安全验证方式:
# share - 共享方式,无需任何验证可直接访问。
# user - 口令方式(默认),通过账号和密码进行验证,可以通过命令创建用户。
# server - 代理验证方式,通过其他远程主机(WindowsNT/2000或SambaServer)对账号密码进行统一验证,如果认证失败将使user模式进行验证。
# domain - 域方式,使用主域控制器(PDC)进行身份认证。
security = user
# 指定用户后台类型:
# smbpasswd - 使用smbpasswd明文存储用户密码,客户端可以用该密码进行访问,密码文件在/etc/samba目录下。
# tdbsam - 使用数据库文件来建立用户数据库,我们可以使用pdbedit命令管理用户,数据库文件在/etc/samba/passdb.tdb。
# ldapsam - 使用LDAP账户管理方式验证用户,首先要建立LDAP服务,然后设置值为"ldapsam:ldap://服务器地址"
passdb backend = tdbsam
# 是否加密认证密码,默认开启
encrypt passwords = yes
# 指定用户密码文件路径
smb passwd file = /etc/samba/smbpasswd
# 指定用户名映射文件路径,内容格式如:root = administrator admin
username map = /etc/samba/smbusers
# 设置Socket选项,优化传输速度
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
# 是否共享打印机
load printers = no
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
[homes]
# 描述信息
comment = Home Directories
# 指定共享信息是否在"网上邻居"可见
browseable = no
# 定义是否可以执行写入操作,与"read only"相反
writable = yes
2
3
4
5
6
7
8
[printers]
# 打印机描述信息
comment = All Printers
# 共享文件实际路径
path = /var/spool/samda
# 指定共享信息是否在"网上邻居"可见
browseable = no
# 是否公开访问
guest ok = no
# 定义是否可以执行写入操作,与"read only"相反
writable = yes
# 是否可打印
printable = yes
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[自定义共享名]
# 描述信息
comment = Comment String
# 共享目录路径
path = /data/personal/
# 表示设置是否允许匿名用户访问
public = no
# 表示设置是否所有人均可访问共享目录
guest ok = no
# 是否允许可写
writable = yes
# 是否只读
read only = no
# 设置允许写的用户和组,可为用户名或组名
write list = root,@root
# 设置允许访问的用户和组,可为用户名或组名
valid users = root,@root
# 允许的主机,可指定IP或网段
hosts allow = 192.168.10.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Samba命令
# smbclient
用于交互式的数据访问SMB共享盘。
# smbpasswd
用于管理Samba独立账号密码。
-a 用户名
:建立Samda用户并交互式设置密码。
-x 用户名
:删除Samda用户。
-d 用户名
:禁用Samda用户。
-e 用户名
:启用Samda用户。
# pdbedit
用于管理SMB账户信息数据库。
-a 用户名
:建立Samda用户。
-x 用户名
:删除Samda用户。
-L
:列出用户列表。
-Lv
:列出详细用户列表。
# testparm
用于测试配置文件是否有语法错误,以及显示最终生效的配置。
# Samba服务端部署
# 1.安装Samba服务
yum install -y samba samba-common
# 2.创建用户密码
# 按提示输入密码
pdbedit -a -u root
2
Samba默认使用用户口令认证+数据库存储,数据库存储要求添加的用户已经在系统中创建,不要求用户类型,可以是真实用户或虚拟用户。
# 3.创建共享目录
#创建目录
mkdir /data/personal/
# 修改权限
chown -R harmoniar.harmoniar /data/personal/
2
3
4
# 4.修改配置
vim /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
log file = /var/log/samba/%m.log
max log size = 1000
# 外网访问需要修改端口号,有些运营商会禁用445端口
smb ports = 4450
security = user
passdb backend = tdbsam
[personal]
comment = Personal Directories
path = /data/personal/
public = no
writable = yes
valid users = share
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 5.重启smb服务
systemctl restart smbd && systemctl enable smbd
# Windows指定端口连接文件共享
# 1.Windows检查445是否被占用
netstat -ant | findstr 445
如果在监听则执行services.msc打开服务列表,找到Server服务将其禁用,然后重启。
# 2.添加本地445端口到服务器4450端口的转发
netsh interface portproxy add v4tov4 listenport=445 listenaddress=127.0.0.1 connectport=4450 connectaddress=lalafell.cn
# 3.检查是否执行成功
netsh interface portproxy show all