网络服务之SAMBA
1、Samba的介绍
概述:
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同操作系统的计算机之间提供文件及打印机等资源的共享服务。SMB 协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。
samba与vsftpd的对比
- vsftpd的优缺点
- 优点:文件传输:应用层协议、可以跨平台
- 缺点:只能实现文件传输、无法实现文件系统挂载;无法直接修改服务器端的文件
- samba:
- 使用smb/cifs协议:可以跨平台、可以实现文件系统挂载、可以实现服务器端修改文件
smb协议和cifs之间的关系
随着 Internet 的流行,Microsoft 希望将这个协议扩展到 Internet 上去,成为 Internet 上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的 SMB 协议进行整理,重新命名为CIFS(Common Internet File System),它使程序可以访问远程 Internet 计算机上的文件并要求此计算机提供服务。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS 是公共的或开放的 SMB 协议版本,并由 Microsoft 使用。SMB 协议在局域网上用于服务器文件访问和打印的协议。
2、samba服务讲解
基础信息:
- 协议:smb/cifs协议
- 服务:smb(实现资源共享、权限认证)
- 使用TCP协议—>端口号:139/445
- 配置文件路径:/etc/samba/
- 主配置文件:smb.conf
- 别名配置文件:smbusers
登陆模式(安全级别)
- 匿名验证:share
- 本地用户验证:user(Samba服务器默认的安全级别,用户在访问共享资源之前必须提供用户名和密码进行验证)
- tdbsam:使用一个数据库文件来验证,涉及的数据库文件:passdb.tdb
- pdbedit -a 用户名:新建samba用户
- pdbedit -x 用户名:删除用户
- pdbedit -L 列出samba用户列表
常见的配置参数
全局配置:[global]用于定义Samba服务器的总体特性,其配置项对所有共享资源生效
workgroup = WORKGROUP
#设定 Samba Server 所要加入的工作组或者域。
server string = Samba Server Version %v
#设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
interfaces = lo eth0 192.168.75.130/24
#设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
hosts allow = 127. 192.168.1. 192.168.10.1
#表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。
hosts deny = 127. 192.168.1. 192.168.10.1
#hosts deny 与hosts allow 刚好相反(二选一)。
#举例说明:
hosts allow=172.17.2. EXCEPT172.17.2.50
#表示容许来自172.17.2.*.*的主机连接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
#表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
log file = /var/log/samba/log.%m
#设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。
max log size = 50
#设置Samba Server日志文件的最大容量,单位为kB,0代表不限制
security = user
#设置用户访问Samba Server的验证方式。
passdb backend = tdbsam
load printers = yes/no
#设置是否在启动Samba时就共享打印机
普通的设置
[homes]用于设置用户宿主目录的共享属性(特殊共享)
[homes] #共享名(特殊共享,泛指每个用户对应的家目录)
comment = Home Directories #共享描述
browseable = no #共享是否可被查看
writable = yes #共享是否可写
;valid users = %S #允许访问该共享的用户
#例如:valid users = bob,@bob(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@组名”表示。)
[printers]用于设置打印机共享资源的属性(特殊共享,共享打印设备,现在基本不用)
[printers] #共享名
comment = All Printers #共享描述
path = /var/spool/samba #共享路径
browseable = no #共享是否可被查看
guest ok = no #是否可以匿名访问,类似于public
writable = no #是否可写
printable = yes #是否可以打印
[自定义]自定义共享区域
[自定义] #共享名
comment = the share is xbz #共享描述
path = /share/zdy #共享路径
public = yes #是否可以匿名访问,类似于guest ok
browseable = yes #共享是否可被查看
writable = yes #是否可写(同时设置目录的W)
配置文件检查工具
- testparm :若显示"Loaded services file OK."信息表示配置文件的语法是正确的
- -v:显示samba所支持的所有选项
访问控制
写入权限的控制方式也是受到两方面的影响
- 一个:配置文件,samba的配置文件需要开放权限
- writable = yes
- setfacl 或者是 chmod 777
- 第二个:本来目录的权限也要设置
- 文件系统开启,配置文件严格控制
- read only = yes
- wirite list = 用户 或者是@用户组
服务的启动:
- 设置启动,关闭、重启等等—>systemctl
- 开机自启动管理
登陆方式的讲解
- linux登陆:
- smbclient -U 用户名 -L //服务器ip —>用于查看服务器共享的情况
- smbclient -U 用户名 -L //服务器ip/共享目录–>直接登陆服务器查看
- windows系统登陆:
- window的共享功能
- 控制面板–>程序–>启用和关闭windows功能–>找到smb
- \双斜杠服务器ip
- 此电脑—>右键—>映射网络驱动器–>然后就能有一个网络共享的位置–>直接共享使用
- 如果想要清楚共享的记录
- cmd—>输入:net use * /del
- window的共享功能
3、实验的设置与部署
我们做实验的时候,一定再次强调要关闭selinux和防火墙
[root@node0 ~]# systemctl stop firewalld
[root@node0 ~]# systemctl disable firewalld
[root@node0 ~]# iptables -F
[root@node0 ~]# setenforce 0
部署的流程:
- 服务器安装samba–>yum -y install samba
- 确认相关的命令是否安装好了
- rpm -q samba-client
- rpm -q samba-common
- 创建共享区域
- mkdir /samba-share
- 备份主配置文件
- 这里还要创建独立的共享区域
- 最后启动服务—>并且客户端尝试登陆
- systemctl start smb
#安装相关的软件
[root@node0 ~]# yum -y install samba samba-common samba-client
#创建共享的区域
[root@node0 ~]# mkdir /samba-share
[root@node0 ~]# chmod 777 /samba-share
#本非一下配置文件
[root@node0 ~]# cp -a /etc/samba/smb.conf{,.bak}
#修改配置文件使得/samba-share共享出来
[root@node0 ~]# vim /etc/samba/smb.conf
#找一个空白的地方输入一下内容
[samba-share]
comment = samba-share Directories
valid users = zhangsan,lisi
browseable = YES
read only = Yes
#创建一下两个关联的账户
[root@node0 ~]# useradd -s /sbin/nologin zhangsan
[root@node0 ~]# useradd -s /sbin/nologin lisi
#然后授权samba的密码
[root@node0 ~]# pdbedit -a zhangsan
new password:
retype new password:
[root@node0 ~]# pdbedit -a lisi
new password:
retype new password:
#到这里,服务器启动程序
[root@node0 ~]# netstat -antlup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 7417/smbd
#然后使用linux登陆查看
[root@Node1 ~]# smbclient -U zhangsan -L //192.168.75.130
Enter SAMBA\zhangsan's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.8.3)
zhangsan Disk Home Directories
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
#默认的是可以登陆到自己家目录的
[root@Node1 ~]# smbclient -U zhangsan //192.168.75.130/zhangsan
Enter SAMBA\zhangsan's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu Nov 10 14:42:31 2022
.. D 0 Thu Nov 10 14:42:50 2022
.bash_logout H 18 Wed Oct 31 01:07:12 2018
.bash_profile H 193 Wed Oct 31 01:07:12 2018
.bashrc H 231 Wed Oct 31 01:07:12 2018
18351104 blocks of size 1024. 16768432 blocks available
windows登陆
- 直接打开文件夹–>\192.168.75.130\zhangsan–>登陆成功
本地验证实验—>实现登陆、上传、下载
#修改一下配置文件
[root@node0 ~]# vim /etc/samba/smb.conf
.....
[samba-share]
comment = samba-share Directories
path = /samba-share
public = yes
browseable = YES
writable = yes
#测试一下配置文件
[root@node0 ~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[samba-share]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
.........
#重启服务
[root@node0 ~]# systemctl restart smb
#客户端登陆查看
[root@Node1 ~]# smbclient -U zhangsan //192.168.75.130/samba-share
Enter SAMBA\zhangsan's password:
Try "help" to get a list of possible commands.
#上传文件
smb: \> put aa.txt
putting file aa.txt as \aa.txt (0.0 kb/s) (average 0.0 kb/s)
smb: \> ls
. D 0 Thu Nov 10 14:58:14 2022
.. DR 0 Thu Nov 10 14:17:03 2022
aa.txt A 0 Thu Nov 10 14:58:14 2022
18351104 blocks of size 1024. 16767560 blocks available
实现访问控制权限–>通过配置限制
valid users 仅允许部分用户访问共享区域
注:前提条件是指定目录权限给到最大,通过修改配置文件来实现实验结果
#设置zhangsan能够登陆samba服务器,lisi不能登录
#修改配置文件
[root@node0 ~]# systemctl restart samba
[samba-share]
comment = samba-share Directories
path = /samba-share
public = yes
browseable = YES
writable = yes
valid users = zhangsan #加入这一行
#重启验证
[root@node0 ~]# systemctl restart smb
#张三可以登陆
[root@Node1 ~]# smbclient -U zhangsan //192.168.75.130/samba-share
Enter SAMBA\zhangsan's password:
Try "help" to get a list of possible commands.
smb: \>
#李四不能登录
[root@Node1 ~]# smbclient -U lisi //192.168.75.130/samba-share
Enter SAMBA\lisi's password:
tree connect failed: NT_STATUS_ACCESS_DENIED
#设置部分用户拥有写权限,张三可以写,李四不能写
[root@node0 ~]# vim /etc/samba/smb.conf
............
[samba-share]
comment = samba-share Directories
path = /samba-share
public = yes
browseable = YES
writable = yes
valid users = zhangsan,lisi
read only = yes
write list = zhangsan
[root@node0 ~]# systemctl restart smb
#登陆验证-->zhangsan可以写
[root@Node1 ~]# smbclient -U zhangsan //192.168.75.130/samba-share
Enter SAMBA\zhangsan's password:
Try "help" to get a list of possible commands.
smb: \> mkdir haha
smb: \> ls
. D 0 Thu Nov 10 15:06:55 2022
.. DR 0 Thu Nov 10 14:17:03 2022
aa.txt A 0 Thu Nov 10 14:58:14 2022
haha D 0 Thu Nov 10 15:06:55 2022
18351104 blocks of size 1024. 16767980 blocks available
#登陆验证-->lisi不可以写
[root@Node1 ~]# smbclient -U lisi //192.168.75.130/samba-share
Enter SAMBA\lisi's password:
Try "help" to get a list of possible commands.
smb: \> mkdir lisi
NT_STATUS_ACCESS_DENIED making remote directory \lisi
#设置上传的文件的默认权限
#修改配置文件
[root@node0 ~]# vim /etc/samba/smb.conf
[samba-share]
comment = samba-share Directories
path = /samba-share
public = yes
browseable = YES
writable = yes
valid users = zhangsan,lisi
read only = yes
write list = zhangsan
create mask = 644
directory mask = 755
#重启验证
[root@Node1 ~]# smbclient -U zhangsan //192.168.75.130/samba-share
Enter SAMBA\zhangsan's password:
smb: \> put aa.txt
#回到服务器验证
[root@node0 ~]# ls -l /samba-share/
总用量 0
-rw-r--r-- 1 zhangsan zhangsan 0 11月 10 15:10 aa.txt
用户别名(虚拟用户实验)
#添加一下别名的文件---->这个文件需要自己添加
[root@node0 ~]# vim /etc/samba/smbusers
zhangsan = zs
#然后在修改配置文件--->在全局里边添加
[root@node0 ~]# vim /etc/samba/smb.conf
.......
[global]
workgroup = SAMBA
security = user
username map = /etc/samba/smbusers
passdb backend = tdbsam
#重启验证登陆
[root@node0 ~]# systemctl restart smb
[root@Node1 ~]# smbclient -U zs //192.168.75.130/samba-share
Enter SAMBA\zs's password:
Try "help" to get a list of possible commands.
smb: \>
映射网络驱动器—->挂载实验
Linux系统下的挂载
#创建一个挂载的目录
[root@Node1 ~]# mkdir /smb-client
#临时挂载
[root@Node1 ~]# mount -t cifs -o username=zs,password=123456 //192.168.75.130/samba-share /smb-client
[root@Node1 ~]# ls /smb-client/
aa.txt haha
#永久挂载就要写入/etc/fstab文件当中
[root@Node1 ~]# vim /etc/fstab
.....
//192.168.75.130/samba-share /smb-client cifs defaults,username=zs,password=123456 0 0
[root@Node1 ~]# mount -a
Windows下实现映射
- 此电脑–>映射网络驱动器—>输入\192.168.75.130/samba-share—>点击完成即可
图形化管理web界面
- 上网找到samba-swat的zip包