Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
简单来说就是实现了linux与windows机器之间的资源互享
samba提供了两个功能,一个是smb,也就是samba核心的服务功能,提供服务器端和客户端之间的对话。监听在139
以及445
端口上。 一个是nmb服务,提供netbios服务,主要用来名字解析功能。windows可以通过netbios将名字解析成ip地址。监听在137
和138
端口上。如果netbios没有启动,将会通过ip地址定位机器
服务端
[root@localhost ~]# yum install -y samba
客户端
[root@localhost ~]# yum install -y samba-client
[root@localhost ~]# smbclinet -L 192.168.1.142
bash: smbclinet: 未找到命令...
相似命令是: 'smbclient'
[root@localhost ~]# smbclient -L 192.168.1.142
Enter SAMBA\root's password:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk 远程管理
C$ Disk 默认共享
D$ Disk 默认共享
E$ Disk 默认共享
F$ Disk 默认共享
IPC$ IPC 远程 IPC
Users Disk
截图 Disk
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 192.168.1.142 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Failed to connect with SMB1 -- no workgroup available
# $号表示在windows端隐藏共享,不显示。
samba的配置在etc下。常用设置如下
[root@localhost ~]# cat /etc/samba/smb.conf
[global]
workgroup = SAMBA # 工作组
security = user # samba认证方式,使用user即可,默认选项,使用smb用户
; netbios name = MYSERVER #如果需要用名字netbios功能,需要取消注释这项
; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 #允许通过哪些地址访问
; hosts allow = 127. 192.168.12. 192.168.13. #允许哪些地址来访问
log file = /var/log/samba/log.%I #定义日志文件位置
log level = 2 #日志记录级别。 两项同时设置才能穷用日志功能
max log size=50 #日志文件大小,到指定的大小之后覆盖写入
passdb backend = tdbsam #数据库格式
printing = cups
printcap name = cups
load printers = yes
cups options = raw
#共享配置
; [public]
; comment = Public Stuff 描述信息
; path = /home/samba 共享目录
; public = yes 是否被guest访问的共享,默认no,和guest ok 类似
; writable = no 是否有写权限
; read only=no 和writeable=yes一样的效果
; printable = no
; write list = +staff 拥有写权限的列表
; valid users 特定用户才能访问
[homes] 用户的家目录共享 如果不想访问到用户的家目录,可以注释掉
[printers] 定义打印机资源和服务
[sharename] 自定义的共享目录配置
1)服务器端创建文件共享
[root@localhost data]# cat /etc/samba/smb.conf
[ydong]
comment = Ydong Share
path = /data/ydong
writeable = yes
2)如果想访问samba服务,需要samba自己创建的用户
samba用户必须是linux存在的用户。
[root@localhost ~]# getent passwd smb{1,2,3}
smb1:x:2003:2003::/home/smb1:/bin/bash
smb2:x:2004:2004::/home/smb2:/bin/bash
smb3:x:2005:2005::/home/smb3:/bin/bash
[root@localhost ~]# smbpasswd -a smb1
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
No builtin backend found, trying to load plugin
New SMB password:
Retype new SMB password:
Added user smb1.
添加三个用户,都使用smbpasswd
3)查看samba用户
[root@localhost ~]# pdbedit -L
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
No builtin backend found, trying to load plugin
smb2:2004:
smb1:2003:
smb3:2005:
删除的话使用smbpasswd -x smb1
4)重新服务端服务,在windows上访问
默认访问用户家目录。
5)linux端访问共享
[root@localhost ~]# smbclient -L 192.168.43.166 -U smb1
Enter SAMBA\smb1's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
ydong Disk Ydong Share
IPC$ IPC IPC Service (Samba 4.9.1)
smb1 Disk Home Directories
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
6)进入共享文件进行操作
如果要进行操作的话,需要对权限进行设置,默认的话其他用户没有写权限
[root@localhost ~]# ll -d /data/ydong
drwxr-xr-x 2 root root 24 3月 21 17:10 /data/ydong
[root@localhost ~]# ll -d /data/ydong
drwxrwxrwx 2 root root 24 3月 21 17:10 /data/ydong
linux端进行文件操作
[root@localhost ~]# smbclient //192.168.43.166/ydong -U smb1
Enter SAMBA\smb1's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Mon Mar 23 02:59:04 2020
.. D 0 Sat Mar 21 17:10:33 2020
ydong.home N 11 Sat Mar 21 17:10:54 2020
f1.txt A 0 Mon Mar 23 02:59:02 2020
20961280 blocks of size 1024. 20895480 blocks available
smb: \> put anaconda-ks.cfg
putting file anaconda-ks.cfg as \anaconda-ks.cfg (33.6 kb/s) (average 33.6 kb/s)
7)基于用户访问控制
[root@localhost ~]# cat /etc/samba/smb.conf
valid user = @staff # @,+都可以表示组内的用户可以访问
# valid user = username #显式指定某个用户可以访问
browseable = no # 是否允许所有用户浏览,默认为yes
[root@localhost ~]# usermod -aG staff smb1
[root@localhost ~]# usermod -aG staff smb2
这样只能smb1和smb2访问
同FTP虚拟用户一样,可以单独的为每个用户设置不同的权限。samba也一样
1)在smb.conf中添加一个选项
config file = /etc/samba/conf.d/%U
# 指明放指令的地方,%U是当前用户的用户名,也就是同用户名一样的文件
2)在/etc/samba/conf.d/创建同用户名的文件
[root@localhost ~]# mkdir /etc/samba/conf.d
[root@localhost ~]# cat /etc/samba/conf.d/smb1
[smb1]
comment = smb1 share
path = /data/smb1
writeable = no
[root@localhost ~]# cat /etc/samba/conf.d/smb2
[smb2]
comment = smb2
path = /data/smb2
writeable = yes
[ydong]
comment = Ydong Share
path = /data/ydong
writeable = yes
#smb1 smb2访问就只显示/data/smb1和/data/smb2 smb3访问ydong