文件和打印机的一个共享程序,Samba=smb(由于smb被windows使用,所以命名为Samba)=server Manage Block!
Samba最先在Linux和Windows之间架起了一座桥梁,正是由于Samba的出现,我们可以在Linux和Windows之间实现文件共享的相互通讯,我们可以将其架设成一个功能非常强大的文件服务器,也可以将其架设成打印服务器提供本地也远程联机打印
文件和打印机共享:文件和打印机共享是Samba的最主要功能,SMB进程实现资源共享,将文件和打印机发布到网络中,以方便用户查看和使用!
身份认证和权限管理:smbd服务支持user mode和domain mode等你身份验证和权限设置模式,通过加密的方式可以保证共享文件和打印机的安全!
名称解析:Samba通过nmbd服务可以搭建NBNS(NetBIOS Name Service)服务器,提供名称解析,将计算机的NetBIOS名解析为IP地址。
浏览服务:局域网中,Samba服务器可以成为本地主浏览服务器(LMB),保存可用资源列表,当使用客户端访问Windows网上邻居时,会提供浏览列表,显示共享目录、打印机等资源。
端口包括:139(NetBIOS协议,进行计算机名称的解析)和445(作用于文件共享)
早期,smb运行与NBT(NetBios Over TCP/IP)上,使用UDP协议的137,138,以及TCP的139号端口
拓展:NetBIOS协议
Network Basic Input/Output System的简称,网络基本输入/和输出系统!协议可以理解为(用于局域网通讯的API,是由IBM公司开发),NETBIOS的主要作用:通过NETBIOS协议获得计算机名称,然后把计算机名解析为IP地址!后期SMB经过开发,可以直接运行于TCP/IP协议上,没有额外的NBT层,使用TCP协议的139和445端口。
C/S模式
Nmbd smbd
当客户端访问服务器时,信息通过SMB协议进行传输,其工作过程可以分成四个步骤哈:
1:协议协商
客户端在访问Samba服务器时,发送negprot指令数据包,告知目标计算机其支持的SMB类型。Samba服务器根据客户端的情况,选择最优的SMB类型,并做出回应。
--------negprot请求------->
客户端 服务器
<--------negprot响应-------
2:建立连接
当SMB类型确认后,客户端会发送session setup指令数据包,提交帐号和密码,请求与Samba服务器建立连接,如果客户端通过身份验证,Samba服务器会对session setup报文作出回应,并为用户分配唯一的UID,在客户端与其通信时使用。
--------session setup &X请求------->
客户端 服务器
<--------session setup &X响应-------
3:访问共享资源
访问共享资源
客户端访问Samba共享资源时,发送tree connect指令数据包,通知服务器需要访问的共享资源名,如果设置允许,Samba服务器会为每个客户端与共享资源连接分配TID,客户端即可访问需要的共享资源哈。
--------tree connect &X请求------->
客户端 服务器
<--------tree connect &X响应-------
4:断开连接
共享使用完毕,客户端向服务器发送tree disconnect报文关闭共享,与服务器断开连接。
--------tree disconnect请求------->
客户端 服务器
<--------tree disconnect响应-------
服务端安装方式:
[root@Kylinos63 ~]# rpm -ivh /media/Packages/samba-3.6.9-164.el6.x86_64.rpm
通用Internet文件系统
[root@Kylinos63 ~]# yum install -y samba
客户端安装:
[root@Kylinos6 ~]# yum install -y samba-client
搭建一台SAMBA服务器的流程
[root@Kylinos63 ~]# systemctl restart smb
[root@Kylinos63 ~]# systemctl enable smb
[root@Kylinos63 ~]# netstat -antup | grep smb //139端口实际就是提供Netbios服务
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 7195/smbd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 7195/smbd
tcp 0 0 :::139 :::* LISTEN 7195/smbd
tcp 0 0 :::445 :::* LISTEN 7195/smbd
[root@Kylinos63 ~]# vim /etc/samba/smb.conf
#开头部分是Smb.conf配置文件介绍,包括文件作用相关信息
#smb.conf中,;开头的是配置实例,不生效,去掉;此行生效,#表示注释
[global] #全局设定
workgroup = MYGROUP #工作组,为了和WIndows兼容,我们可以改为WORKGROUP
server string = Samba Server Version %v #对这台Server的Samb服务描述字段
; netbios name = MYSERVER #NETBIOS名字,在Windows的网上邻居中显示的名字,属全局配置
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 #设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
hosts allow = 127. 192.168.1. 192.168.10.1 #表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段(192.168.31.)表示。hosts deny 与hosts allow 刚好相反,全局选项
log file = /var/log/samba/log.%m #log存放位置,,%m表示主机名
max log size = 50 #最大日志为50k,达到50k日志滚动
security = user #安全类型:user=基于用户名和密码的访问,一般使用user;security=share共享时不用输入密码直接访问;server=检查账户及密码工作交给另外一台Windows服务器或者Samba服务器去负责,domain=基于域的认证
passdb backend = tdbsam #密码存放到samba数据库
#passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam是security account manager(安全账户管理)的简写。
#1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
#2.tdbsam: 该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库 可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。
我们除开使用smbpasswd之外,也可以使用pdbedit命令来建立Samba账户。pdbedit命令的 参数很多,我们列出几个主要的。
pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
pdbedit –c “[]” –u username:恢复该Samba用户的账号。
#3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”
load printers = yes #载入本地打印机
cups options = raw #设备类型,裸设备
[homes] #几个特殊共享,某一个人的家目录对外共享控制机制,不要注释掉
comment = Home Directories #描述字段
browseable = no #默认开始,=no是隐藏
writable = yes #可写
; valid users = %S #有效的用户,%s代表只有属于自己的家目录才能访问
; valid users = MYDOMAIN\%S #有效用户,默认代表针对于域用户登陆的用户访问自己的家目录
[printers] #打印共享
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[share] #自定义的共享名字
comment = Public share #描述字段
path = /share #共享文件路径
public = yes #匿名用户可以看到此目录
writable = yes #可写,这里针对所有用户,wrist list只是对后面的用户或组
printable = no #设备是否是打印机
write list = bob bob,@sales #用户表,这里的用户可以读写共享目录,可以写成用户名,用户名,@组名
hosts allow = 192.168.1. 127. #允许那个网段来访问,方式和前面的写法一样
#常见的几个选项
create mask = 0755 #上传文件的权限
only guest = yes # 将登陆的用户映射为匿名用户
guest ok = yes #允许匿名用户,类似于public=yes
read only = yes #权限只读,主要针对目录
guest account = pcguest #匿名用户上传文件的所属主组
directory mask = 0755 #匿名用户上传文件的权限
available = yes #用来指定改共享资源是否可用
注意:当配置文件有重复的参数,例如
writable = yes
writable = no
下边的writable = no生效
SUID: u+s
只能用在可执行的二进制程序上面,对目录设置无效
程序运行的时候(瞬间)从执行者变为程序的拥有者
eg:passwd在普通用户是可以更改自己的密码的,但是我们查看到,shadow的权限是没有任何权限(----------.),但是更改密码的时候,普通用户执行passwd的权限将密码需要写入shadow里面去,所以在执行的时候,获取到了root的权限,将密码写入到shadow中!-----[普通用户执行某命令的瞬间提升成为root用户]
#chomd u+s /usr/bin/less //命令格式
#chmod 4755 /usr/bin/less //将特殊权限添加到最前面,4位数字执行方式,u+s->s=4 g+s->s=2
SGID: g+s
可以对二进制程序上面,也可以针对目录,更多的用于目录
新创建的文件所属组会继承上级目录的所属组
Notes:若使用了cp -a的命令去copy到已经添加了g+s的目录中,是会覆盖g+s的权限的,RHEL6中
SBIT: o+t
stickybit 粘滞位,作用只用于目录,功能目录下创建了文件只有root,文件onwer和目录所有者才能删除
纵使目录拥有了x权限,其他人员也无法删除
#chmod o+t /tmp //对目录/tmp添加t的权限
#chmod 1744 /tmp //利用数字添加t的权限,在权限数目前加一位,1添加,0取消t的权限
通过配置一个工作组为kylinos.cn,用samba服务器作为文件服务器,发布共享目录/share,共享名为public,允许所有员工访问
[root@Kylinos63 ~]# mkdir /share //测试共享目录
[root@Kylinos63 ~]# cp /etc/passwd /share //测试文件
Samba3的配置方式
[root@Kylinos63 ~]# vim /etc/samba/smb.conf
[global]
workgroup = kylinos.cn #此行修改
server string = Samba Server Version %v & kylinos.cn #修改描述字段
……
security = share #修改访问安全类型
……
[public] #末尾添加,共享名为public
comment = Public share #描述字段
path = /share #路径
public = yes #允许匿名
samba4的配置方式
[root@Kylinos63 ~]# vim /etc/samba/smb.conf
[global]
workgroup = kylinos.cn #此行修改
security = user #修改访问安全类型
map to guest = bad user
……
[public] #末尾添加,共享名为public
comment = Public share #描述字段
path = /share #路径
public = yes #允许匿名
[root@Kylinos63 ~]# testparm #检测smb.conf文件是否正确
[root@Kylinos63 ~]# service smb restart //启动服务
按下Win+R,护着从开始-运行,然后输入共享地址格式 \\IP
不用输入密码方式到public(实际是/share)
可以看到public里面的passwd文件,全程无密码输入
注意: Windows访问samba共享时,提示:“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问” 此问题需要修改Win10 网络策略 按window+R键输入gpedit.msc 来启动本地组策略编辑器,如下: 依次找到“计算机配置-管理模板-网络-Lanman工作站”这个节点,在右侧内容区可以看到“启用不安全的来宾登录”这一条策略设置。状态是“未配置”,如下: 双击“启用不安全的来宾登录”这一条策略设置,将其状态修改为“已启用”并单击确定按钮。 设置完成,再次尝试访问发现可以正常访问了 |
[root@Kylinos64 ~]# smbclient -L 192.168.1.63 //查看Samba上的共享资源
Enter root's password: #这里密码为空,直接回车查看
Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]
Sharename Type Comment
--------- ---- -------
public Disk Public share
IPC$ IPC IPC Service (Samba Server Version 3.6.9-164.el6 & kylinos.cn)
Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@Kylinos64 ~]# mount -t cifs //192.168.1.63/public /opt//匿名共享无需加入用户名
Password: #直接回车,密码为空
[root@Kylinos64 ~]# cd /opt
[root@Kylinos64 opt]# ls ; cd
passwd
通过用户名和密码共享出sales。只有拥有用户名和密码的同事可以查看这个共享
[root@Kylinos63 ~]# mkdir /sales
[root@Kylinos63 ~]# cp /etc/group /sales/group.txt
[root@Kylinos63 ~]# vim /etc/samba/smb.conf
……
security = user #修改此项,安全级别
#passdb backend = tdbsam #注销此行
passdb backend = smbpasswd #使用smb自己的工具smbpasswd来给系统用户(真实用户
或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。
smb passwd file = /etc/samba/smbpasswd #存放密码位置
……
[sales] #末尾添加此行
comment = Sales Share Folder
path = /sales
public = yes
writable = yes
valid user = @sales
[root@Kylinos63 ~]# groupadd sales
[root@Kylinos63 ~]# useradd -g sales sale1
[root@Kylinos63 ~]# useradd -g sales sale2
[root@Kylinos63 ~]# grep sale /etc/passwd
sale1:x:500:500::/home/sale1:/bin/bash
sale2:x:501:500::/home/sale2:/bin/bash
[root@Kylinos63 ~]# touch /etc/samba/smbpasswd //若有不存储在报错,需要新建
[root@Kylinos63 ~]# smbpasswd -a sale1 //本地用户建立samba账号
New SMB password: #123456
Retype new SMB password: #123456
[root@Kylinos63 ~]# smbpasswd -a sale2
New SMB password: #123456
Retype new SMB password: #123456
Added user sale2.
[root@Kylinos63 ~]# chmod 777 /sales //除开samba本身的权限控制,系统权限给足
[root@Kylinos63 ~]# service smb restart
Sale1是sale1用户自己的home目录,sales里面有group文件
同样方式切换用户,切换用户前,清除用户
执行这条命令:net use \\192.168.1.63\IPC$ /del
然后再执行访问共享
\\192.168.1.63 //当你启用了user安全级别,匿名共享的public也就不匿名了
[root@Kylinos64 ~]# smbclient -L 192.168.1.63
Enter root's password:
Anonymous login successful
Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]
Sharename Type Comment
--------- ---- -------
public Disk Public share
sales Disk Sales Share Folder
IPC$ IPC IPC Service (Samba Server Version 3.6.9-164.el6 & kylinos.cn)
Anonymous login successful
Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@Kylinos64 ~]# mount -o user=sale1,pass=123456 //192.168.1.63/sales /sales/
[root@Kylinos64 ~]# ls /sales/
group.txt
若是Linux开机启动挂载的方式:
[root@Kylinos64 ~]# vim /etc/fstab //末尾添加此行,开机启动挂载
//192.168.1.63/sales /sales cifs user=sale1,pass=123456 0 0
[root@Kylinos63 ~]# vim /etc/samba/smb.conf
#[homes] #把这四行注释
# comment = Home Directories
# browseable = no
# writable = yes
[root@Kylinos63 ~]# service smb restart
客户端测试(sale1)
[root@Kylinos63 ~]# smbstatus
Ignoring unknown parameter "valid user"
Samba version 3.6.9-164.el6
PID Username Group Machine
-------------------------------------------------------------------
51497 sale1 sales 192.168.1.64 (192.168.1.64)
51490 sale1 sales linuxstudy (192.168.1.33)
Service pid machine Connected at
-------------------------------------------------------
IPC$ 51497 192.168.1.64 Mon Oct 12 15:01:05 2015
IPC$ 51490 linuxstudy Mon Oct 12 14:59:48 2015
sales 51497 192.168.1.64 Mon Oct 12 15:01:05 2015
IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问
Smbclient(samba client)是基于SMB协议的,用于存取共享目标的客户端程序。
[root@kylinos ~]# smbclient -L 192.168.31.63 #匿名登录
Enter SAMBA\root's password:
Anonymous login successful
[root@kylinos ~]# smbclient -L 192.168.31.63 -U sale2 #使用用户名列举
Enter SAMBA\sale2's password:
[root@Kylinos64 ~]# smbclient -L 192.168.1.63 -U sale1%123456 //列出某个IP的共享,可以不跟用户
[root@kylinos ~]# smbclient //192.168.31.63/sales #匿名登录
Enter SAMBA\root's password:
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \>
[root@kylinos ~]# smbclient //192.168.31.63/sales -U sale1 #用户登录
Enter SAMBA\sale1's password:
Try "help" to get a list of possible commands.
smb: \>
[root@Kylinos64 ~]# smbclient //192.168.1.63/sales -U sale1%123456 //像使用FTP工具一样使用
Domain=[KYLINOS.CN] OS=[Unix] Server=[Samba 3.6.9-164.el6]
smb: \> ls
. D 0 Mon Oct 12 14:25:36 2015
.. DR 0 Mon Oct 12 14:25:18 2015
group.txt 804 Mon Oct 12 14:25:36 2015
40317 blocks of size 262144. 22595 blocks available
#会有smb提示符,可以使用cd,lcd,get ,mget,put ,mput等这些命令访问远程共享
使用smbget下载文件
[root@kylinos64 ~]# smbget smb://192.168.31.63/sales/group.txt -U sale1
Password for [sale1] connecting to //sales/192.168.31.63:
Using workgroup SAMBA, user sale1
smb://192.168.31.63/sales/group.txt
Downloaded 1.07kB in 2 seconds
[root@Kylinos64 ~]# smbclient -c "ls" //192.168.1.63/sales -U sale2%123456 //类似上面命令,单用ls
[root@Kylinos64 ~]# smbclient -c "mkdir share1" //192.168.1.63/sales -U sale1%123456 //创建目录
[root@Kylinos64 ~]# ls /sales/ //之前已经挂载,所以这里可以看到share1
group.txt share1
[root@Kylinos64 ~]# mount -t cifs //192.168.1.230/IT.S\ Se /mnt -o user=administrator,pass=123456
开机自动挂载(文件共享名:IT.S Se)
[root@Kylinos64 ~]# vim /etc/fstab
//192.168.1.230/IT.S\040Se /mnt cifs user=administrator,pass=123456 0 0
#空格编码使用\040代替
没有绝对的虚拟用户,只会将一个不存在的用户或多个用户,映射为本地的一个真实用户
[root@Kylinos63 ~]# useradd find
[root@Kylinos63 ~]# smbpasswd -a find
[root@Kylinos63 ~]# vim /etc/samba/smbusers
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
find = kylinos15 #末尾添加此行
[root@Kylinos63 ~]# vim /etc/samba/smb.conf
……
workgroup = kylinos.cn
server string = Samba Server Version %v & kylinos.cn #上面两行的下面添加下面一行
username map = /etc/samba/smbusers #写到全局,全局生效,写到某一个共享,只是针对某一个共享生效
……
[root@Kylinos63 ~]# service smb restart
清除用户信息,然后使用kylinos15登陆测试,kylinos15并不存在
SWAT:The Samba WEB Administration Tool
SWAT是Samba的图形化管理工具。我们可以通过浏览器利用swat工具来设置samba。在swat中每一个samba参数都有相应的帮助文件或解释文件,很适合初学者。
SWAT工具嵌套在xinetd超级守护进程中,要通过启用xinetd进程来启用swat。因此要先安装xinetd工具包,然后安装swat工具包。
1: 版本问题,安装3.6.23
2:编辑swat配置文件,only_from,disabled
3:启动xinetd,启动smb
4: web访问:http://IP:901
#vim /etc/xinetd.d/swat //编辑配置文件
service swat
{
port = 901
socket_type = stream
wait = no
only_from = 192.168.1.0/24 #修改可以管理的IP地址段
user = root
server = /usr/sbin/swat
log_on_failure += USERID
disable = no #启用