Samba是什么
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源,samba不仅可以实现Linux系统之间的文件共享还可以实现linux系统与Windows系统之间的文件共享问题。
Samba的工作原理
Samba服务功能强大,这与其通信基于SMB/CIFS协议有关。SMB不仅提供目录和打印机共享,还支持认证、权限设置。在早期,SMB运行于NBT协议(NetBIOS over TCP/IP)上,使用UDP协议的137、138及TCP协议的139端口;后期SMB经过开发,可以直接运行于TCP/IP协议上,没有额外的NBT层,使用TCP协议的445端口。
Samba的工作流程主要为四个阶段:
一:协议协商
客户端在访问Samba服务器时,首先由客户端发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。服务器在接收到请求信息后开始响应请求,并列出希望使用的协议版本,选择最优的SMB类型。如果没有可使用的协议版本则返回oXFFFFH信息,结束通信。
二:建立连接
当SMB协议版本确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX请应答数据报来允许或拒绝本次连接。
三:访问共享资源
当客户端和服务器完成了协商和认证之后,它会发送一个Tcon或SMB TconX数据报并列出它想访问网络资源的名称,之后服务器会发送一个SMB TconX应答数据报以表示此次连接是否被接受或拒绝。
四:断开连接
连接到相应资源,SMB客户端就能够open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。
Samba相关进程
Samba服务是由两个进程组成,分别是nmbd和smbd。
nmbd:其功能是进行NetBIOS名解析,并提供浏览服务显示网络上的共享资源列表。
smbd:其主要功能就是用来管理Samba服务器上的共享目录、打印机等,主要是针对网络上的共享资源进行管理的服务。当要访问服务器时,要查找共享文件,这时我们就要依靠smbd这个进程来管理数据传输。
samba服务器的安全模式
samba服务器有share、user、server、domain和ads 五种安全模式,用来适应不同的企业服务器需求。
(1)share安全级别模式
客户端登录samba服务器,不需要输入用户名和密码就可以浏览samba服务器的资源,适用于公共的共享资源,安全性差,需要配合其他权限设置,保证samba服务器的安全性。
(2)user安全级别模式
客户端登录samba服务器,需要提交合法帐号和密码,经过服务器验证才可以访问共享资源,服务器默认为此级别模式。
(3)server安全级别模式
客户端需要将用户名和密码,提交到指定的一台samba服务器上进行验证,如果验证出现错误,客户端会用user级别访问。
(4)domain安全级别模式
如果samba服务器加入windows域环境中,验证工作服将由windows域控制器负责,domain级别的samba服务器只是成为域的成员客户端,并不具备服务器的特性,samba早期的版本就是使用此级别登录windows域滴。
(5)ads安全级别模式
当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能。
- 环境准备与软件包安装
[root@localhost ~]# systemctl status firewalld #查看防火墙有没有关
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2023-06-06 01:50:39 CST; 1 weeks 1 days ago
Docs: man:firewalld(1)
Main PID: 989 (firewalld)
Tasks: 2
CGroup: /system.slice/firewalld.service
└─989 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
6月 06 01:50:39 localhost.localdomain systemd[1]: Starting firewalld - dynam...
6月 06 01:50:39 localhost.localdomain systemd[1]: Started firewalld - dynami...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl stop firewalld #关闭防火墙
[root@localhost ~]# setenforce 0 #临时关闭
[root@localhost ~]# yum -y install samba #安装软件
2.配置文件
[root@localhost ~]# vim /etc/samba/smb.conf
[global] 全局参数配置
workgroup = MYGROUP 工作组名称
security = user 安全认证方式(user、share、domain、server)
3.配置一个所有人可以用的共享文件,在配置文件末尾编写
[public]
comment = every one can visit this dir #设置共享注译
path = /var/samba/public #设置共享目录的物理路径
writable = yes #是否允许写入
browseable = yes #是否允许浏览
guest ok = yes #是否允许来宾访问
create mode = 0777 #人创建文件的权限777
directory mode = 0777 #人创建目录的权限777
4. 创建用户和文件
[root@localhost ~]# mkdir /var/samba/public -p #创建共享文件
[root@localhost ~]# chmod 777 /var/samba/public #给文件权限
[root@localhost ~]# smbpasswd -a qwe #创建samba用户
New SMB password:
Retype new SMB password:
Added user qwe.
[root@localhost ~]#
5.启动服务
[root@localhost ~]# systemctl start smb
测试
上传和写入
6.我们在做一个安全一点的共享文件
所有人上传和写入太危险了和没有人管理太乱了,所以我们做一个有人管理的
[share02]
comment = smbuser01's dir
path = /var/samba/share02
guest ok = no
writable = yes
browseable = yes
valid users = smbuser01 #指定哪个用户登录这个文件
创建文件和用户
[root@localhost ~]# useradd -s /sbin/nologin smbuser01 #nologin:不允许登录
[root@localhost ~]# mkdir -p /var/samba/share02
[root@localhost ~]# chown smbuser01:smbuser01 -R /var/samba/share02/ #share02分配给smbusera01管理
重启服务
[root@localhost ~]# smbpasswd -a smbuser01
New SMB password:
Retype new SMB password:
Added user smbuser01.
[root@localhost ~]# systemctl restart smb
测试
出现这种情况需要把上一个用户断开
上传和写入
linux的共享
yum -y install samba-client cifs-utils
smbclient //192.168.1.131/share01
mount -t cifs //192.168.1.131/share02 /media -o username=smbuser01,password=****