Samba除了提供文件共享之外,也可以像windows下的共享一样提供打印机共享。CUPS是Linux系统下管理打印的服务应用程序,其支持IPP、LPD、SMB和JetDirect接口。CUPS服务本身也可以实现打印共享,不过在windows下增加cups共享打印机的步骤相对麻烦,可以利用Samba先连接本地CUPS服务,再由Samba提供打印共享服务。
1、CUPS服务配置
1.1、安装CUPS相关软件包
1 | yum -y install cups |
1.2、cups配置文件
编辑cups配置文件vi /etc/cups/cupsd.conf
1 | #将Listen localhost:631修改为 |
1.3、防火墙设置
1 | firewall-cmd --permanent --add-port=631/tcp |
1.4、浏览配置新增打印机
可以通过lpadmin命令新增打印机,也可以通过浏览器输入http://IP:631
后访问,如下图:
通过add printer增加打印机后(增加时会让输入主机的root用户名和密码),可以通过最上面的prints项,查看当前打列机列表:
2、Samba服务配置
Samba除了可以分享文件系统外,也可以分享打印机。Samba这个文件系统是架构在NetBIOS这个通讯协议上面所开发出来的。既然如此,我们先了解一下NetBIOS
2.1 NetBIOS通讯协议
最早IBM发展出NetBIOS的目的仅是要让局域网络内少数计算机进行网络链接的一个通讯协议而已,所以考虑的角度并不是针对大型网络,因此,这个NetBIOS是无法跨路由的。这个NetBIOS在局域网络内实在是很好用,所以微软的网络架构就使用了它进行沟通。而Samba最早发展的时候,其实是想要让Linux系统可以加入Windows的系统当中来分享使用彼此的档案数据的,所以当然Samba就架构在NetBIOS发展出来。
  不过NetBIOS是无法跨路由的,因此使用NetBIOS发展起来的服务器理论上也是无法跨越路由的。那么该服务器的使用范围就受限很多,好在出现了所谓的NetBIOS over TCP/IP技术。它是个什么样的技术呢?举个例子,我们知道TCP/IP是目前网络连接的基本协议,现在我们将NetBIOS想成是一封明信片,这个明信片只能让自己欣赏而已,如果今天我们要将这个明信片送到远方的朋友那边时!就需要透过邮件系统(例如邮局、快递等)来传送了!这个TCP/IP就可以视为邮件传递系统了!透过NetBIOS over TCP/IP的技术,我们就可以跨路由使用Samba服务器所提供的功能了!
提示:或许你会发现在Windows网络设定里面常常看到NetBEUI这个协议,那是什么呢?那是个NetBIOS Extened User Interface的简写,也是IBM在NetBIOS发展出来之后的改良版本。
2.2 Samba使用的daemons(守护进程)
NetBIOS当初发展时就着眼在局域网络内的快速数据交流,而因为是定义在局域网络内,因此他并没有使用类似TCP/IP之类的传输协议,也就不需要IP的设定。如此一来数据如何在两部主机之间交流呢?其实主机在NetBIOS协议中使用NetBIOS Name,每一部主机必须要有不同的NetBIOS Name才行,而档案数据就是在不同的NetBIOS Name之间沟通。
  Windows环境下,如何实现两台计算机相互通信通常要做到两步:(1) Windows的工作组要一致,并且两台计算机的主机名不一致,因为它是架构在NetBIOS协议上的,我们可以简单的称呼他为NetBIOS Name。(2) 利用对方给予的权限存取可用资源
  在Linux环境下Samba则是透过两支服务来控制这两个步骤,分别是:(1)nmbd,这个daemon是用来管理工作组、NetBIOS name等等解析的。主要利用UDP协议开启port 137、138来负责名称解析的任务;(2)smbd,这个daemon的主要功能就是用来管理samba主机分享的目录、档案与打印机等等。主要是利用可靠的TCP协议来传输数据,开放的端口为139及445。
  所以,Samba每次启动至少都需要这两个daemon,这两个daemon启动时会启用137、138两个UDP端口和139一个TCP端口。后面设定防火墙的时候会用到这三个端口。
2.3 Samba所需软件及其软件结构
- samba:这个软件主要提供了SMB服务器所需的各项服务程序(smbd和nmbd)等
- samba-client:这个软件则提供了当Linux做为Samba Client端时,所需要的工具指令,例如挂载SAMBA文件格式的mount.cifs、取得类似windows网络邻居树形图的smbtree等
- samba-common:这个软件堤供的则是服务器与客户端都会使用到的数据,包括SAMBA的主要配置文件(sab.conf)、语法检验指令(testparm)等
相关配置文件有如下:
/etc/samba/smb.conf
:这个Samba的主要配置文件/etc/samba/lmhosts
:早期的NetBIOS Name发额外设定,因此需要这个lmhosts的NetBIOS name对应IP地址。事实上它有点像是/etc/hosts
的功能。目前Samba预设会去使用你的本机名称(hostname)作为你的NetBIOS name,因此这个档案不设定也无所谓/etc/sysconfig/samba
:提供启动smbd、nmbd时,你还想要加入的相关服务参数。/etc/samba/smbusers
:由于Windows与Linux在管理员与访客的账号名称不一致,例如:administrator(windows)及root(linux),为了对应这两者这间的关系,可使用这个档案来设定/var/lib/samba/private/{passdb.tdb,secrets.tdb}
:管理Samba的用户账号与密码时,会用到的数据库档案/usr/share/doc/samba<版本>
:这个目录包含了SAMBA的所有相关的技术手册
至于常用的脚本文件案方面,若分为服务器与客户端功能,则主要有底下几个数据:
/usr/sbin/{smbd,nmbd}
:服务器功能,就是最重要的权限管理(smbd)以及NetBIOS Name查询(nmbd)两个重要的服务程序;/usr/bin/{tdbdump,tdbtool}
:服务器功能,在Samba 3.0以后的版本中,用户的账号与密码参数已经转为使用数据库了,Samba使用的数据库名称为TDB(Trivial Database)。tdbdump可以查看数据库的内容,tdbtool则可以进入数据库操作接口直接手动修改账密参数。不过,你得安装tdb-tool这个软件才可以。/usr/bin/smbstatus
:服务器功能,可以列出目前Samba的联机状况,包括每一条Samba联机的PID,分享资源,使用的用户来源等等,让你轻轮台管理Samba/usr/bin/{smbpasswd,pdbedit}
:服务器功能,在管理Samba的用户账号密码时,早期是使用smbpasswd这个指令,不过因为后来使用了TDB数据库了,因此建议使用新的pdbedit指令来管理用户数据/usr/bin/testparm
:服务器功能,这个指令主要在检验配置文件sam.conf的语法正确与否,当你编辑过smb.conf时,请务必使用这个指令来检查一次,避免因为打字错引起困扰!/sbin/mount.cifs
:客哀悼端功能,在 Windows 上面我们可以设定『网络驱动器机』来连接
到自己的主机上面。在 Linux 上面,我们则是透过 mount (mount.cifs) 来将远程主机分享
的档案与目录挂载到自己的 Linux 主机上面哪!/usr/bin/smbclient
:客户端功能,当你的 Linux 主机想要藉由『网络邻居』的功能来
查看别台计算机所分享出来的目录与装置时,就可以使用 smbclient 来查看啦!这个指令
也可以使用在自己的 SAMBA 主机上面,用来查看是否设定成功哩!/usr/bin/nmblookup
:客户端功能,有点类似nslookup,重点在查出NetBIOS name/usr/bin/smbtree
:客户端功能,能够查到工作组与计算机名称的树状目录分布图