什么是SAMBA服务?
Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微 软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,并且加入了许多新的功能,这样一来,使得Samba具有了更强大的功能。
简单点:网络文件系统(服务),既可以为Linux客户端提供服务,也可以为Windows客户端提供服务!
实验环境
VMware 、Red Hat Enterprise Linux 6
SAMBA服务有点类似于NFS服务,不过他的好处是可以为Windows客户端提供文件共享服务。所以这次我们需要3台设备来完成实验。
SAMBA服务配置要求
某公司决定搭建一台Linux的文件共享服务器, 能为公司局域网中的计算机实现Windows和Linux 资源共享。共享要求如下:
1.在服务器端创建目录/ smbdir/ro,并在其中创建文件rodir.txt,再创建目录/ smbdir/rw,并在其中创建文件rwdir.txt。
2.允许所有员工均能匿名访问的共享为/smbdir/ro,但仅能读。
3.允许所有员工均能匿名访问的共享为/smbdir/rw,可读可写。
实验操作
1.Linux主机需要修改网卡标识为eth0
2.Linux主机需要修改主机名
3.Linux主机需要关闭和禁用防火墙
4.Linux主机需要禁用Selinux
5.配置本地YUM源仓库
以上几步操作由于在Linux——DHCP服务中操作过一遍,所以不进行二次演示。
经过测试,实验机器的网卡设备,主机名,禁用Selinux,禁用防火墙均已配置成功。
正式开始配置SAMBA服务
1.查看 SAMBA 服务相关软件是否安装
# rpm -qa | grep samba
# yum -y install samba //如果没有安装就安装一下
2.查看 SAMBA 服务软件包所生成的重要文件和目录
# rpm -ql samba
/etc/samba/smb.conf 是SAMBA的配置文件,但是并没有在SAMBA服务包里面找到它,那我们看看这个配置文件是来源于哪一个软件服务包的?
# rpm -qf /etc/samba/smb.conf
SAMBA服务端配置
在服务器端创建目录 /smbdir/ro,并在其中创建文件rodir.txt,再创建目录/ smbdir/rw,并在其中创建文件rwdir.txt
# mkdir -p /smbdir/{ro,rw}
# touch /smbdir/ro/rodir.txt
# touch /smbdir/rw/rwdir.txt
配置文件我这边已经配置好了,文件里面的注释行都是以#号或者;号开头,所以我会第一时间想到过滤,把他们过滤掉,这样的话就能够直观的看到我所配置且起作用的内容了
# grep -v ^# /etc/samba/smb.conf | grep -v ";"
内容比较多,我将重要部分分段截图并详细介绍
#1.全局部分参数设置
[global]
workgroup = WORKGROUP
#与主机名相关的设置,因为实验要用到Windows主机,Windows主机默认工作组叫做WORKGROUP,所以我们也将工作组改为WORKGROUP。
server string = Samba Server
#这一段话起解释说明作用,默认用来介绍版本号,你可以随意设置
netbios name = GouGeSamba
#主机名称,后续客户端利用主机名访问就是跟他有关!!!
interfaces = lo eth0 192.168.42.6
#这个很有意思,开发环境中一台设备会有多块网卡,默认情况下,配置了SAMBA服务,客户端可以通过任何一个网卡地址进行访问。那么我们可以设置一下,让客户端在访问SAMBA服务的时候,只能通过指定的网卡地址进行访问。
hosts allow = 192.168.42.11 192.168.42.12
#它代表着允许哪些服务端IP地址能够访问所以,注释掉的话就是默认情况都能访问。你可以理解为白名单
#hosts deny = 192.168.1.*
#能够允许谁访问,自然也可以拒绝谁访问,上面这个就是拒绝,开发环境中发现哪一个IP非法访问,你可以直接给他设置黑名单
# logs split per machine
log file = /var/log/samba/log.%m
#设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。
# max 50KB per log file, then rotate
max log size = 50
#Samba Server日志文件的最大容量,单位为kB,0代表不限制。
security = share
#说明:设置用户访问Samba Server的验证方式,一共有四种验证方式。
#1. share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
#2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
#3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
#4. domain:域安全级别,使用主域控制器(PDC)来完成认证。
passdb backend = tdbsam
#初学者暂且不进行了解,我在互联网上找到了相关解释
#说明: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用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的 参数很多,我们列出几个主要的。
#2.共享文件名
[rodir]
comment = GouGe's read only directory
#对共享的描述,可以使任意字符串
path = /smbdir/ro
#共享的目录路径 你共享哪里就设置哪里
public = yes
#该共享是否允许guest账户访问
browseable = yes
#该指定共享目录是否可浏览
[rwdir]
comment = GouGe's read and write directory
#对共享的描述,可以使任意字符串
path = /smbdir/rw
#共享的目录路径 你共享哪里就设置哪里
public = yes
#该共享是否允许guest账户访问
browseable = yes
#该指定共享目录是否可浏览
writable = yes
//改目录是否可以写入?
配置文件写好后,我们就开始启动服务,同时准备在客户端测试
samba有两个主要的进程smbd和nmbd。smbd进程提供了文件和打印服务,而nmbd则提供了NetBIOS名称服务和浏览支持,帮助SMB客户定位服务器,处理所有基于UDP的协议。
# service nmb start
# service smb start
查看服务状态,然后看看服务的进程?
# service nmb status
# service smb status
# ps -ef | grep nmb
# ps -ef | grep smb
查看SAMBA相关服务端口已监听
# netstat -tunlp | grep nmb
# netstat -tunlp | grep smb
看上去上面这几步并无卵用,其实还是有一定帮助的,可以了解服务是否正确启动?对排错也是有很大的帮助!
SAMBA客户端配置
服务端不论是Linux还是Windows都有两种方式进行挂载访问:通过主机名、通过IP地址。实现方式都是一样的,我选择使用IP地址访问,当然大家也可以将IP地址换为主机名进行测试
在 SAMBA 客户端(Linux)查看 SAMBA 服务器端的共享目录并访问
# smbclient -L //192.168.42.6
# smbclient //192.168.42.6/rodir
上面的形式针对临时访问使用,如果需要多次访问还是建议用下面的方式:挂载!
创建两个文件夹用来挂在,同时图片演示是需要二次点击回车来完成挂载的,我们可以通过 -o pass=""来自动输入密码,完成挂载,这种方式更加的自动化
# mkdir -p /{rolocal,rwlocal}
# mount.cifs -o pass="" //192.168.42.6/rodir /rolocal
# mount.cifs -o pass="" //192.168.42.6/rwdir /rwlocal
# df
这样就挂载成功了,当然//192.168.42.6 是IP地址的方式访问,我们可以把它替换为\GouGeSamba 主机名的方式进行访问
测试一下读写性
# cd /rolocal
# ls
# touch gouge.txt
嗯,没有权限创建就对了,再来看看rwlocal目录
# cd /rwlocal
# ls
# touch gouge.txt
正确配置了,但是该目录还是无法创建文件。思考一下,我们对服务端的某个目录进行共享,客户端需要进行读写,但是没有设置权限,那自然是无法创建的。
所以我们继续回到服务端进行配置
# ll -d /smbdir/*
# chmod -R o+w /smbdir/rw
# ll -d /smbdir/*
做完了这些,接着回到Linux客户端在尝试一下文件的读写
# cd /rwlocal
# ls
# touch gouge.txt
# echo "123" > gouge.txt
# cat gouge.txt
# echo "I love GouGe" > rwdir.txt
# cat rwdir.txt
这样Linux客户端上的操作就完成了
在 SAMBA 客户端(Windows)查看 SAMBA 服务器端的共享目录并访问
rodir文件夹里只能查看文件,不能进行文件的创建修改。
rwdir文件夹里的文件可以读取,也可以进行上传下载修改。
隐藏共享文件
毕竟不是所有文件都是能够直接共享的,所以隐藏共享还是的掌握一下!
Linux服务端新建一个/yincang 目录并创建yincang.txt文件 主要还是配置文件,将browseable改为no,共享文件名后面加一个$。最后重启服务客户端测试一下。
共享列表里面看不到,但是切切实实能够访问到这个目录,所以实验成功!
总结一下
到此关于Linux——SAMBA服务配置的教程就结束了。最开始的初始化配置由于篇幅问题没有过多描述,可以去参考一下我写的Linux——DHCP服务。最后的最后感谢浩哥的指导。本文由程志辉原创独自编辑,难免会出现一些错误,欢迎大家在评论区指出,同时转载请留下版权!