Linux——SAMBA服务

什么是SAMBA服务?

Linux-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服务配置要求

20190424115707.jpg

某公司决定搭建一台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服务中操作过一遍,所以不进行二次演示。

20190424121222.jpg

20190424121300.jpg

经过测试,实验机器的网卡设备,主机名,禁用Selinux,禁用防火墙均已配置成功。

正式开始配置SAMBA服务

1.查看 SAMBA 服务相关软件是否安装

# rpm -qa | grep samba
# yum -y install samba  //如果没有安装就安装一下

20190424121933.jpg

2.查看 SAMBA 服务软件包所生成的重要文件和目录

# rpm -ql samba

20190424122415.jpg

/etc/samba/smb.conf 是SAMBA的配置文件,但是并没有在SAMBA服务包里面找到它,那我们看看这个配置文件是来源于哪一个软件服务包的?

# rpm -qf /etc/samba/smb.conf

20190424122252.jpg

SAMBA服务端配置

在服务器端创建目录 /smbdir/ro,并在其中创建文件rodir.txt,再创建目录/ smbdir/rw,并在其中创建文件rwdir.txt

# mkdir -p /smbdir/{ro,rw}
# touch /smbdir/ro/rodir.txt
# touch /smbdir/rw/rwdir.txt

20190424123111.jpg

配置文件我这边已经配置好了,文件里面的注释行都是以#号或者;号开头,所以我会第一时间想到过滤,把他们过滤掉,这样的话就能够直观的看到我所配置且起作用的内容了

# grep -v ^# /etc/samba/smb.conf | grep -v ";"

20190424124856.jpg

内容比较多,我将重要部分分段截图并详细介绍

#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命令的 参数很多,我们列出几个主要的。

20190424160809.jpg

#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

20190424131056.jpg

查看服务状态,然后看看服务的进程?

# service nmb status
# service smb status
# ps -ef | grep nmb
# ps -ef | grep smb

20190424131814.jpg

查看SAMBA相关服务端口已监听

# netstat -tunlp | grep nmb
# netstat -tunlp | grep smb

20190424131921.jpg

看上去上面这几步并无卵用,其实还是有一定帮助的,可以了解服务是否正确启动?对排错也是有很大的帮助!

SAMBA客户端配置

服务端不论是Linux还是Windows都有两种方式进行挂载访问:通过主机名、通过IP地址。实现方式都是一样的,我选择使用IP地址访问,当然大家也可以将IP地址换为主机名进行测试

在 SAMBA 客户端(Linux)查看 SAMBA 服务器端的共享目录并访问

# smbclient -L //192.168.42.6
# smbclient //192.168.42.6/rodir

20190424132339.jpg

上面的形式针对临时访问使用,如果需要多次访问还是建议用下面的方式:挂载!

创建两个文件夹用来挂在,同时图片演示是需要二次点击回车来完成挂载的,我们可以通过 -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

20190424132626.jpg

这样就挂载成功了,当然//192.168.42.6 是IP地址的方式访问,我们可以把它替换为\GouGeSamba 主机名的方式进行访问

测试一下读写性

# cd /rolocal
# ls
# touch gouge.txt

20190424161249.jpg

嗯,没有权限创建就对了,再来看看rwlocal目录

# cd /rwlocal
# ls
# touch gouge.txt

20190424161429.jpg

正确配置了,但是该目录还是无法创建文件。思考一下,我们对服务端的某个目录进行共享,客户端需要进行读写,但是没有设置权限,那自然是无法创建的。

所以我们继续回到服务端进行配置

# ll -d /smbdir/*
# chmod -R o+w /smbdir/rw
# ll -d /smbdir/*

20190424161813.jpg

做完了这些,接着回到Linux客户端在尝试一下文件的读写

# cd /rwlocal
# ls
# touch gouge.txt
# echo "123" > gouge.txt
# cat gouge.txt
# echo "I love GouGe" > rwdir.txt
# cat rwdir.txt

20190424162142.jpg

这样Linux客户端上的操作就完成了

在 SAMBA 客户端(Windows)查看 SAMBA 服务器端的共享目录并访问

node3-2019-04-24-16-24-30.png

rodir文件夹里只能查看文件,不能进行文件的创建修改。

node3-2019-04-24-16-26-02.png

rwdir文件夹里的文件可以读取,也可以进行上传下载修改。

隐藏共享文件

毕竟不是所有文件都是能够直接共享的,所以隐藏共享还是的掌握一下!

20190424164420.jpg

Linux服务端新建一个/yincang 目录并创建yincang.txt文件 主要还是配置文件,将browseable改为no,共享文件名后面加一个$。最后重启服务客户端测试一下。

20190424164653.jpg

共享列表里面看不到,但是切切实实能够访问到这个目录,所以实验成功!

总结一下

到此关于Linux——SAMBA服务配置的教程就结束了。最开始的初始化配置由于篇幅问题没有过多描述,可以去参考一下我写的Linux——DHCP服务。最后的最后感谢浩哥的指导。本文由程志辉原创独自编辑,难免会出现一些错误,欢迎大家在评论区指出,同时转载请留下版权!

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

  Previous post 分别不一定是九月
Next post   JavaScript预编译

添加新评论