Samba服务
1、Samba简介
Samba是著名的开源软件项目之一,它在Linux/UNIX系统中实现了微软的SMB/CIFS网络协议,从而使得跨平台的文件共享变得更加容易。在部署Windows、Linux/UNIX混合平台的企业环境时,选用Samba可以很好地解决不同系统之间的文件互访问题。
SMB协议(Server Message Block 服务消息块协议),它能被用于Web连接和客户端与服务器之间的信息沟通。SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。
CIFS协议(Common Internet File System 通用互联网文件系统协议),CIFS是SMB的另一种实现;CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。
在Samba项目出现之前,Windows并不能直接与Linux/UNIX系统进行文件系统共享;Linux中Samba服务使用NetBIOS(网络的基本输入输出系统),来提供浏览服务显示网络上的共享资源列表的功能。
2、Samba服务组成
Samba服务器提供smbd、nmbd两个服务程序,分别完成不同的功能。
smbd:其主要功能就是用来管理Samba服务器上的共享目录、打印机等,主要是针对网络上的共享资源进行管理的服务。当要访问服务器时,要查找共享文件,这时我们就要依靠smbd这个进程来管理数据传输。
nmbd:其功能是进行NetBIOS名解析,并提供浏览服务显示网络上的共享资源列表。
进程 | 对应协议 |
---|---|
smbd | 对应smb/cifs协议 |
nmbd | 对应netbios协议 |
winbindd+ldap | 对应Windows AD活动目录 |
3、Samba监听端口
TCP | UDP |
---|---|
139 | 137 |
445 | 138 |
smbd服务程序负责监听TCP协议的139端口(SMB协议)、445端口(CIFS协议);
nmbd服务程序负责监听UDP协议的137、138端口(NetBIOS协议)。
4、Samba服务配置文件
Samba服务的配置文件位于/etc/samba/目录,其中smb.conf是主配置文件。
smb.conf配置文件分分为三个部分:
- [global] 全局设置:这部分配置项的内容对整个samba服务器都有效。
- [homes] 宿主目录共享设置:设置Linux用户的默认共享,对应用户的宿主目录。当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的家目录中。
- [printers] 打印机共享设置:若需要共享打印机设备,可以在这部分进行配置。
若需要在smb.conf文件中设置新的共享目录,只需要增加一段如“[myshare]”添加共享设置即可,其中“myshare”为用户自定义的共享名。新的共享文件夹设置可以参考“[homes]”和“[printers]”部分的内容。
4.1 smb.conf常用配置参数
参数 | 作用 |
---|---|
workgroup | 表示设置工作组名称 |
server string | 表示描述samba服务器 |
comment | 表示设置对应共享目录的注释,说明信息,即文件共享名 |
path | 表示共享目录的路径 |
security | 表示设置安全级别,其值可为share、user、server、domain |
passdb backend | 表示设置共享帐户文件的类型,其值可为tdbsam(tdb数据库文件)、ldapsam(LDAP目录认证)、smbpasswd(用户名密码,兼容旧版本samba密码文件) |
browseable | 表示是否允许用户看到此共享 |
public | 表示设置是否允许匿名用户访问 |
guest ok | 表示设置是否所有人均可访问共享目录 |
valid users | 设置可以访问的用户和组,例如 valid users = root,@root |
hosts deny | 设置拒绝哪台主机访问,例如 hosts deny = 192.168.72.1 |
hosts allow | 设置允许哪台主机访问,例如 hosts allow = 192.168.72.2 |
read only | 表示设置目录只读 |
writable | 表示设置目录是否可写 |
write list | 表示设置允许写的用户和组,组要用@表示,例如 write list = root,@root |
printable | 表示设置是否为打印机 |
4.2 Samba共享用户
samba服务在使用时需要配置用户名和密码来进行认证,认证的用户可使用系统中的用户也就是/etc/passwd中的用户,为了安全起见并不会使用系统中用户的密码作为认证密码;Samba服务自有密码文件通过smbpasswd -a USERNAME命令设置.
smbpasswd
-a Sys_User #添加系统中的用户为samba用户并为其设置密码
-d #禁用samba用户
-e #启用samba用户
-x #删除samba用户
[root@server ~]# yum -y install samba //安装samba之后才会有smbpasswd命令
[root@server ~]# useradd hzz
[root@localhost ~]# smbpasswd -a hzz
New SMB password:
Retype new SMB password:
Added user hzz.
5、Samba服务配置
5.1 服务端配置
#关闭防火墙,关闭selinux,永久关闭selinux则修改/etc/selinux/config配置文件
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# setenforce 0
#服务端安装samba服务
[root@server ~]# yum -y install samba
#开启服务并设置开机自启
[root@server ~]# systemctl start smb nmb
[root@server ~]# systemctl enable smb nmb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.
#创建一个共享目录
[root@server ~]# mkdir /hzz
#编辑smb.conf配置文件实现/hzz目录共享
[root@server ~]# vim /etc/samba/smb.conf
[hzz]
comment = hzz
path = /hzz
security = user
passdb backend = smbpasswd
browseable = yes
guest ok = no
valid users = hzz
writable = no
write list = hzz
#配置结束后用testparm命令测试配置文件是否有语法错误
[root@server ~]# testparm
Load smb config files from /etc/samba/smb.conf
Global parameter security found in service section!
Global parameter passdb backend found in service section!
Loaded services file OK.
Server role: ROLE_STANDALONE
#创建hzz用户,添加至samba共享用户
[root@server ~]# useradd hzz
[root@server ~]# smbpasswd -a hzz
New SMB password:
Retype new SMB password:
Added user hzz.
#给共享目录设置权限
[root@server ~]# setfacl -m u:hzz:rwx /hzz/
#重启服务
[root@server ~]# systemctl restart smb nmb
5.2 客户端配置
#使用交互式数据访问
smbclient -L HOST -U USERNAME #查询共享资源
smbclient //SERVER/shared_name -U USERNAME #访问共享资源
#在客户机安装samba-client包
[root@client ~]# yum -y install samba-client
#查看samba服务器有哪些共享资源
[root@client ~]# smbclient -L 192.168.52.156 -U hzz
Enter SAMBA\hzz's password:
Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2]
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.6.2)
tom Disk Home Directories
Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2]
Server Comment
--------- -------
Workgroup Master
--------- -------
#交互式访问某共享资源
[root@client ~]# smbclient //192.168.52.156/hzz -U hzz
Enter SAMBA\hzz's password:
Domain=[LOCALHOST] OS=[Windows 6.1] Server=[Samba 4.6.2]
smb: \> ls
. D 0 Sat Aug 4 13:52:14 2020
.. D 0 Sat Aug 4 12:59:42 2020
17811456 blocks of size 1024. 16665456 blocks available
smb: \> quit #quit退出
#基于挂载的方式访问
mount -t cifs //SERVER/shared_name /挂载到本地的什么目录 -o username=USERNAME,password=PASSWORD
#安装cifs
[root@client ~]# yum -y install cifs-utils
#创建挂载点,挂载
[root@client ~]# mkdir /mnt/hzz
[root@client ~]# mount -t cifs //192.168.52.156/hzz /mnt/hzz -o username=hzz,password=1
#挂载完成之后查看
[root@client ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 17G 1.1G 16G 6% /
devtmpfs 478M 0 478M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.8M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 3.8G 3.8G 0 100% /mnt
//192.168.52.156/hzz 17G 5.1G 12G 30% /mnt/hzz/
#永久挂载
[root@client ~]# vim /etc/fstab
//192.168.52.156/hzz /mnt/hzz/ cifs multiuser,username=hzz,password=1,sec=ntlmssp,_netdev 0 0
#挂载查看
[root@client ~]# mount -a
[root@client ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 17G 1.2G 16G 7% /
devtmpfs 901M 0 901M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.6M 904M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 183M 0 183M 0% /run/user/0
//192.168.52.156/hzz 17G 5.1G 12G 30% /mnt/hzz/
5.3 测试
#在客户端进入挂载点,创建文件
[root@client ~]# cd /mnt/hzz
[root@client hzz]# touch a b
[root@client hzz]# ls
a b
#在服务端查看,文件存在
[root@server ~]# cd /hzz/
[root@server hzz]# ls
a b