文件服务器之二:SAMBA服务器
如果想共享文件,在Linux对Linux的环境下,最简单的方法是通过NIS;至于Windows对Windows的环境下,最简单的方法是“网上邻居”。那如果局域网中既有Windows也有Linux而且想要共享文件系统的话,那该怎么办?那就使用SAMBA服务器。SAMBA可以让Linux加入Windows的网上邻居,让不同的平台可以共享文件系统。
1、什么是SAMBA
SAMBA的主要功能:
- 共享文件与打印服务;
- 可以提供用户登录SAMBA主机时的身份验证,以提供不同身份用户的个别数据;
- 可以进行Windows网络上的主机名解析(NetBIOS Name);
- 可以进行设备的共享(例如Zip、CD-ROM)
**SAMBA使用的NetBIOS协议是无法跨越路由的。**当然,使用NetBIOS over TCP/IP的技术,可以跨路由地使用SAMBA。
1.1、SAMBA使用的daemon
主机在NetBIOS协议当中的定义为使用“NetBIOS Name”,每一台主机必须要有不同的NetBIOS Name才行,而数据传输就是在不同的NetBIOS Name之间沟通。
SAMBA通过两个服务来控制两个步骤,分别是:
- nmbd:这个daemon是用来管理工作组、NetBIOS Name等的解析。主要利用UDP协议开启port 137、138来负责名称解析的任务;
- smbd:这个daemon的主要功能是用来管理SAMBA主机共享的目录、文件与打印机等。主要利用可靠的TCP协议来传输数据,开放的端口是139及445(不一定存在)
1.2、连接模式的介绍(Peer/Peer、Domain model)
1.2.1、Peer/Peer(Workgroup model,对等模式)
简单地来说,在这个模式中,在局域网里面的所有主机均可以在自己的计算机上管理自己的账号密码,同时每台计算机也都具有独立执行各项软件的能力,只是通过网络将各个PC连接在一起而已的一个架构,所以,每台机器都是可以独立运行的。
Peer/Peer的架构是比较适合小型网络,或者是不需要常常进行文件数据共享的网络环境,或者是每个用户都独自拥有该计算机的拥有权(也就是说该计算机是用户的,而不是公用的)。
1.2.2、Domain model(主控模式)
所谓 Domain model概念其实也很简单,既然使用计算机资源需要账号密码,那么我将所有的账号与密码都放置在一台主控计算机(Primary Domain Controller,PDC)上,在局域网里边,任何人想要使用任何计算机,都需要输入账号密码,然后全部利用PDC服务器的辨识后,才给予适当的权限。
适合人来人往的企业架构。当系统管理员要管理新进人员的计算机资源使用权时,可以直接针对PDC修改即可。
2、SAMBA服务器的基础设置
2.1、SAMBA所需的软件及软件架构
所需要的软件:
所需要的软件 | 说明 |
---|---|
samba | 主要提供了SMB服务器所需要的各项服务程序(smdb及nmdb)、相关的文件以及其他与SAMBA相关的logrotate配置文件及开机默认选项文件等 |
samba-client | 提供了当Linux作为SAMBA Client端时,所需要的工具命令,例如挂载SAMBA文件格式的mount.cifs、取得类似网上邻居相关树形图的smbtree等 |
samba-common | 提供的则是服务器与客户端都会使用到的数据,包括SAMBA的主要配置文件(smb.conf)、语法检验命令(testparm)等 |
[root@server ~]# yum install samba samba-client samba-common -y
SAMBA的软件结构:
SAMBA的软件结构 | 说明 |
---|---|
/etc/samba/smb.conf | SAMBA的主要配置文件,基本上SAMBA就仅有这个配置文件而已。主要设置项目分为1、服务器的全局设置(global),如工作组、NetBIOS名称与密码等;以及2、共享网络相关设置,如实际目录、共享资源名称以及权限等两大部分。 |
/etc/samba/lmhosts | 现在SAMBA默认使用主机名作为NetBIOS Name,这个文件可能已经不存在了 |
/etc/sysconfig/samba | 提供启动smdb、nmdb时,还想要加入的相关服务的参数 |
/etc/samba/smbusers | 对应Windows和Linux账号之间的关系 |
/var/lib/samba/private/{passdb.tdb,secrets.tdb} | 管理SAMBA的用户账号/密码时,会用到的数据库文件 |
/usr/share/doc/samba-<版本> | 技术手册 |
至于常用的脚本文件:
常用的脚本文件 | 说明 |
---|---|
服务器功能 | |
/usr/sbin/{smdb,nmdb} | 最重要的权限管理(smdb)以及NetBIOS Name查询(nmdb)两个重要的服务程序 |
/usr/bin/{tdbdump,tdbtool} | 用户的账号密码都使用数据库了,SAMBA使用的数据库名称为TDB。tdbdump可以查看数据库的内容,tdbtools则可以进入数据库操作接口直接手动修改账户及密码参数。不过,要先安装tdb-tools才行 |
/usr/bin/smbstatus | 可以列出当前SAMBA的连接状况,包括每一条SAMBA连接的PID、共享的资源、使用的用户来源等 |
/usr/bin/{smbpasswd,pdbedit} | 管理SAMBA的用户账号密码,早期使用smbpasswd,不过后来使用TDB数据库,建议使用pdbedit |
/usr/bin/testparm | 检查配置文件smb.conf的语法是否正确 |
客户端功能 | |
/sbin/mount.cifs | 在Windows上面可以设置“网络驱动器”来连接自己的主机;在Linux上面则是通过mount(mount.cifs)来将远程主机共享的文件与目录挂载到自己的Linux主机上面 |
/usr/bin/smbclient | 查看其它计算机所共享出来的目录与设备 |
/usr/bin/nmblookup | 重点在查出NetBIOS Name |
/usr/bin/smbtree | 能够查到工作组与计算机名称的树形目录分布图 |
2.2、基础的网上邻居共享流程与smb.conf的常用设置项目
SAMBA的设置:
- 服务器全局设置方面:在smb.conf中设置好工作组、NetBIOS 主机名、密码使用状态(无密码共享或本机密码)等;
- 规划准备共享的目录参数:在smb.conf内设置好预计要共享的目录或设备以及可供使用的账号数据;
- 建立所需要的文件系统:根据步骤2的设置,在Linux文件系统中建立好共享出去的文件或设备,以及相关权限参数;
- 建立可用SAMBA的账号:根据步骤2的设置,建立所需的Linux实体账号,再以pdbedit建立使用的SAMBA的密码;
- 启动服务:启动SAMBA的smdb、nmdb服务,开始运转。
smb.cnf这个文件主要可以分为两个部分来看:一个是主机信息部分,在smb.conf当中以[global]作为设置的依据;另一个则是共享的信息,以个别的目录名称作为依据。
2.2.1、smb.conf的服务全局参数:[global]项目
主机方面的参数:
- workgroup = 工作组的名称:注意,工作组要相同