samba服务器

samba服务器简介

在早期的网络世界中,文件数据在不同主机之间的传输大多是使用**ftp,**但是使用ftp服务传输档案使得我们无法直接修改主机上面的档案数据。NFS服务可以实现在客户端的机器上直接使用服务器上面的文件,但是NFS主要在unix系列操作系统上使用。windows上面也有类似的文件系统,那就是cifs(Common Internet File system,通用internet文件系统),cifs的最简单的用途就是“网上邻居”,但是cifs只能让windows机器沟通。所以,为了实现windows和unix系列系统之间能够相互沟通,就产生了samba服务。
samba是架构在NetBIOS(Network Basic Input/Output System,网上基本输入输出系统)这个通信协议上面所开发出来的。NetBIOS是由IBM发展出来,目的是要让局域网络内少数计算机进行网络连接的一个通信协议,因此NetBIOS是无法跨越路由的,而现在Samba不仅能与局域网主机分享资源,还能与全世界的电脑分享资源,就是由NetBIOS over TCP/IP技术解决。由于NetBIOS在局域网内实在是很好用,所以微软的网络架构就使用了这个协议。而samba最早发展的时候,其实是想要让linux系统可以加入windows的系统当中来共享使用彼此的文件数据,所以samba就架构在NetBIOS发展出来了。

samba功能

1、进行文件共享;
2、可以提供使用者登入samba主机时的身份认证,以提供不同身份的个别资料;
3、可以进行windows网络上的主机名称解析(NetBIOS name);

NetBIOS当初发展就着眼在局域网内的快速数据交流,而因为是定义在局域网内,因此它并没有使用类似TCP/IP之类的传输协议,也就不需要IP的设置。这样一来数据如何在两台主机间交流呢?其实主机在NetBIOS协议当中的定义为使用“NetBIOS Name”,每一台主机必须要有不同的NetBIOS Name才行。假设使用网上邻居来设置文件数据的访问,想要登录某台计算机使用它所提供的文件数据时,必须要加入该计算机的工作组,并且需要给自己的机器设置一个NetBIOS Name,在同一个组中,NetBIOS Name是独一无二的。是否能登录对方主机或者是使用对方主机所提供的资源,还要看对方主机有没有提供我们使用的权限。
samba通过两个服务来控制管理工作组和samba主机共享的目录,分别是:
nmbd:这个服务是来管理工作组、NetBIOS Name等的解析。主要利用UDP协议开启port137、port138来负责名称解析的任务。
smbd:这个服务的主要功能是用来管理samba主机共享的目录、文件与打印机等。主要利用可靠的TCP协议来传输数据,开放的端口为139和445(不一定存在)。

samba服务器的搭建

samba服务的相关软件包说明

samba:该软件主要提供了smb服务器所需的各项服务程序(smbd及nmbd)、相关的文件。

samba-client:这个软件提供了当linux作为samba client时,所需要的工具命令。例如挂载samba文件格式的mount.cifs。

samba-common:这个软件提供的则是服务器与客户端都会使用到的数据包括samba的主要配置文件(smb.conf)等。

samba配置文件

samba服务的主配置文件:/etc/samba/smb.conf
在该文件中,“#”和“;”都是注释符号。
在该文件中,不区分大小写。[global] #全局配置  注意,这里的“#”是注释,“;”是配置。
workgroup = MYGROUP设定 Samba Server  #所要加入的工作组或者域
server string = Samba Server Version %v #服务器描述字符串,主机的简易说明,这里%v代表版本。
;       netbios name = MYSERVER #当前所在工作组的中的主机的唯一名称,最大15个字符。
;       interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 #设置samba服务器监听的网卡,可以写网卡名称或ip地址,ip可以写成xxx.xxx.xxx.xxx/24.
;       hosts allow = 127. 192.168.12. 192.168.13.           #设置允许连接到samba服务器的客户端
【hosts deny =#可以设置不允许连接到samba服务器的客户端
log file = /var/log/samba/log.%m #产生日志文件的路径和名称。
max log size = 50 #定义日志文件最大容量(单位是KB,如果是0表示不限制)
security = user  #设置用户访问samba服务器的验证方式,一共四种,他们的验证方式如下:
1.share:用户访问samba server不需要提供用户名和密码,安全性 能较低,deprecated(已弃用)
2.user:samba server共享目录只能被授权的用户访问,由samba server负责检查账号和密码的正确性。账号和密码要在samba server中建立
3.server:和user安全级别类似,但用户名和密码是递交到另外的server去验证,如果递交失败,就退到user安全级别,deprecated(已弃用)
4.domain:这个安全级别要求网络上存在一台windows的主域控制器,samba把用户名和密码递交给它去验证。
passdb backend = tdbsam #密码文件已经转为使用数据库了,默认的数据库格式为tdbsam,默认的文件放置到/var/lib/samba/private/passwd.tdb.
load printers = yes #设置在samba服务启动时是否共享打印机设备
cups options = raw #打印机的选项[homes] #定义对用户家目录的共享配置(由于在linux上面每位用户均有家目录,例如user1的用户主目录为/home/user1,当user1使用samba时,就会发现多了个//127.0.0.1/user1/的资源可用,由于设置的不可浏览,除了自己能看见自己的家目录,别人是不可以浏览的)
comment = Home Directories
browseable = no
writable = yes[printers] #定义打印机共享配置
comment = All Printers
path = /var/spool/samba #打印的文件队列暂时放到该目录下
browseable = no
guest ok = no #游客是否能打印
writable = no
printable = yes
共享文件设置参数[share] #自定义共享名称
comment = this is share text #共享描述
path = 目录位路径 #所共享的目录路径
public = yes/no #设置共享是否允许guest账号访问
guest ok = yes/no #功能同public一样
browseable = yes/no #是否让所有用户看到这个项目,如果是no就表示隐藏
writable = yes/no #用户是否具有可写权限
read only = yes/no #设置共享是否具有只读权限read only=no和writable = yes等价,如与以上设置发生冲突,放在后面的设置生效
admin user = root #设置共享的管理员,多用户之间使用逗号隔开。
valid users = username #设置允许访问共享的用户,如果为空,将允许所有用户访问。例如valid users = user1,user2,@group1(多用户和组用逗号分开,@group表示组)
invalid users =  username #设置不允许访问共享的用户
write list = username #如果writable=no,该字段中用户或组可读写,例如write list = user1,@group1
create mask = 0700 #创建文件的权限为700
directory mode = 0700 #创建的目录权限为700
#注意:writeable = yes 行和后面的 write list行是有冲突的。writeable开启后,是所有用户都有写的权限,而write list 是只允许某些用户可写。如果两者都开启的话,writeable会覆盖后面的权限,即所有用户都可写
#注意:write list = teacher, +admin 其中teacher逗号后有空格,admin前的可以跟+、&、@三个符号,这三个符号后面的名字都代表用户组,三者的区别如下:+ 只在本机的密码文件组中查找& 只在nis服务中查找@ 先通过NIS服务器查找,nis找不到再到本机查找, 

samba提供很多不同的变量含义:
samba服务器-编程知识网

samba服务器的搭建

软件安装

yum install samba  #提供samba的两个服务smbd,nmbd服务,以及相关文件
yum install samba-client #samba客户端工具,提供了当linux作为samba client时,所需要的工具命令。例如挂载samba文件格式的mount.cifs。
yum install samba-common #提供的则是服务器与客户端都会使用到的数据,包括samba的主要配置文件(smb.conf)等。
yum install cifs-utils -y #在Linux上挂载需要支持cifs协议。

实验一:创建public共享项,path目录/opt/share,实现所有用户可读(匿名访问),只有admin组和teacher用户可以写,并且默认创建的文件权限为644,目录为755;

第一步:配置文件

[global]workgroup = OPENLABserver string = Openlab Samba Server %vnetbios name = openlab123interfaces = ens160 #samba服务器监听的网卡,可以写网卡名称或ip地址hosts allow = 192.168.58. #连接到samba服务器的客户端log file = /var/log/samba/%m.logmax log size = 50 security = usersecurity = userpassdb backend = tdbsamunix charset = UTF-8 #Linux编码方式dos charset = cp936 #windows编码方式
[public]comment = Public Directorypublic = yes #共享允许guest账号访问path = /opt/share  #共享的目录路径read only = yes #仅读write list = teacher, +admin #teacher表示用户,admin表示组。create mask = 0644 #创建文件的权限为644directory mode = 0755 #创建目录的权限为755注意:这里的文件权限和目录权限位四位。

第二步:创建共享目录

mkdir /opt/share
chmod 775 /opt/share #可能权限不够

第三步:添加用户以及用户组设置密码

命令解析:
一.smbpasswd用来添加删除samba用户。
语法格式: smbpasswd [options] USERNAME
-a:添加samba用户 #示例:如果要建立一个samba用户,必须是在/etc/shadow(当前linux系统中)存在的用户。
-d:禁用samba用户
-e:启用samba用户
-n:将指定用户的密码置空
-x:删除samba用户
-h:获取帮助
二.使用pdbedit: 创建密码:不可以用于修改密码
查询: pdbedit -L
添加:  pdbedit -a -u username操作步骤:
[root@localhost ~]# useradd teacher #创建用户
[root@localhost ~]# smbpasswd -a teacher
New SMB password:
Retype new SMB password:
[root@localhost ~]# groupadd admin #创建组

第三步:启动服务

systemctl restart smb nmb
systemctl stop firewall
setenforce 0

第四步:验证
本机测试

[root@localhost samba]# testparm  #验证smb.conf是否有错误
Load smb config files from /etc/samba/smb.conf
Global parameter workgroup found in service section!
Global parameter server string found in service section!
Global parameter netbios name found in service section!
Global parameter interfaces found in service section!
Global parameter log file found in service section!
Global parameter max log size found in service section!
Global parameter security found in service section!
Global parameter security found in service section!
Global parameter passdb backend found in service section!
Global parameter unix charset found in service section!
Global parameter dos charset found in service section!
Loaded services file OK.
Weak crypto is allowedServer role: ROLE_STANDALONEPress enter to see a dump of your service definitions# Global parameters
[global]dos charset = cp936interfaces = ens160log file = /var/log/samba/%m.logmax log size = 50netbios name = OPENLAB123security = USERserver string = Openlab Samba Server %vworkgroup = OPENLABidmap config * : backend = tdbhosts allow = 192.168.58.[public]comment = Public Directorycreate mask = 0644guest ok = Yespath = /opt/sharewrite list = teacher +admin
本机测试
[root@localhost ~]# smbclient -L [//主机或IP] [-U 使用者账号]
选项与参数:
-L :仅查阅后面接的主机所提供分享的目录资源;
-U :以后面接的这个账号来尝试取得该主机的可使用资源

samba服务器-编程知识网

windows测试
win + R 进入命令界面
挂载命令:net use x: \xxx.xxx.xxx.xxx\public(目录名)
samba服务器-编程知识网
此时在windows系统下会显示一个网络磁盘,至此试验成功!
samba服务器-编程知识网

或者在运行界面输入samba服务器ip地址
samba服务器-编程知识网
输入用户密码,成功。
samba服务器-编程知识网
若要删除磁盘 net use x: /del
samba服务器-编程知识网