Linux如何搭建Samba文件共享服务
最近由于学习方面的原因,时间比较紧,只能用零碎时间来整理文档,所以发文章的频率可能会没那么快了,希望亲爱的你们多多体谅。然后,因为发文慢了,我有个想法就是把我上课的笔记分享给你们看,但我不知道你们会不会不喜欢,所以想征求一下你们的意见,欢迎给我留言哦。
前言:随着计算机网络的出现,各种各样的服务器和主机不再是一个单独的个体。网络给我们带来的最直接的好处,就是可以在主机之间快速分享资源及相互通信。接下来就让我们一起来了解一下跨平台的文件共享解决方案——Samba服务器的构建。
一、Samba服务基础
在windows网络环境中,主机之间进行文件和打印机共享是通过微软公司自己的SMB/CIFS网络协议实现的。SMB(Server Message Block,服务消息块)和CIFS(Common Internet File System,通用互联网文件系统)协议是微软的私有协议,在Samba项目出现之前,并不能直接与Linux/UNIX系统进行通信。
Samba是著名的开源软件项目之一,它在Linux/UNIX系统中实现了微软的SMB/CIFS网络协议,从而使得跨平台的文件共享变得更加容易。在部署Windows、Linux/UNIX混合平台的企业环境时,选用Samba可以很好地解决不同系统之间的文件互访问题。
1.Samba软件的组成
(1)Samba软件包的构成
在系统的安装光盘中可以找到与Samba相关的几个软件包,主要包括服务端软件samba、客户端软件samba-client,用于提供服务端和客户端程序的公共组件samba-common。大部分软件包已经随系统默认安装好了,用户可以查询系统中samba相关软件包的安装情况。
图示:查看与samba相关的软件包
只需要从光盘中找到安装包文件samba-4.4.4-9.el7.x86_64.rpm,并进行安装即可。(可以搭建本地yum安装,有网的话可以直接yum安装)
(2)Samba服务的程序组件
Samba服务器提供smbd、nmbd两个服务程序,分别完成不同的功能。其中,smbd负责为客户机提供服务器中共享资源(目录和文件等)的访问;nmbd负责提供基于NetBIOS协议的主机名称解析,以便为Windows网络中的主机进行查询服务。
安装好samba软件包以后,在系统中会添加名为smb和nmb的标准系统服务,管理员可以通过service(centos6)或systemctl(centos7)工具来控制Samba服务的启动与终止。
图示:
其中smbd程序负责监听TCP协议的139端口(SMB协议)、445端口(CIFS协议),而nmbd服务程序负责监听UDP协议的137、138端口(NetBIOS协议)。
2.主配置文件smb.conf
Samba服务的配置文件位于/etc/samba/目录,其中smb.conf是主配置文件。其中,以“#”号开始的行表示注释性的文字,在配置共享文件夹时,用户可以参考文件中提供的样例进行设置。
图示:
如上图所示,smb.conf文件中的配置内容默认包括三个部分
[global]全局设置:这部分配置项的内容对整个samba服务器都有效。[homes]宿主目录共享设置:设置Linux用户的默认共享,对应用户的宿主目录。当用户访问服务器中与自己用户名同名的共享目录时,通过验证后将会自动映射到该用户的宿主文件夹中。[printers]打印机共享设置:若需要共享打印机设备,可以在这部分进行配置。若需要在smb.conf文件中设置新的共享文件名,只需要增加一段如“[myshare]”开始共享设置即可,其中“myshare”为用户自定义的共享名。新的共享文件夹设置可以参考“[homes]”和“[printers]”部分的内容。
下面我们一起了解一下smb.conf文件中常见的一些配置项及其含义说明。
workgroup:所在工作组名称security:安全级别,centos6之前可用值有share、user、server、domain,centos7之后不再支持share,如果配置匿名共享时,需要在全局参数中添加“map to guest = bad user”这一行内容。passwd backend:设置共享账户文件的类型,默认使用tdbsam(TDB数据库文件)comment:对共享目录的注释、说明信息valid users:有效用户path:共享目录在服务器中对应的实际路径browseable:该共享目录在“网上邻居”中是否可见guest ok:是否允许所有人访问,等效于“public”writable:是否可写,与 read only 的作用相反inherit acls:是否继承acl(访问控制列表)注:Samba 服务设置的读取、写入权限,优先级要低于文件系统中设置的权限
Samba服务器提供了一个配置文件检查工具——testparm程序,使用testparm工具对smb.conf配置文件的正确性进行检查,如果发现错误将会进行提醒。
图示:使用testparm工具检查smb.conf配置文件
二、构建文件共享服务器
上面我们了解了samba服务的基本知识,并了解了主配置文件smb.conf文件中常用的一些配置项。接下来我们一起了解如何设置文件夹共享,包括匿名访问和用户验证的共享设置,以及账户映射和客户机访问控制等常见配置。
1.可匿名访问的共享
设置匿名访问共享文件夹时,在主配置文件中主要调整两个地方即可:其一,由于centos7之后不再支持share,所以,需要在全局参数中添加“map to guest = bad user”这一行内容,表示允许匿名访问(如下图所示);其二,添加一段共享目录配置。其他配置项可根据实际需要进行更改(如下图所示)。
图示:
配置完成后,重启smb服务就可以从Windows客户机或Linux客户机匿名访问此共享了,关于在Linux主机中访问共享文件夹的方法,将在下文中讲解。
千万注意共享文件在系统本地的权限,不然会拒绝访问,本地权限规则优先于共享权限。
2.需要用户验证的共享
匿名共享虽然用起来非常方便,但因为任何人都可以访问到共享的文件数据,在某些时候可能会导致信息的泄露。
设置用户验证的共享文件时,只需在添加共享目录配置时,指定用户权限,在此之前,还需要先创建授权的共享账户。
(1)建立samba用户数据库
为了区别于Linux主机中的系统用户,通常将用于访问samba共享资源的用户称为共享用户。Samba服务器使用独立的共享账号数据库文件,其中的账号名称必须有与它同名的系统用户想对应,以便主机对共享访问的读写权限进行控制,但共享用户的密码是额外设置的,可以与系统用户的密码不一样。
Samba共享用户的账号数据库文件默认位于/var/lib/samba/private/passdb.tdb,是一个经过加密的文件,其中保存了samba用户的账号名称、登录密码、账号可用状态等信息。使用pdbedit工具可以对共享用户进行管理。如下图
图示:
然后执行“pdbedit -L”命令可以列出所有的samba共享用户,若只想查看某个用户的信息,可以指定用户名称作为参数,结合“-v”选项可以输出更详细的内容。如下图
图示:
当指定的samba用户不再需要时,可以通过pdbedit工具进行删除,只要结合“-x”选项并指定samba用户名称即可。例如:执行“pdbedit -x -u zhangsan”命令可以删除名为张三的samba账号。
(2)设置用户访问授权
若要使用用户验证的samba共享,security安全级别设为“user”。共享目录的用户授权设置主要由“valid users”和“write list”配置项指定。当需要授权多个共享用户时,以逗号或空格进行分隔。如果需要授权一个用户组,可以使用“@组名”的形式,但需要为组内的每个系统用户都创建对应的samba共享用户。
示例:将本地目录/opt/mytools/发布为共享文件夹,共享名为tools,要求只有共享用户wangwu、zhaoliu能够访问,其中wangwu用户具有写入的权限。
a.创建共享用户wangwu、zhaoliu,确认共享目录。如下图
b.修改smb.conf配置文件,添加名为tools的共享目录配置段。如下图
c.重新加载smb.conf文件中的配置,或重启smb服务。
(3)确定目录访问授权
通过samba服务器共享本地的文件时,用户最终是否拥有读取、写入权限,除了需要设置用户授权以外,还要满足一个前提条件——即在本地与共享用户同名的系统用户对发布为共享的本地文件夹必须有相应的读取和写入的权限。(上面也有提及到)
设置目录权限:chmod 777 /opt/mytools
另外,当通过共享目录上传文档时,对于共享用户所上传的文件,创建子目录的默认权限可以分别使用配置项“directory mask”、“create mask”进行指定。
示例:若要用户访问tools共享文件时,所上传的目录的默认权限为755,文件的默认权限为644,可在配置文件中添加如下图所示的内容。
三、访问共享文件夹
1.使用smbclient访问共享文件夹
在系统中,samba-client软件包提供的smbclient工具可以用于查询、访问共享资源。
(1)查询目标主机的共享资源列表
使用smbclient命令查询共享资源时,添加“-L”选项,并指定目标主机的IP地址或主机名,添加“-U”选项,并指定用户名称,在工作组环境中查询共享资源时,一般不需要用户验证,提示输入密码时直接按Enter即可。如下图
(2)登录并访问共享资源
通过“//主机地址/共享名”的形式指定共享文件夹的位置。对于允许匿名用户访问的共享文件夹,提示输入密码时直接按Enter键即可。对于需要用户验证的共享文件夹,则输入对应的密码即可。如下图
成功登录samba服务器后,会出现“smb:\>”提示符,提供一个类似于ftp命令程序的环境。在“smb:\>”环境中,使用特定的命令可以对共享目录进行列表、上传、下载等操作。例如:ls用于列表目录,pwd查看当前路径,get和mget用于下载文件,put和mput用于上传文件,使用“?”或“help”命令可以查看各种交互命令在线帮助信息。
2.使用mount挂载共享文件夹
Smbclient客户端工具可以非常方便地登录到samba服务器,但是只有将文件下载到本地以后才能查看文件内容,若使用mount工具将共享文件夹挂载到本地,则通过本地的挂载点目录即可直接使用共享文件夹的内容,使文件共享更加方便。
使用mount命令挂载共享资源时,只需通过“//主机地址/共享名”的形式指定共享文件夹的位置(视为设备资源),并指定本地的挂载点目录即可。
示例:将samba服务器192.168.4.11中的tools共享目录挂载到本地的/media/smbdir/文件夹,以共享用户wangwu进行验证,可以在客户机中执行如下图的操作。
######### 本节完 ########
因为文章有点长我怕好多人都不看完就划过去了,所以文章开头啰嗦一遍,在这再啰嗦一遍。由于最近学习方面的问题,几乎没时间总结文档了,所以只能用零碎时间去整理文档,这样发文章的频率可能就没那么快了,希望亲爱的你们多多体谅。改天有时间我想发一下我上课时的笔记,不知道你们会不会想看,可以给我留言哦。