无论是在Linux操作系统之间,还是在Windows操作系统之间,都有文件共享解决方案。 例如,可以在Linux之间通过NFS共享文件,但在Windows之前可以通过基于CIFS的协议共享文件。 但是,Windows和Linux之间如何进行文件共享呢? 这是Samba出现的。 Samba最初被称为SMB,由于注册商标的问题,变更为Samba。
什么是Samba
首先谈谈Samba的历史吧。 了解这段历史,你会对Samba有更深的了解。1991年Andrew Tridgell博士班的研究生有这样的烦恼。 他拥有3台运行DOS的电脑、DEC公司的数字Unix系统和Sun的Unix系统。 当时,缉毒公司开发了一种叫做PATHWORKS的软件。 虽然此软件可用于共享两个操作系统(DEC的Unix和电脑的DOS )的归档数据,但令人遗憾的是,Tridgell无法从该软件实现数据共享的目的
这时,Tridgell说:“咦! 既然这两个系统可以互相沟通,Sun要这么辛苦不是很勉强吗? 我们是否应该找到这两个系统的工作原理,使其能够在名为Sun的机器上共享归档数据? ’、为了解决这些问题,他自己写了一个program,检测DOS和DEC的Unix系统进行数据共享发送时使用的通信协议的信息,取出这些重要信息,根据上述找到的通信协议进行servermmix
既然写了软件,想想总是需要注册商标吧。 因此,Tridgell申请了SMBserver(servermessageblock的缩写)这个名字作为他写的软件的商标,但很遗憾SMB是没有意义的文字,所以没能注册。 那样的话,可以在词典中找到相关单词并注册为商标吗? 翻了很久,呵呵! 这个SAMBA正好包含了SMB,是热情有力的拉丁舞的名字。 否则,请把这个名字作为商标。 这成为了我们今天使用的SAMBA的名字的由来! (注:上述内容来自jqddx私房菜)
既然您了解了什么是
Samba的安装
samba,让我们来看看如何在Linux操作系统上安装该软件。 安装方法因版本而异。Ubuntu系统
可以用apt工具安装。 具体情况如下:
sudo apt-get install samba
中心系统
在CentOS上,可以使用yum工具运行以下命令进行安装:
yum安装- y samba samba-client
Samba的配置实例
Samba的配置文件为/etc/samba/smb.conf,通过修改此配置文件满足了我们的各种需求。 打开此配置文件时,许多内容为#或; 我注意到了。 看看未评论的部分:全局#全局参数
工作组=samba #工作组名称
security=user #安全认证的方式共有4种()
passdb backend=tdbsam #是一种定义用户后台的类型,共有三种
打印=cups
printcap name=cups
load printers=yes #设置启动Samba服务时是否共享打印机设备
cups options=raw #打印机选项
[homes] #共享参数
注释=home directories #说明信息
valid users=%S,%D%w%S
browseable=No #指定共享信息是否显示在“网络邻居”中
read only=No #定义是否为只读,与" writable "相反
inherit ACLs=是
[打印机]
comment=All Printers
path=/var/tmp #共享文件的实际路径(重要)。
printable=是
创建掩码=0600
browseable=No
[打印$ ]
comment=打印机驱动程序
path=/var/lib/samba/drivers
写入列表=根
创建掩码=0664
目录掩码=0775
主要有[global]、[homes]、[printers]三个部分,具体含义本文暂不介绍,以下先做实例。 此实例相对简单,它共享本地目录(/tmp/public )并允许匿名
名访问(任何人,不需要用户和密码)。配置方法比较简单,只需要在上述配置文件的内容即可,其它地方不需要进行修改。对于CentOS 6.x的系统,配置示例如下:
[global] workgroup = MYGROUP server string = Samba Server Version %v security = user passdb backend = tdbsam load printers = yes cups options = raw [public] comment = Public Stuff path = /tmp/public public = yes guest ok = yes writable = yes security = share browseable = yes但对于CentOS 7系统,配置上略有不同(不同点参考注释),具体如下:
[global] workgroup = WORKGROUP # security = share ##这里区别1 passdb backend = tdbsam share modes = yes ##这里区别2 printing = cups printcap name = cups load printers = yes cups options = raw [share] comment = Share all path = /tmp/public browseable = yes public = yes writable = no security = share ##这里区别3完成上述配置的修改后,还需要做如下几件事情:
创建目录并修改权限
mkdir /tmp/public chmod 777 /tmp/public touch /tmp/public/itworld123禁用SELinux和防火墙
systemctl disable firewalld.service setenforce 0重启Samba服务,使配置生效
systemctl start smb注意: 请严格安装步骤安装,否则可能会有问题,如有问题请参考下面内容
客户端访问
Windows客户端访问
具体访问方式与访问Windows共享文件类似,在资源管理器输入IP地址(\192.168.1.100)即可。
Linux客户端访问
对于匿名访问,通过mount即可进行挂载访问,具体命令如下:
mount.cifs -o guest //192.168.1.100/public /mnt/cifs配置项详解
global段
该段定义全局的配置,workgroup用来定义工作组,相信如果您安装过windows的系统,你会对这个workgroup不陌生。一般情况下,需要我们把这里的MYGROUP改成WORKGROUP(windows默认的工作组名字)。
security = user
这里指定samba的安全等级。 关于安全等级有四种:
share:用户不需要账户及密码即可登录samba服务器user:由提供服务的samba服务器负责检查账户及密码(默认)server:检查账户及密码的工作由另一台windows或samba服务器负责domain:指定windows域控制服务器来验证用户的账户及密码。passdb backend = tdbsam
passdb backend(用户后台),samba有三种用户后台:smbpasswd, tdbsam和ldapsam.
smbpasswd:该方式是使用smb工具smbpasswd给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用此密码访问Samba资源。smbpasswd在/etc/samba中,有时需要手工创建该文件。tdbsam:使用数据库文件创建用户数据库。数据库文件叫passdb.tdb,在/etc/samba中。passdb.tdb用户数据库可使用 smbpasswd -a 创建Samba用户,要创建的Samba用户必须先是系统用户。也可使用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用户账号。ldapsam:基于LDAP账户管理方式验证用户。首先要建立LDAP服务,设置 “passdb backend = ldapsam:ldap://LDAP Server”load printers 和 cups options 两个参数用来设置打印机相关。除了这些参数外,还有几个参数需要你了解:
netbios name = MYSERVER # 设置出现在网上邻居中的主机名hosts allow = 127. 192.168.12. 192.168.13. # 用来设置允许的主机,如果在前面加 ”;” 则表示允许所有主机log file = /var/log/samba/%m.log #定义samba的日志,这里的%m是上面的netbios namemax log size = 50 # 指定日志的最大容量,单位是Khomes
该部分内容共享用户自己的家目录,也就是说,当用户登录到samba服务器上时实际上是进入到了该用户的家目录,用户登陆后,共享名不是homes而是用户自己的标识符,对于单纯的文件共享的环境来说,这部分可以注视掉。
printers
该部分内容设置打印机共享。
问题汇总
无法正常登录(挂载)
有的时候我们配置完成后,无法将服务端的文件系统挂载到客户端。此种情况通常服务器端的防火墙没有关闭,或者没有将端口加入规则中。如果是进行学习,可以简单的关闭防火墙:
systemctl disable firewalld.service查看目录权限不够
虽然可以正常登录,但访问目录文件列表时提示权限不足,提示信息如下。
ls: 正在读取目录/mnt/cifs/: 权限不够
这种情况通常是SELinux的问题,简单的方法是关闭SELinux,当然也可以设置目录的SELinux属性。下面是关闭的方法,简单粗暴。
setenforce 0可以读数据,但不可写
这种情况通常是目录位置的问题,如果共享的目录在根目录等情况,会有写权限的问题,可以按照本例的位置创建共享目录进行测试验证。