在一般的局域网络中 (LAN) 如果都是 Windows 计算机,那么使用『网络上的芳邻』这个功能,就可以让不同的 Windows 计算机分享彼此的档案啰!那么万一这个 LAN 里面有个 Linux 主机时,我怎么让 Linux 也加入这个 Windows 计算机当中的『网络上的芳邻』呢?!也就是说,让 Windows 计算机可以透过『网络上的芳邻』来存取 Linux 主机上面的档案!呵呵!那就是 SAMBA 这个服务器的主要目的了!SAMBA 是很有用的一个服务器,他可以让您的 Linux 剎那间成为一个档案服务器 ( File Server ),并提供整个 LAN 里面的 Windows 很简单的就可以对 Linux 主机进行档案的存取动作。不仅如此, SAMBA 也可以让 Linux 上面的打印机成为打印机服务器 (Printer Server) ,鸟哥个人觉得, SAMBA 对于整个 LAN 的贡献真的是很大!那么就赶紧来玩一玩吧! ^_^ |
原理:
:SAMBA 的发展历史与名称的由来
:SAMBA 的应用功能
:NetBIOS 通讯协议
:SAMBA 使用的 daemons
:联机模式的介绍 ( peer/peer, domain model )
套件安装:
:使用 RPM
:使用 Tarball
Server 端的设定:
:SAMBA 的套件结构
:主机的规划技巧建议
:基础的设定流程与 smb.conf 的主要规划
:没有防备的 SAMBA 分享档案设定 ( testparm )
:设定需要使用者登入的 Workgroup ( smbpasswd )
:设定较大型网域的 Linux Samba PDC ( Primary Domain Controller )主机
:设定成为打印机服务器 ( Printer Server + LPRng 系统)
:设定成为打印机服务器 ( Printer Server + CUPS 系统)
Client 端的设定:
:在 Windows 上浏览 Linux 分享档案的设定
:在 Linux 上浏览 Windows 分享档案的设定
安全相关方面:
:配合 quota 来规范使用者的使用空间
:如何设定防火墙 iptables
:如何设定 daemons 的抵挡功能 ( hosts allow 项目 )
:要备份些什么咚咚?
问题克服:
:重点在登入者身份的确认与该身份的 Linux 档案权限吶!
:什么是 SWAT ( Samba Web Administration Tool )
重点回顾
本章与 LPI 的关系
参考资源:
本章习题练习
原理:
-
- 分享档案与打印机服务;
- 可以提供使用者登入 SAMBA 主机时的身份认证,以提供不同身份者的个别数据;
- 可以进行 Windows 网络上的主机名称解析 (NetBIOS name)
- 可以进行装置的分享 ( 例如 Zip, CDROM... )
- 当我们想要登入某部 Windows 主机使用他所提供的档案数据时,必需要加入该 Windows 主机的群组 ( Workgroup ),并且我们的机器也必需要设定一个主机名称,注意喔,这个主机名称跟 Hostname 是不一样的,因为这个主机名称是架构在 NetBIOS 协议上的,我们可以简单的称呼他为 NetBIOS Name 好了。在同一个群组当中,NetBIOS Name 必需要是独一无二的喔!
- 好了,等到我们登入该主机之后,能不能使用该主机所提供的档案数据还要看 Windows 主机有没有提供我们使用的权限吶!所以,并不是登入该 Windows 主机之后,我们就可以无限制的取用该主机的档案资源了。也就是说,如果对方主机允许你登入,但是却没有开放任何资源让您取用,呵呵,登入主机也无法查看对方的硬盘里面的数据的啦!
- smbd :这个 daemon 的主要功能就是用来管理 SAMBA 主机分享什么目录、档案与打印机等等的内容。
- nmbd :这个 daemon 则是用来管理群组啦、NetBIOS name 啦等等的解析。
- peer/peer ( Workgroup model ) :
peer 有同等、同辈的意思存在,那么 peer/peer 由字面上的解释来看,当然就是同等地位的 PC 架构了!这是什么意思呢?简单的来说,在局域网络里面的所有 PC 均可以在自己的计算机上面管理自己的账号与密码,同时每一部计算机也都具有独力可以执行各项软件的能力,只是藉由网络将各个 PC 连结在一起而已的一个架构,所以,每一部机器都是可以独立运作的喔!而在这样的架构下,如果有两部计算机,计算机名称假设为 pc1 与 pc2 好了,那么当您要坐在 pc1 这部计算机前使用 pc1 的资源时,就必须要知道登入 pc1 的使用者名称与密码,才能够登入使用。而如果您想由 pc1 经过网络联机到 pc2 来使用 pc2 的档案资源时,就必须要知道 pc2 的账号与密码才可以顺利的登入 pc2 吶!
这样的架构在目前小型办公室里面是最常见的。例如办公室里面有十个人,每个人桌上可能都安装有一套 Windows 操作系统的个人计算机,而这十部计算机都可以独立进行办公室软件的执行啊、独立上网啊、独立玩游戏啊等等的,因为这十部计算机都可以独立运作,所以不会有一部计算机关掉,其它的计算机就无法工作的情况发生,这就是 peer/peer 的典型架构。
以下图的架构为例,在这样的架构下,假设 A 君写了一个报告书,而 B 君想要以网络直接取用这个报告书时,他就必须要知道 A 君使用的计算机的账号与密码,并且 A 君必须要在 PC A 上面启用 Windows 的『资源共享(或者是共享)』之后,才能够让 B 君联机进入喔 ( 此时 PC A 为 Server ) !而且, A 君可以随时依照自己的喜好来更改自己的账号与密码,而不受 B 君的影响,不过, B 君就得要取得 A 君同意取得新的账号与密码后,才能够登入 PC A 喔!反过来说,同样的, A 要取得 B 的数据时,同样需要取得 PC B 的账号与密码后,才能够顺利登入啊 ( 此时 PC A 为 Client 喔 )!因为 PC A, PC B, PC C 的角色与地位都同时可以为 Client 与 Server ,所以就是 peer/peer 的架构了!
生活周遭中,哪里看到的这种 peer/peer 的架构呢?!想起来了吗?!没错!就是藉由 Windows 的『网络上的芳邻』所达成的『工作群组(workgroup)』的架构,那就是典型的 peer/peer 架构啦!所以, peer/peer 也可以直接说成 workgroup 的联机架构喔。
使用 peer/peer 的架构的好处,是每部计算机均可以独立运作,而不受他人的影响!不过,缺点就是当整个网域内的所有人员都要进行数据分享时,光是知道所有计算机里面的账号与密码,就会很伤脑筋了!所以, Peer/Peer 的架构是比较适合 (1)小型的网域,或者是 (2)没有需要常常进行档案数据分享的网络环境,或者是 (3)每个使用者都独自拥有该计算机的拥有权(就是说,该计算机是使用者的,而不是公用的啦!)!而,如果该单位的所有 PC 均是公有的,而且您需要统一控管整个网域里面的账号与密码的话,那就得使用底下的 domain models 了!
- domain model :
假设今天您服务的单位有 10 部计算机,但是您的单位有 20 个员工,这也就是说,这 20 个员工轮流抢着用这 10 部计算机。如果每部计算机都如同 peer/peer 的架构时,那么每部计算机都需要输入这 20 个员工的账号与密码来提供他们登入喔,而且,今天假如有个员工想要变更自己的密码时,就需要到 10 台计算机上面进行密码变更的作业!否则他就必须要记得这 10 部计算机里面,那一部计算机是记忆那一个密码.....好烦那~
如果上述是这样的情况,使用 peer/peer 架构就不是一个好方法了!这个时候就需要藉由 domain model 来达成您的需求啦!所谓的 domain model 概念其实也很简单,既然使用计算机资源需要账号与密码,那么我将所有的账号与密码都放置在一部主控计算机 ( Primary Domain Controller, PDC ) 上面,在我的网域里面,任何人想要使用任何计算机时,都需要在屏幕前方输入账号与密码,然后通通藉由 PDC 主机的辨识后,才给予适当的使用权限,也就是说,不同的身份还具有不一样的计算机资源使用权限就是了!例如底下的图示:
PDC 主机控管整个网域里面的各个机器 (PC A ~ PC D) 的账号与密码的信息,假如今天有个使用者账号名称为 Ken ,且密码为 mypasswd 时,他不论使用哪一部计算机 (PC A ~ PC D) 只要在屏幕前方输入 ken 与他的密码,则该机器会先到 PDC 上面查验是否有 ken ,以及 ken 的密码,并且 PDC 主机会给予 ken 这个使用者相关的计算机资源使用权限。当 ken 在任何一部主机上面登入成功后,他就可以使用相关的计算机资源了!
这样的架构比较适合人来人往的企业架构,当系统管理员要控管新进人员的计算机资源使用权时,可以直接针对 PDC 来修改就好了,不需要每一部主机都去修修改改的,对于系统管理员来说,这样的架构在控管账号资源上,当然是比较简单的啦!
SAMBA 的发展历史与名称的由来
在早期的网络世界当中,档案数据在不同主机之间的传输大多是使用 FTP 这个好用的服务器软件来进行传送。不过,使用 FTP 传输档案却有个小小的问题,那就是您无法直接修改主机上面的档案数据!也就是说,您想要更改 Linux 主机上面的某个档案时,必需要由 Server 端将该档案下载到您工作的 Client 端后才能修改,也因此该档案在 Server 与 Client 端都会存在。这个时候,万一如果有一天您修改了某个档案,却忘记将数据上传回主机,那么等过了一阵子之后,呵呵,您如何知道那个档案才是最新的?!
既然有这样的问题,那么好吧,我可不可以在 Client 端的机器上面直接取用 Server 上面的档案,如果可以在 Client 端直接进行 Server 端档案的存取,那么我在 Client 端就不需要存在该档案数据啰,也就是说,我只要有 Server 上面的档案资料存在就可以啦!有没有这样的档案系统啊 ( File System ) ,呵呵!很高兴的是,前面我们已经提过的 Network File System, NFS 就是这样的档案系统之一啦!我只要在 Client 端将 Server 所提供分享的目录挂载进来,那么在我 Client 的机器上面就可以直接取用 Server 上的档案数据啰,而且,该数据就像是我 Client 端上面的 partition 一般,真是好用!而除了可以让 Unix Like 的机器互相分享档案的 NFS 服务器之外,在微软 ( Microsoft ) 上面也有类似的档案系统,那就是 Common Internet File System, CIFS 这个咚咚啦!CIFS 最简单的想法就是目前常见的『网络上的芳邻』咯! Windows 系统的计算机可以透过桌面上『网络上的芳邻』来分享别人所提供的档案数据哩!真是方便。不过,NFS 仅能让 Unix 机器沟通, CIFS 只能让 Windows 机器沟通。伤脑筋,那么有没有让 Windows 与 Unix-Like 这两个不同的平台相互分享档案数据的档案系统呢?
在 1991 年一个名叫 Andrew Tridgwell 的大学生就有这样的困扰,他手上有三部机器,分别是跑 DOS 的个人计算机、DEC公司的 Digital Unix 系统以及 Sun 的 Unix 系统。在当时, DEC 公司有发展出一套称为 PATHWORKS 的软件,这套软件可以用来分享 DEC 的 Unix 与个人计算机的 DOS 这两个操作系统的档案数据,可惜让 Tridgwell 觉得较困扰的是,Sun 的 Unix 无法藉由这个软件来达到数据分享的目的。这个时候 Tridgwell 就想说:『咦!既然这两部系统可以相互沟通,没道理 Sun 就必需这么苦命吧?可不可以将这两部系统的运作原理找出来,然后让 Sun 这部机器也能够分享档案数据呢?』,为了解决这样的的问题,他老兄就自行写了个 program 去侦测当 DOS 与 DEC 的 Unix 系统在进行数据分享传送时所使用到的通讯协议信息,然后将这些重要的信息撷取下来,并且基于上述所找到的通讯协议而开发出Server Message Block (SMB) 这个档案系统,而就是这套 SMB 软件就能够让 Unix 与 DOS 互相的分享数据啰!( 注:再次的给他强调一次,在 Unix Like 上面可以分享档案数据的 file system 是 NFS,那么在 Windows 上面使用的『网络上的芳邻』所使用的档案系统则称为 Common Internet File System, CIFS )
既然写成了软件,想一想,嗯!总是需要注册一下商标吧!因此 Tridgwell 就去申请了 SMBServer ( Server Message Block 的简写 ) 这个名字来做为他撰写的这个软件的商标,可惜的是,因为 SMB 是没有意义的文字,因此没有办法达成注册。既然如此的话,那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,呵呵!这个 SAMBA 刚好含有 SMB ,又是热情有劲的拉丁舞蹈的名称,不然就用这个名字来做为商标好了!哈哈!这成为我们今天所使用的 SAMBA 的名称由来啦! ^_^
SAMBA 的应用功能
由上面说明的 SAMBA 发展缘由,您就应该不难知道咯, SAMBA 最初发展的主要目就是要用来沟通 Windows 与 Unix Like 这两个不同的作业平台,这么做有什么好处呢?刚刚我们上面不就已经说过了,最大的好处就是您不必让同样的一份数据放置在不同的地方,搞到后来都不晓得哪一份资料是最新的!而且也可以透过这样的一个档案系统上 Linux 与 Windows 的档案传输变得更为简单!也就是说,您以后可以透过『网络上的芳邻』来进行 Linux 与 Windows 档案的传输啦!那么 SAMBA 可以进行哪些动作呢?
底下我们来谈几个 SAMBA 服务器的应用实例吧!
应用实例一:以鸟哥为例,由于我都是使用 Windows 系统来编辑我的网页画面,然后再传到我的 Linux 机器上。一开始,鸟哥也是以 FTP 来传送我的网页的,后来发现,这样在我的 Windows 上面需要有一份网页数据,然后修改完成之后又要传到 Linux 上面,如此便有两个相同的档案,最麻烦的是,有时候下载下来的档案已经经过好多修改了,却在下次的 FTP 作业,不小心又下载一次旧数据,结果将已经修改过的数据覆盖过去~天吶!又要重写一遍.....真是讨厌!后来,鸟哥就安装了 SAMBA 服务器,将 Linux 上我的网页目录打开成可以资源共享,如此一来,鸟哥就可以直接透过 Windows 的『网络上的芳邻』来修改我的网页数据啰!而且,这就有点像是『在线编修』呢,一修改完成,在 Internet 上面可以立刻检验,方便的很吶!
应用实例二:在我们实验室中,由于计算机数量不多,研究生常常会使用到不同的计算机 ( 因为大家都得抢没有人用的计算机啊! ),此外,也常常有研究生拿自己的 NoteBook 来工作,因此,有些团队的数据就分散在各个计算机当中,使用上相当的不方便。这个时候,我就使用 SAMBA 将硬盘空间分享出来,由于使用者要登入 SAMBA 这个服务器主机时需要输入使用者数据 ( 账号与密码 ),而不同的登入者会取得不一样的目录资源,所以,可以避免自己的数据在公用计算机上面被窥视,此外,在不同的公用计算机上面都可以登入 SAMBA 主机,数据的使用上面真是相当的棒啊!
应用实例三:SAMBA 除了分享档案系统外,也可以分享打印机喔,我们研究室好几部计算机就是直接以 Linux 分享的打印机来印制报告的。您会说『啊 Windows 也可以办的到啊!没有什么了不起的!』是啊。但是因为 Linux 做为服务器主机时,鸟哥认为 Linux 毕竟还是比较稳定一点,可以 24 小时且全年无休的努力工作吶。此外,因为目前透过『网络上的芳邻』来攻击局域网络的 Windows 操作系统的计算机病毒实在是太多了,防不胜防, Linux 对于这样的攻击并没有很大的影响 (因为常见的攻击手法均针对 Windows 而来~),所以也比较安全一些说~
SAMBA 的应用挺广泛的,尤其对于局域网络内的计算机来说,更是一项不可多得的好用的服务器,更多的应用您可以自行发掘吶!
NetBIOS 通讯协议
事实上,就像 NFS 是架构在 RPC Server 上面一样, SAMBA 这个档案系统是架构在 NetBIOS ( Network Basic Input/Output System, NetBIOS )这个通讯协议上面所开发出来的。既然如此,我们当然就要了解一下 NetBIOS 啰!最早 IBM 发展出 NetBIOS 的目的仅是要让局域网络内少数计算机进行网络连结的一个通讯协议而已,所以考虑的角度并不是针对大型网络,因此,这个 NetBIOS 是无法跨路由的 (Router/Gateway)。这个 NetBIOS 在局域网络内 ( Local Area Network, LAN ) 实在是很好用,所以微软的网络架构就使用了这个咚咚来进行沟通的吶!而 SAMBA 最早发展的时候,其实是想要让 Linux 系统可以加入 Windows 的系统当中来分享使用彼此的档案数据的,所以当然 SAMBA 就架构在 NetBIOS 发展出来啰。
不过,如果单纯的使用 NetBIOS 而已,偏偏 NetBIOS 是无法跨路由的,那么该服务器的使用范围不就受限相当的多了?好在,我们还有所谓的 NetBIOS over TCP/IP 的技术呢!这是什么样的技术啊?!举个例子来说好了,我们知道 TCP/IP 是目前网络连接的基本协议,现在,我们将 NetBIOS 想成是一封明信片,这个明信片只能让您自己欣赏而已,如果今天我们要将这个明信片送到远方的朋友那边时,呵呵!就需要透过邮件系统 ( 例如邮局啦、国际快递啦等等的 ) 来传送了!这个 TCP/IP 就可以视为邮件传递系统啦!透过这个 NetBIOS over TCP/IP 的技术,我们就可以跨路由的使用 SAMBA 服务器所提供的功能咯!当然啦,目前 SAMBA 还是比较广泛的使用在 LAN 里面说。注:或许您会发现在 Windows 网络设定里面常常看到 NetBEUI 这个咚咚,那是什么呢?事实上,那个是 NetBIOS Extened User Interface 的简写,也是 IBM 在 NetBIOS 发展出来之后的改良版本。虽然这两者的技术不太相同,不过,我们只要知道一些简单的概念就可以了!所以,在这里我们不针对 NetBEUI 来介绍。
SAMBA 使用的 daemons
知道了 SAMBA 的主要目的是让 Linux 主机加入 Windows 的网络系统当中来分享使用彼此的数据,而 Windows 使用的是 NetBIOS 这个通讯协议,所以说,SAMBA 主要是使用 NetBIOS over TCP/IP 的技术。好了,我们再来谈一谈,那么 SAMBA 在 Linux 操作系统上面工作时,需要启用什么服务呢 ( daemons )?让我们先以 Windows 的『网络上的芳邻』来做简单的说明:
了解了呴,同样的 SAMBA 主机就使用两个 daemons 来管理这两个不同的服务:
所以啰, SAMBA 每次启动至少都需要有这两个 daemons 喔!这可不要忘记啰! ^_^而当我们启动了 SAMBA 之后,主机系统就会启动 137, 138, 139 三个 port ,且同时会有 UDP/TCP 的监听服务喔!这可不要忘记了!因为后面设定防火墙的时候,还会使用到这三个 port 的呢!
联机模式的介绍 ( peer/peer, domain model )
SAMBA 主机的应用相当的广泛,而且可以依照不同的网域联机与使用者账号、密码的控管方式不同,来加以不同的类别应用,例如最常见的 Workgroup 及 Domain 两种方式的联机模式呢!底下我们就是要来谈一谈这两种最常见的局域网络的联机模式 peer/peer 及domain model。
各种架构适用的环境与适用的人都不相同,并没有那个是最好啦!请依照您的工作环境来选择联机的模式啰!当然, SAMBA 可以达到上述两种模式的啦!底下我们会分别来介绍喔!
套件安装:
-
- samba:这个套件主要包含了 SAMBA 的主要 daemon 档案 ( smbd 及 nmbd )、 SAMBA 的文件档 ( document )、以及其它与 SAMBA 相关的 logrotate 设定文件及开机预设选项档案等;
- samba-common:这个套件则主要提供了 SAMBA 的主要设定档 (smb.conf) 、 smb.conf 语法检验的测试程序 ( testparm )等等;
- samba-client:这个套件则提供了当 Linux 做为 SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 档案格式的执行档 smbmount 等等。
- http://ftp.nsysu.edu.tw/Unix/Samba/
使用 RPM 来安装
使用 RPM 来安装真是一点都不难啦!不过,要注意一下安装的套件名称就是了,因为不同的 distribution 对于 RPM 档案的命名都不太一样!举个例子来说, Red Hat 9 对于 SAMBA 这个服务器总共需要至少三个套件,分别是:
不过,在 Mandrake 9.1 当中,则将 samba 这个套件又分为 samba-server 与 samba-doc 两个套件,所以在 MDK 9.1 则有四个套件需要安装: samba-server, samba-doc, samba-common, samba-client 。
RPM 的安装不用再介绍了吧?!请拿出您的光盘, mount 上他,然后再将里头的 samba 套件给他 RPM 上去即可!在最后检验的时候,您的系统应该有点像底下这个样子(以 Red Hat 9 为例):
[root@test root]# rpm -qa | grep samba
samba-common-2.2.7a-8.9.0
redhat-config-samba-1.0.4-1
samba-2.2.7a-8.9.0
samba-client-2.2.7a-8.9.0
注意一下,上面显示的例子是 Red Hat 9 的档案,其中那个 redhat-config-samba
是 Red Hat 额外提供的设定功能,可以不用安装他啦!
使用 Tarball 来安装
一般来说,因为各个 distribution 提供的 SAMBA 的功能都差不多,所以实在没有必要使用 Tarball 来进行额外的安装与设定,不过,如果您还是想要自己建置自己的 SAMBA 的话,可以到 SAMBA 的官方网站上下载 samba 的原始程序代码,然后在自己的机器上面编译。不过,连到国外去总是有点慢,建议可以到中山大学下载最新的 SAMBA 原始码:
目前 ( 2003/07/20 ) 最新的版本是 2.2.8a 这个版本,您可以下载 samba-2.2.8a.tar.gz 这个档案,然后将他解开,解开后,记得察看一下 samba-2.2.8a 里面的 README 喔!接下来,您就可以这样编译看看:(注:底下的测试是在 Red Hat 9 上面进行的,如果您的系统并不是 Red Hat 9 时,请注意 source 那个目录底下的 config.log 那个档案,里面会记录相关的错误讯息喔!)
[root@test root]# wget http://ftp.nsysu.edu.tw/Unix/Samba/samba-2.2.8a.tar.gz
注:上面的网址只是一个范例,请自行到中山大学下载!
[root@test root]# cd /usr/local/src
[root@test src]# tar -zxvf /root/samba-2.2.8a.tar.gz
这个时候会有一个目录跑出来: /usr/local/src/samba-2.2.8a
[root@test src]# cd samba-2.2.8a #(在这个目录中察看一下 README 喔!)
[root@test samba-2.2.8a]# cd source
[root@test source]# ./configure --prefix=/usr/local/samba /
> --with-automount --with-smbmount --with-pam /
> --with-mmap --with-quotas --with-libsmbclient
还是要重复的给他强调一下:
1. 请先以 ./configure --help 察看一下 configure 的一些相关的参数用法
2. 如果发生任何错误,请不要往下进行 make 的动作,因为还是不对的!
3. 万一发生任何错误时,通常是由于一些函式库找不到的缘故,请参考此目录
下的 config.log 这个档案的内容,里面会记录一些错误的历程。
[root@test source]# make #(开始进行编译!)
这个过程会花一些时间,因为他会将原始码 (source code) 以您刚刚的设定
并以 gcc 这个 compiler 来进行编译喔!所以会花一些时间的啦!
[root@test source]# make install
将刚刚编译完成的可执行 binary 档案安装到 /usr/local/samba 里面去!
在这个例子当中,未来您在设定 SAMBA 时,必需要到 /usr/local/samba 当中喔!
一般来说,除非您的 Linux distribution 已经相当的老旧了 (例如 Red Hat 6.x 以前的版本),并且在旧的系统上面正在正常的运作一些服务,而仅想要增加 SAMBA 的服务,那就只好使用 Tarball 的方式来安装 SAMBA ,否则的话,蛮强烈的建议直接以 RPM 的方法来安装您的 SAMBA 服务器软件即可!因为既简单方便,又容易统一设定喔! ^_^
Server 端的设定
-
- 先在自己的计算机上面安装必要的协议:那就是 NetBIOS ( 有时候会是 NetBEUI 喔!)的安装咯!直接在网络设定里面设定好即可;
- 再来则是在档案总管里面设定好要分享的目录、磁盘或者是装置(如打印机);
- 然后,给这个分享出来的咚咚一组账号及密码(如果需要的话),让外部使用者可以使用这组账号密码登入 Windows 主机;
- 然后就开始运作了!
- 先参考 局域网络的设定 那一章节,先搞定硬件的联机吧!
- 之后,先在 linux 上面的 SAMBA 设定档 smb.conf 里面设定好主机所支持的各项功能,例如是否需要密码、是否支持 PDC 等等;
- 然后在 smb.conf 的后半部当中设定好想要分享的目录与该目录的属性;
- 如果在步骤 2 里面的 smb.conf 档案内设定的分享方法是需要账号与密码的登入时,就以 smbpasswd 建立使用者的账号与密码;
- 启动 smb 的服务,开始运转啰!
- SAMBA 的设定档:
在较早期的版本中, SAMBA 的设定档都直接放置在 /etc 底下,后来的版本则将设定档通通放置到 /etc/samba 底下去了 ( 有的 distribution 放在 /etc/smb 有的则是 /etc/samba.d ,请使用 locate 搜寻! )。在 /etc/samba 底下的几个重要的设定档有:
- /etc/samba/smb.conf:这个就是 SAMBA 最主要的设定档了!在较为简单的设定当中,这也是唯一的一个设定档!此外,这个档案本身就含有相当丰富的说明,所以,在设定之前,请使用 vi 好好的详细的观看一下这个档案吧!这个设定档主要的设定分为两部份,分别是 [global] 这个设定主机功能的项目,以及接下来的每个分享出去的目录的属性设定。我们会在后续的部分进行更多的说明。
- /etc/samba/lmhosts:这个档案的主要目的在对应 NetBIOS name 与该主机名称的 IP ,事实上,他有点像是 /etc/hosts 的功能!只不过这个 lmhosts 对应的主机名称是 NetBIOS name 喔!不要跟 /etc/hosts 搞混了!由于目前 SAMBA 的功能越来越强大,所以通常只要您一启动 SAMBA 时,他就能自己捉到 LAN 里面的相关计算机的 NetBIOS name 对应 IP 的信息,因此,这个档案通常可以不用设定了!
- /etc/samba/smbpasswd:这个档案预设并不存在啦!他是 SAMBA 预设的使用者密码对应表。当我们设定的 SAMBA 服务器是较为严密的,需要使用者输入账号与密码后才能登入的状态时,使用者的密码预设就是放置在这里咯 ( 当然啰,您可以自行在 smb.conf 里面设定密码放置的地方及密码文件名,不过,我们这里都以预设的状态来说明 ) 。比较需要注意的是,这个档案因为包含了使用者的密码,所以,当然权限方面要较为注意啦!这个档案的拥有者需要是 root ,且权限设定为 600 才行喔!
- SAMBA 的执行档:
SAMBA 的执行档可就多了!一般来说,做为 SAMBA Server 的执行档有 testparm, smbd, nmbd, smbpasswd,至于做为 SAMBA Client 的执行档主要则是:smbmount, smbclient。
- smbd 与 nmbd:还记得我们在原理部分提到的 SAMBA 需要启动的 daemons 吧?!呵呵!这两个执行档就是那两个主要的 daemons 啰!每次启动 SAMBA 都会使用到的两个执行档啦!
- testparm:当我们设定完成了 smb.conf 这个主要设定档之后,而想要查看一下 SAMBA 的所有设定参数与 smb.conf 的设定项目是否正确时,就需要使用这个 testparm 来查看啰 ( 其实就是 test parameters 的简写!)!所以说,每次在修改完 smb.conf 之后,请务必要使用 testparm 查看看是否有设定错误喔!
- smbpasswd:如果您的 SAMBA 设定的较为严格,需要规定使用者的账号与密码,那么那个密码档案的建立就需要使用 smbpasswd 来建置才可以的喔!所以这个指令与建立 SAMBA 的密码有关咯!
- smbclient:当你的 Linux 主机想要藉由『网络上的芳邻』的功能来查看别台计算机所分享出来的目录与装置时,就可以使用 smbclient 来查看啦!这个指令也可以使用在自己的 SAMBA 主机上面,用来查看是否设定成功哩!
- smbmount:在 Windows 上面我们可以设定『网络磁盘驱动器』来连接到自己的主机上面,同样的,在 Linux 上面,我们可以透过 smbmount 来将远程主机分享的档案与目录挂载到自己的 Linux 主机上面哪!不过,其实我们也可以直接使用 mount 这个指令来进行同样的功能就是了。
- SAMBA 的相关目录:
这部份需要较为注意的应该算是 SAMBA 的『登录档』吧!因为最近以来,利用『网络上的芳邻』来进行破坏的病毒是越来越多了!而且也有越来越多的搞怪者会以网络上的芳邻的相关漏洞进行入侵的伎俩,所以啰,了解一下登录档放置的地点,并且加以分析,呵呵!可以得到不小的监测呢!
- /usr/share/doc/samba:这个目录包含了 SAMBA 的所有相关的技术手册喔!也就是说,当您安装好了 SAMBA 之后,您的系统里面就已经含有相当丰富而完整的 SAMBA 使用手册了!值得高兴吧! ^_^,所以,赶紧自行参考喔!
- /var/log/samba:这个目录就是 SAMBA 预设的登录文件放置目录了!如果您的 SAMBA 老是设定不起来,又或者怀疑被人家以 port 137~139 入侵的话,就到这里来观察吧!
- /usr/share/samba/codepages:这个目录里面放置的就是各个语言的支持格式。举例来说,想让您的 SAMBA 支持中文吗?那么就需要 codepage.950 这个档案的支持啰!当然啦,在 smb.conf 里面设定即可!
- 在安装 Linux 的时候,建议不需要安装 X Window ;
- 在规划 Linux 时,/home 最好独立出一个 partition ,而且硬盘空间最好能够大一些;
- /home 独立出来的 partition 可以单独进行 quota 的作业,以规范每个使用者能够使用的最大硬盘容量;
- 由于 SAMBA 可以做为打印机服务器,所以建议打印机可以直接连接在 Linux 主机的打印端口 (LPT1);
- 由于 SAMBA 一般来说都仅针对内部 ( LAN ) 主机进行开放,所以,可能的话, SAMBA 主机直接使用内部保留 IP 来设定即可 (Private IP),当然啦, SAMBA 是否使用 private IP 还得视您的整个网域的 IP 网段的特性来规划。以我们研究室来说,因为实验室所有计算机的 IP 都是 Public IP,那么 SAMBA 如果使用 Private IP ,当然大家都无法连接上啊! ^_^
- 如果您的 SAMBA 主机使用 Public IP 时,请特别留意规范好防火墙的设定,尽量仅让 LAN 内的计算机可以联机进来即可,不要对 Internet 开放喔!
- 一个是 [global] 的主机相关设定,这个是每个 SAMBA 主机都需要设定的喔!里面的规定都与 SAMBA 主机的环境有关!
- 至于 [Webpage] 呢?他是什么玩意~这里我们举个实际的例子好了,当您在局域网络内以网络上的芳邻登入某部主机之后,不是会看到该主机所提供的『目录或者装置的名称』吗?!那个 Webpage 就是名称啦!也就是说,当您以网络上的芳邻登入 linux 时,看到的 Linux 所分享出来的目录名称就是『Webpage』啦!不过,这个 Webpage 只是在 SAMBA 服务当中所显示的名称而已,并不是真正的 Linux 档案系统上面的目录!这个 Webpage 所代表的真正的目录要看底下设定项目的『path』设定项目才行!这也就是说,当您在网络上的芳邻登入 Linux 后,看到 Webpage 这个目录,用鼠标将他点下去,接下来看到的内容就是 /var/www/html 这个真正 Linux 档案系统里面的数据咯!
另外,我一开始的范例当中都是针对没有设定防火墙的情况下所进行设定与测试,如果您的环境里面已经有架设防火墙的话,那么您应该要先了解防火墙的架构,并将 SAMBA 需要的 port 给他开放,否则很难测试成功喔!或者直接察看本章节较后面专门谈安全的部分,尤其是 iptables 与 /etc/hosts.allow(deny) 这部份喔!
SAMBA 的套件结构
我们这里以 Red Hat 9 的 SAMBA 套件来介绍他相关的一些设定档与执行档,不过,如果您的 distribution 并不是 Red Hat 9 ,那也没有关系,因为都是大同小异的啦!善用 locate 这个指令去搜寻喔!
主机的规划技巧建议
如果您的 Linux 主机单纯要用来做为档案服务器的话 (File Server) ,那么建议您 Linux 主机就不要安装 X Window 的咚咚,以节省一些硬盘的空间。此外,如果您想要针对不同的使用者开放不同的登入权限,那表示您的 SAMBA 主机将会有很多人物同时进进出出的存取数据文件。为了避免某些使用者占用了大部分的硬盘空间,也为了维护上的便利,这个时候挺建议您将 /home 这个目录独立出一个 parition ,此外,空间也要大一点,因为每个使用者登入 SAMBA 系统的时候,预设都是会进入到个人的家目录的,而 Linux 预设的个人家目录就在 /home 底下,所以吶, /home 是需要大一些些的。
基础的设定流程与 smb.conf 的主要规划
在开始设定 SAMBA 这个服务器之前,我们先来谈一谈应该如何较为简单的设定 SAMBA 吧!因为 SAMBA 的功能很强大,可以做为简单的单一主机控管自己分享出去的资料,也可以做为整个区域内所有计算机的账号管理主机 ( Primary Domain Controller, 这部份我们会在后面进行介绍喔! )。不过,整个 SAMBA 的设定流程倒是没有多大的差异性!嗯!既然 SAMBA 是要让 Linux 加入 Windows 网络上的芳邻的一项工具,那么我们就先来谈一谈,在 Windows 上面,您要如何分享你机器上面的目录给大家使用呢?
整个流程大概就是这么简单吧!事实上,在 Linux 底下的设定也是这么简单的啦!
呵呵!所以会动到的设定档几乎就是只有 smb.conf 这个 SAMBA 的设定档,当然啦,还需要 smbpasswd 来建立使用者的账号与密码就是了! ^_^既然这个 smb.conf 这么重要,我们就得了解一下 smb.conf 啰!
smb.conf 这个档案里面主要是以 [global/share directory] 开始一个主要设定的内容,这个档案里面,『 # 』与『 ; 』都是批注的意思喔!我们先来谈一谈比较重要的 [global] 这个牵涉到 SAMBA 主机的主要设定的内容吧!
[root@test root]# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak.raw
[root@test root]# vi /etc/samba/smb.conf
# 这个档案本身就是很详细的说明档,限于篇幅,我们没有将批注的部分写下来,
# 这里的目的是想让大家了解 smb.conf 的内容规划咯!
[global]
workgroup = birdhouse
server string = Linux Samba Server
netbios name = birdlinux
client code page = 950
printcap name = /etc/printcap
load printers = yes
printing = lprng
log file = /var/log/samba/log.%m
max log size = 500
# 那个 500 数字是 Kb 喔!
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
# 上面的几行当中,注意 [global] ,由 [global] 到底下的 [Webpage] 之间的设定
# 都是 [global] 的设定项目!而 [global] 的主要内容都是与主机的设定有关!
# 比较重要的有底下几个设定值:
# workgroup 工作群组:同一个局域网络内,要具有相同的 workgroup
# netbios name 主机名称:这个主机名称就是 netbios 的名字!请注意,如果你
# 没有设定 netbios name 的话,预设的 NetBIOS name 会以
# HOSTNAME 来替代!
# server string 这个是主机的说明,随便写写没关系!
# security 这个重要,是用来规定 SAMBA 主机的安全登入项目,有底下几种:
# share :不进行安全登入,亦即没有设定账号与密码
# user :设定主机的密码文件作为登入的验证档案,这与底下的
# smb passwd file 有关喔!
# domain :就是让您的 SAMBA 作为 PDC 啰!
# log file 登录文件放置的目录所在喔!
# 其它相关的几个设定项目请参考 man 5 smb.conf 我们底下也会列出几个常用的
# 设定项目说~
[Webpage]
comment = My Home Page
path = /var/www/html
read only = no
public = yes
writable = yes
create mode = 0664
directory mode = 0775
# 这个部分则是针对每个分享的目录或者是装置进行权限方面的规定了!
# 几个简单的设定项目有:
# comment :这个目录的说明!
# path :这个项目真正的 Linux 档案系统里面的目录,请看底下的说明
# read only:是否只读?
# public :是否让所有可以登入的使用者看到这个项目?
# writable :是否可以写入?!这里需要注意一下喔!那个 read only 与 writable
# 不是两个蛮相似的设定值吗?如果 writable 在这里设定为 no ,亦即
# 不可写入,那跟 read only 不就互相抵触了?!那个才是正确的设定?
# 答案是:最后出现的那个设定值为主要的设定!
# create mode 与 directory mode 都与权限有关的咯!
注意一下,在上面的案例中,我们只有两个主要的设定群:
- 关于变数:
在上面的例子当中,我们有看到一个比较有趣的设定是『log file = /var/log/samba/log.%m』,怎么会有个 %m 啊?!呵呵!那个就是 SAMBA 里面的变量值啦!在 SAMBA 当中,为了便利使用者的设定,所以会有许多的变量值提供给系统管理员来使用,主要的变量有底下几个:
- %S:取代目前的设定项目值,所谓的『设定项目值』就是在 [ ] 里面的内容!举例来说:
[homes]
valid users = %S
....
- %m:代表 Client 端的 NetBIOS 主机名称喔!例如上面案例的登录档!
- %M:代表 Client 端的 Internet 主机名称喔!就是 HOSTNAME。
- %L:代表 SAMBA 主机的 NetBIOS 主机名称。
- %H:代表使用者的家目录。
- %U:代表目前登入的使用者的使用者名称
- %g:代表登入的使用者的群组名称。
- %h:代表目前这部 SAMBA 主机的 HOSTNAME 喔!注意是 hostname 不是 NetBIOS name 喔!
- %I:代表 Client 的 IP 咯。
- %T:代表目前的日期与时间
至于相关的变量运用,我们会在底下的设定当中略做介绍喔!
没有防备的 SAMBA 分享档案设定
所谓的『没有防备的 SAMBA 分享档案』就是你启用了一个 SAMBA Server ,设定了分享的目录,但是却完全没有规范权限,也就是任何人都可以登入这个系统的意思啦!事实上是不太应该介绍这个没有防备的 SAMBA 主机的!因为.....太过于危险了!不过,有些没有连上 Internet 的局域网络内还是可以尝试看看的。所以这里我们先以较为简单的无防备 SAMBA 主机作为第一个 SAMBA 的设定介绍吧!
- 主机预计分享的状况:
在整个 LAN 里面的工作群组 ( workgroup )为:birdhouse
我的 Linux 主机 NetBIOS 名称为 ( netbios name ):birdhome
安全设定为没有防备的 share (share 为 smb.conf 里面 security 的设定值)
仅仅分享 /tmp 这个目录而已~
- 设定 lmhosts :
事实上,这个档案目前是可以不用设定了!不过,如果保险一点来看,设定一下也没有什么不好的!在这个档案当中,您要设定的数据很简单,就是每一部 PC 的 NetBIOS name 以及对应的 IP 即可!以我为例:[root@test root]# vi /etc/samba/lmhosts
127.0.0.1 localhost
192.168.0.100 birdhome
192.168.0.110 birdbrother1
192.168.0.120 birdbrother2
- 开始设定 smb.conf:
在这个例子当中,我们仅分享出 /tmp 而已,并且没有设定任何的登入权限的限制喔!而因为 smb.conf 原本的设定当中就已经开放出很多的目录,所以您必须要将其它的分享先关闭!关闭的方法有很多,您可以将 smb.conf 备份后移除,重新建一个,或者是将没有用到的那一行以『;』或者是『#』将他批注掉喔!(比较详细的说明请参考前几个章节的『基础设定流程』里面的介绍!)[root@test root]# cd /etc/samba
[root@test samba]# cp smb.conf smb.conf.bak
# 玩服务器最重要的一个概念就是『有备无患』啊!
# 所以,先将重要的数据给他备份下来! ^_^
[root@test samsa]# vi smb.conf
# 底下的设定为最基础的设定值!最重要的地方在于 security = share 的地方!
[global]
workgroup = birdhouse
netbios name = birdhome
server string = Bird's testing SAMBA Server
client code page = 950
# 这个 client code page 的设定有趣的很!因为 SAMBA 支持多语系的编码,
# 我们习惯的编码为 cp590 亦即是 code page 950 这个编码,所以,
# 想要让您的 SAMBA 可以正确的在 Windows 上面显示出中文,就得加入
# client code page = 950 喔! (如果没有设定,那么默认值是 850 呢!)
# 如果 max log size = 0 的话,那表示登录档档案大小没有限制!
log file = /var/log/samba/log.%m
max log size = 0
security = share
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = 192.168.0.100
dns proxy = no
[tmp]
comment = Temporary file space
path = /tmp
# 真正的开放出来的路径在这里!
read only = no
public = yes
# 上面两个设定在告诉大家,不但可以存取(read only = no)
# 也可以让大家查询(public = yes)!
[root@test samba]# grep -v '^#' smb.conf |grep -v '^;'|grep -v '^$'
# 这个动作在确认一下上面的设定是否相同,因为有时候可能会忘记将某个
# 设定给批注掉呢! ^_^ - 测试 smb.conf 设定值与启动 SAMBA :
设定好了最主要的设定档 smb.conf 之后,接下来就得要开始测试与启动 SAMBA 啰!动作也是很简单的:[root@test samba]# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[tmp]"
Loaded services file OK.
Press enter to see a dump of your service definitions <==这里按下 Enter
# Global parameters
[global]
client code page = 950
code page directory = /usr/share/samba/codepages
workgroup = birdhouse
netbios name = birdhome
netbios aliases =
netbios scope =
server string = Bird's test SAMBA Server
interfaces = 192.168.0.100
bind interfaces only = No
security = SHARE
encrypt passwords = No
.....
[tmp]
comment = Temporary file space
path = /tmp
read only = No
guest ok = Yes
# 你应该会看到如上的画面,这个 testparm 可以用来察看所有 SAMBA 的属性,
# 这些属性很多都是默认值!如果没有 smb.conf 里面设定时,就是默认值,
[root@test samba]# /etc/rc.d/init.d/smb restart
Shutting down SMB services: [ OK ]
Shutting down NMB services: [ OK ]
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
# 请注意,上面 /etc/rc.d/init.d/smb 这个档名是 Red Hat 的设定值,
# 很多其它的套件不见得是使用这个档名的!例如 OpenLinux 使用 samba 这个,
# 所以请您务必使用 RPM 的相关指令来检验一下文件名称,或者使用
# <tab> 按键来让系统自动补齐文件名,就可以知道是什么档名啰!
# 另外,如前所说的, SAMBA 会启用两个 daemons ,所以这里显示两个 OK!
[root@test samba]# netstat -tlunp | grep ':13'
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 4307/smbd
udp 0 0 192.168.0.100:137 0.0.0.0:* 4311/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 4311/nmbd
udp 0 0 192.168.0.100:138 0.0.0.0:* 4311/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 4311/nmbd
# 如果看到这样,呵呵!就应该没有问题啦!
- Client 端的测试:
Client 端的测试在 Windows 或 Linux 当中都差不多,所以我将他独立到另一个章节来说明,底下仅列出在本机上面的自我测试(亦即本机是主机,同时也是 client 就是了!)[root@test root]# smbclient -L //birdhome
added interface ip=192.168.0.100 bcast=192.168.0.255 nmask=255.255.255.0
Password: <==这里按 Enter
Domain=[birdhouse] OS=[Unix] Server=[Samba 2.2.7a-security-rollup-fix]Sharename Type Comment
--------- ---- -------
tmp Disk Temporary file space
IPC$ IPC IPC Service (Bird's testing SAMBA Server)
ADMIN$ Disk IPC Service (Bird's testing SAMBA Server)Server Comment
--------- -------
birdhome Bird's testing SAMBA ServerWorkgroup Master
--------- -------
birdhouse birdhome
这样就简单的设定完毕了!大家都可以使用网络上的芳邻登入您的 Linux 主机,并且使用 /tmp 这个目录喔!而,如果您想要增加其它的目录开放给大家使用时,就请自行模仿 [tmp] 底下的设定值,不过,需要特别留意的仅是 Linux 的档案权限与 SAMBA 设定的权限关系!这个问题我们会在安全性与问题克服里面进行详细的说明喔! (注:这个问题最常发生在使用者身上,因为『即使 SAMBA 主机设定您可以无限制的使用某个目录下的档案,但是是否能够使用,仍然得视登入 SAMBA 的该使用者对于 Linux 的档案系统是否有存取的权限』喔!)
设定需要使用者登入的 Workgroup
上面介绍了没有防备的 SAMBA 主机之后,您是否觉得:『呵呵!SAMBA 还真是不错用』啊!是没错啦!设定方面确实很简单,然而还是有缺点的,就是万一有外人不小心在网络上的芳邻上面点一点、按一按,刚好进入到您的主机系统当中,由于您的主机系统是没有防备的,所以他可以自由的进出您的主机,也可以随意的将数据下载(或者是上传)到您的 SAMBA 主机上面,更可能由于局域网络内有 Nimda 等网络芳邻攻击型病毒,而将病毒硬塞一份到您的 SAMBA 主机当中,使得您的局域网络里面的网络频宽被吃掉之外,还可能使其它的局域网络内的 Windows PC 操作系统被搞破坏掉~哇!真是问题多多啊!所以啰!不建议在公共的场合底下设定无防备的 SAMBA ,即使是私人单位内部,还是不建议架设上面的没有任何防备措施的 SAMBA 主机喔!
所以呢,接下来,我们要介绍的就是需要使用者提供账号密码才能登入 SAMBA 主机的设定方法咯!使用者必须要能够提供账号与密码供主机判定身份,若身份合格,才能够使用主机的相关资源喔!底下我们要介绍的是比较简单的 peer/peer 的联机 ( 相关的联机模式,请参考前面的联机模式一节 ),此外,使用的还是 workgroup 的方式来设定的喔!
- 主机预计分享的状况:
在整个 LAN 里面的工作群组 ( workgroup )为:birdhouse
我的 Linux 主机 NetBIOS 名称为 ( netbios name ):birdhome
安全设定为工作群组类型 user
分享家目录与特定目录 /home/public 给所有使用者使用
- 设定 lmhosts:
同样的,我有三部主机,请参考上一章节的设定值:
- 开始设定 smb.conf 并检验 smb.conf 的设定参数:
在这个案例当中,我们要分享的数据有(1)每个人的家目录;(2) /home/public 这个特定目录。我们知道 smb.conf 有个 path 来指定给 SAMBA 真正取用的目录,但是在这个案例中,我们要指定的是每个人的家目录吶!怎么设定好家目录呢?呵呵!就使用变量来给他设定好啊!例如底下的说明:[root@test samsa]# vi smb.conf
[global]
# 底下为一般设定项目(主机名称、工作群组等)
workgroup = birdhouse
netbios name = birdhome
server string = Bird's testing SAMBA Server
client code page = 950
# 与安全有关的登入信息项目,这个 security = user 一定要设定,
# 而密码需加密,此外,密码档案放置在 /etc/samba/smbpasswd 里面,
# 这个档案需要自行设定起来喔!等一下会介绍!
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
# 一些与安全性有关的设定,其中, hosts allow 较为有趣一点!
# 当您设定了 hosts allow 之后,未在 hosts allow 里面规定的 IP
# 将无法登入 Linux 的 SAMBA 主机喔!特别留意吶!如果您想要完全开放 IP,
# 或者使用防火墙管理,那就不要设定 hosts allow 了!
hosts allow = 192.168.0. 127.
log file = /var/log/samba/%m.log
max log size = 0
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = 192.168.0.100
dns proxy = no
# 底下则设定每个使用者的家目录!
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
# create mode 指的是新建立档案的权限,而 directory mode 则是新建目录的权限
# 至于 valid users 则是有权限进入者,这里设定为 %S 喔!所以,
# 每个使用者就可以进入自己的家目录了!
[public]
comment = Public Stuff
path = /home/public
public = yes
writable = yes
[root@test samba]# grep -v '^#' smb.conf |grep -v '^;'|grep -v '^$'
# 这个动作在确认一下上面的设定是否相同,因为有时候可能会忘记将某个
# 设定给批注掉呢! ^_^
[root@test samba]# mkdir -p /home/public
# 上面既然有提到要开放 /home/public ,当然,这个目录就必须要存在啊!
- 设定使用者账号与密码:
设定使用者账号是很重要的一环,因为设定错误的话,当然也就任何人都没有办法登入的!在这里我们必须先要说明一下 Linux 的档案系统与 SAMBA设定的使用者登入权限的相关系!
- 在 Linux 这个系统下,任何程序都需要取得 UID 与 GID ( User ID 与 Group ID ) 的身份之后,才能够拥有该身份的权限,也才能够适当的进行存取档案等动作!
- 关于 Linux 这个系统的 UID 与 GID 与账号的相对关系,通通记录在 /etc/passwd 这个档案当中;
- SAMBA 仅只是 Linux 底下的一套软件,使用 SAMBA 来进行 Linux 档案系统时,还是需要以 Linux 系统下的 UID 与 GID 为准则!
如果上面这几点说明您没有问题了,现在就来看一下当我们在 Windows 计算机上面以网络上的芳邻来连接 Linux 并且进行数据的存取时,会是怎样的一个情况呢?
- 我们需要透过 SAMBA 所提供的功能来进行 Linux 的存取,而 Linux 的存取是需要取得 Linux 系统上面的 UID 与 GID 的,因此,我们登入 SAMBA 主机时,所利用 SAMBA 取得的其实是 Linux 系统里面的相关账号!这也就是说,在 SAMBA 上面的使用者账号,必须要是 Linux 账号中的一个!
如果上面您可以理解了,那么就可以知道底下的这个基本规则:『在 SAMBA 主机所提供能够登入的账号,必须要在 /etc/passwd 里面存在!』,也就是说,如果您想要使用 ken 登入 SAMBA 主机,那么在 Linux 上面就必须要存在有 ken 这个账号,如此一来,当您以 ken 登入 SAMBA 主机时, SAMBA 才能够去 /etc/passwd 找到相对应的 UID 与 GID ,来提供您登入 SAMBA 之后取得的程序的相关权限!这个咚咚相当的重要,如果这里搞不清楚,在后面的一些目录权限的设定就会通通搞乱掉了!
所以说,如果您需要以 bird 这个账号登入 SAMBA 时,并且 Linux 本身并没有 bird 这个使用者,呵呵!那么您就必须要使用 useradd 来使 Linux 系统多出一个名为 bird 的账号,然后才可以让该账号登入 SAMBA 服务器喔!并且,并不是所有在 /etc/passwd 里面的账号都可以用来登入 SAMBA 主机,必须要使用 SAMBA 的相关功能 (就是 smbpasswd 这个指令) 所新增到 SAMBA 密码设定文件里面的账号才可以使用 SAMBA 登入喔!废话不多说,来假设一个例子吧!假设 Linux 已经具有 bird, bigbird, smallbird 三个账号,而我只想要让 bird 使用 SAMBA 而已,其它两个账号不想开放,那么我就只要这么做即可:0. 根据 smb.conf 的设定,建立一个密码文件!
如果您是第一次建立 SAMBA 的使用者,才需要进行这个动作:
因为我们在 smb.conf 里面设定密码 smb passwd file = /etc/samba/smbpasswd
[root@test root]# cd /etc/samba
[root@test samba]# touch smbpasswd
[root@test samba]# chown root:root smbpasswd; chmod 600 smbpasswd
# 请注意, smbpasswd 这个档案记录了能够使用 SAMBA 服务器的使用者账号
# 与密码,所以当然只有 root 才能够进行读写了!特别留意其权限啊!
1. 开始建立密码:
[root@test samba]# smbpasswd -a bird
New SMB password: <==在这里输入 bird 的密码
Retype new SMB password: <==再输入一遍 bird 的密码
Added user test.
# 请特别留意, SAMBA 的密码是放在 /etc/samba/smbpasswd 这个档案内,当然,
# 您可以更改这个档名 (在 smb.conf 里面改),但是, Linux 系统的账号密码
# 是放在 /etc/shadow ,这也就是说, SAMBA 服务器的密码与 Linux 底下的
# 账号密码并不一定要相同的!至于 smbpasswd 的使用大致上有几个参数:
2. smbpasswd 之语法解释
语法:smbpasswd [-adem] username
参数:
: 如果都没有加上任何一个参数,亦即『smbpasswd bird』时,这表示:
修改 SAMBA 密码文件(/etc/samba/smbpasswd)里面的 bird 这个账号的密码!
也就是说,密码文件里面已经存在一个 bird 的账号了!
-a : 在 smbpasswd 密码文件里面新增一个使用者
-d : 让在 smbpasswd 密码文件里面的某个账号的使用者暂时无法使用 SAMBA
当多了 -d 的参数时,在 smbpasswd 里面某个字段会多出一个 D 的参数,
代表该账号目前无法使用喔!
-e : 与 -d 参数相反,让某个账号恢复使用!
-m : 该 username 为机器代码(Machine Account),这个与 domain model 有关!
范例:
[root@test samba]# more smbpasswd
bird:1001:01FC5A6BE7BC6929AAD3B435B51404EE:0CB6948805F797BF2A82807973B89537:[UX ]:LCT-3F1ECFE6:
[root@vbird samba]# smbpasswd -d bird
Disabled user bird.
[root@vbird samba]# more smbpasswd
bird:1001:01FC5A6BE7BC6929AAD3B435B51404EE:0CB6948805F797BF2A82807973B89537:[DUX ]:LCT-3F1ED105:
# 特别留意,当使用 -d 之后,该账号会在密码档案里面的中括号之特殊字段中,
# 多出一个 D 的参数,让该账号暂时无法使用喔!
- 重新启动 SAMBA 服务器与 Client 端的测试:
重新启动 SAMBA 很简单啊,还是使用 /etc/rc.d/init.d/smb 来动作,至于 client 端的测试就需要其它的要求了![root@test samba]# testparm
[root@test samba]# /etc/rc.d/init.d/smb restart
[root@test samba]# smbclient -L //127.0.0.1
added interface ip=192.168.0.100 bcast=192.168.0.255 nmask=255.255.255.0
Password: <==直接按 Enter
Anonymousloginsuccessful
Domain=[BIRDHOUSE] OS=[Unix] Server=[Samba 2.2.7a-security-rollup-fix]
Sharename Type Comment
--------- ---- -------
public Disk Pulic Stuff
IPC$ IPC IPC Service (Bird's testing SAMBA Server)
ADMIN$ Disk IPC Service (Bird's testing SAMBA Server)
...(略)...
# 注意看上面,因为我们没有在 smbclient 指定登入者,所以登入
# 后的身份会被指名为匿名者 anonymous 喔!由于我们有开放 public 给大家
# 浏览,所以还是看的到咚咚的!(注:我有省略一些输出!)
[root@test samba]# smbclient -L //127.0.0.1 -U bird
added interface ip=192.168.0.100 bcast=192.168.0.255 nmask=255.255.255.0
Password: <==这里请务必输入正确的 bird 的 SAMBA 密码!
Domain=[BIRDHOUSE] OS=[Unix] Server=[Samba 2.2.7a-security-rollup-fix]
Sharename Type Comment
--------- ---- -------
public Disk Pulic Stuff
IPC$ IPC IPC Service (Bird's testing SAMBA Server)
ADMIN$ Disk IPC Service (Bird's testing SAMBA Server)
bird Disk Home Directories
...(略)...
# 仔细分辨一下上下两个不同点。在多加了 -U username (-U bird 那个地方)
# 由于登入者的身份变成 bird 了,因此我们就可以看到 bird 的家目录了!
# 也就是粗体字那一行啊!这样可以清楚的知道了?! - 关于权限的简略说明:
由前面在介绍 smbpasswd 时,您大概已经可以知道 SAMBA 账号(在 /etc/samba/smbpasswd 里面)与 Linux 账号(在 /etc/passwd 里面)的差异咯,若当我们以 SAMBA 登入 Linux 主机后,会取得一个使用者的相关权限,此外,SAMBA 也有自订的权限(writable, read only, public 等等的参数,均会影响登入者的权限喔!),这些权限的相关性为何?!反正有个大前提一定要知道的,无论您使用任何 process 在 Linux 上面,该程序都需要符合 Linux 系统的权限概念,也就是说, Linux 本身的档案权限大于 SAMBA 对于使用者所设定的权限!
举上面的例子来说好了,那个 /home/public 我们在 SAMBA 中设定的是 writable 喔!所以,当我以 bird 登入 SAMBA 服务器后,对于 /home/public 应该是具有可以读写的能力的!但是,偏偏刚刚我是以 root 的身份来建立 /home/public ,因此该目录仅有 root 可以写入(权限为 755 ),因此, bird 是无法在 /home/public 底下进行写入的动作的!所以,当我以网络上的芳邻并以 bird 登入 Linux 的 SAMBA 服务器,结果想要将数据传输到 /home/public ,屏幕就会显示『您没有权限写入』之类的字眼~不要怀疑,绝对就是『Linux 权限的问题』啦!因此,这个时候请利用你的 chown 或者 chmod 指令来修改一下该目录的权限吧!重要重要喔!
- 利用编辑 smb.conf 来多开放其它的目录,并且特别注意 Linux 在该目录下的权限喔!请使用 chown 与 chmod 吧!
- 利用 smbpasswd 来新增其它使用者到 /etc/samba/smbpasswd 里面去,如果该账号并没有出现在 /etc/passwd 里面,请先以 useradd 新增该账号;
- 不论进行完任何的设定,请先以 testparm 进行确认,之后以 /etc/rc.d/init.d/smb restart 来重新启动!
事实上,SAMBA 的一般用途就是在这个联机的模式中!多使用 SAMBA 来分享您的资源吧!我都是使用 SAMBA 来做为远程服务器与我的工作机互通有无的重要媒介说~
设定较大型网域的 Linux Samba PDC ( Primary Domain Controller )主机
上面介绍了两种方法,比较常用的还是那个需要使用者登入信息的工作群组方法,该方法相当的适合小型的网域呢!但是,如果是比较大型的网域,那就比较伤脑筋了~就如同在原理部分我们提到的联机方法里面的 domain model 的模式(请参考原理部分的说明)。一般来说,如果在比较大型的网域系统当中,通常系统管理员都会选择 domain model 的联机模式,如此一来在使用者账号与密码以及登入后取得的计算机资源控管上显的相当的容易。不过,这种 domain model 比较常见于 Windows NT 的架构当中,也就是说,控管整个 domain 里面的使用者账号与密码,其实是由 Windows NT 服务器来管理的吶!所以说,现在如果我们想要使用 SAMBA 主机作为整个 domain 里面的的一员,并且 SAMBA 主机本身并不管理自己的账号与密码,那么 SAMBA 自然就得要将账号与密码的查询转给另一部提供账号、密码查询的主机来服务与辨识身份啦!当然啰,如果您的网域当中并没有 Windows NT 的 PDC 主机,那么使用 SAMBA 作为 PDC 主机,以提供整个网域的账号与密码的验证工作,也是一个可行的方案!底下我们要介绍的,就是以 SAMBA 当作 PDC 的一个简易的设定!请留意喔,我们底下说明的是一个简单的 PDC 主机,如果您还需要额外的磁盘分享,请发挥您自己的创意喔!(修改 smb.conf )
- 预计达成的架构:
就如同上面的图示,我们在 birdhouse 这个网域当中,连同 PDC 这部 birdhome 总共有四部计算机,整个 birdhouse 的网域是由 birdhome 这部 Linux SAMBA 所设定成的 PDC 来掌控的,这部 PDC 需要哪些数据呢?
- 需要有每一部在这个网域内的 PC 的机器代号 (Machine account),这个 Machine account 就是各个主机的 NetBIOS 名称,也就是 bird2000, bird98 等主机名称。不过,请特别留意,在各个 PC 上面的主机名称为 bird2000 与 bird98,但是在 PDC 的账号名称上面,需要加上 $ 在后端,也就是在 PDC 上面需要设定 machine account 成为 bird2000$, 与 bird98$ 才行!
- 由于 Windows NT ( 例如 Windows 2000 这个操作系统 )第一次登入 PDC 时,需要使用系统管理员的身份建立联机,所以, PDC 需要设定 root 这个使用者账号才行!此外, PDC 会去搜寻每部 PC 要登入 PDC 时,他的 machine account ,所以,在 /etc/passwd 与 /etc/sabma/smbpasswd 里面需要同时具有:(1)每个 machine account 的账号; (2)root 这个账号需要加入 smbpasswd 里面; (3)任何想要使用 PDC 登入的该网域的使用者账号,例如我们这个案例的 bird 这个使用者。所以啰,在这个案例中, /etc/passwd 与 /etc/samba/smbpasswd 需要有底下的账号:bird2000$, bird98$, bird, root 至少要有这些账号喔!如果还需要让 bird2, bird3... 等人登入的话,就需要使用 useradd 及 smbpasswd 新增使用者啰!(注:特别特别注意,那个 root 的账号只有在您的网域当中有 Windows 2000 或者是 Windows XP 的操作系统 时才需要加入 /etc/samba/smbpasswd 里面!这是因为第一次登入 PDC 时,需要以 root 的身份来设定好总总的联机才行!)
- 在 SAMBA 这部 PDC 上面需要开放的目录有哪些呢?
/home/samba/netlogon:当使用者在其它 PC 登入 PDC 的身份认证时,PDC 会依据使用者的设定文件(profile)来配置给这位登入者相关目录与权限的开放,这个目录就是在放置使用者的设定档了!设定档的档名通常为 username.bat ,不过我这里设定每个人都使用类似的 profile ,所以档名统一为 startup.bat 喔!请注意,这个档案必须是 DOS 的档案!
/home/user:使用者的家目录啊!
/home/samba/profiles:每个使用者在登入 SAMBA 所模拟的 PDC 之后,还可以取得『自己的 Windows 设定值』喔!这包含了『我的最爱、每个 Windows 软件的相关设定、通讯簿....一大堆资料』。都可以在这个地方给他写入呢!
如果一切设定都没有问题,那么当使用者在 bird2000 这部个人计算机以网域的型态登入时, PDC 会主动的依据 /home/samba/startup.bat 里面的使用者设定数据,配置『网络磁盘驱动器』到 bird2000 那部计算机上面去,以及将 /home/profiles/user 的个人设定值加载到 bird2000 去!所以 bird 这个使用者就可以在 bird2000 这部计算机上面使用 SAMBA 上头的资料了!而且使用的桌面设定啦、我的最爱啦等等的数据都是 SAMBA 上面的喔!同样的,未来如果 bird 这个使用者在 bird98 这部计算机登入到 PDC 时,仍然会得到 bird 个人的网络磁盘驱动器 ( 就是 /home/bird ),啊哈!那么 bird 不论在哪里都可以自由自在的使用自己在 Linux SAMBA 服务器上面的数据啦! ^_^
- 设定 smb.conf 设定档:
我们预计分享的目录与权限就如同上一个步骤的说明,不过,我还想要额外的分享出 /tmp 这个目录就是了!那么整个 smb.conf 的简易设定可以是这样的![root@test samsa]# vi smb.conf
[global]
#1.底下为一般设定项目(主机名称、工作群组等)
workgroup = birdhouse
netbios name = birdhome
server string = Bird's testing SAMBA Server
client code page = 950
#2.密码与登录文件相关的信息!
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
log file = /var/log/samba/%m.log
max log size = 0
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
#3.其它与 domain 有关的参数
os level = 64
preferred master = yes
domain master = yes
local master = yes
domain logons = yes
logon script = startup.bat
; logon script = %U.bat
logon path = //%L/Profiles/%U
wins support = yes
dns proxy = no
time server = yes
# 在上面的设定当中,都是与 domain model 有关的参数
# os level 表示与其它主机相比,这部 SAMBA 机器的管理等级,设高一点
# domain logons 表示这部 SAMBA 主机可以提供 Widnows 登入的服务 (PDC)
# logon script 表示当使用者登入之后,要到哪里去执行他的 profile 设定档,
# 我这里将每个使用者登入时,都要去执行 startup.bat 这个档案,
# 这个档案放置的地方其实就是底下 [netlogon] 的 path
# 设定的目录,请特别留意 domain 与 netlogon 的关系!
# 底下则设定每个使用者的家目录!
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
create mode = 0664
directory mode = 0775
# 有特定账号者可以使用底下这个设定
[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
writable = no
write list = bird root
follow symlinks = yes
guest ok = yes
# 没有特定账号者,例如 Windows 98 的使用者,会使用底下的路径!
[Profiles]
path = /home/samba/profiles
read only = no
create mask = 0600
directory mask = 0700
browseable = no
[tmp]
comment = Temporary file space
path = /tmp
read only = no
public = yes
[root@test samba]# grep -v '^#' smb.conf |grep -v '^;'|grep -v '^$'
# 这个动作在确认一下上面的设定是否相同,因为有时候可能会忘记将某个
# 设定给批注掉呢! ^_^
[root@test samba]# testparm | more
[root@test samba]# /etc/rc.d/init.d/smb restart
- 处理 PDC 主机所需要的各个目录与档案:
刚刚上面我们设定了很多的不同的数据目录,在这里我们得要好好的给他建立起来![root@test root]# mkdir /home/samba
[root@test root]# mkdir /home/samba/netlogon
[root@test root]# mkdir /home/samba/profiles
[root@test root]# cd /home/samba/netlogon
[root@test netlogon]# vi startup.tmp
net time //birdhome /set /yes
net use U: //birdhome/homes
net use T: //birdhome/tmp
# net 是 Windows NT 网域的相关指令用法:
# net time :表示目前 (client) 使用的时间要与 //server (在这里是 birdhome)
# 同步的意思!有时候因为 Server 与 Client 不同步,某些程序
# 会有问题!
# net use [device:] [directory]
# device: 那个 device 是 Windows 的磁盘槽啦!
# directory 是 SAMBA 主机相对的目录!
# 在我这个案例当中,每个使用者登入之后,他会在档案总管当中,
# 发现有个 U 槽,而且内容是 //birdhome/homes 相同;
# 发现有个 T 槽,内容则是 /tmp 喔!
# 特别留意, startup.bat 必须要是 DOS 的格式,所以在 Linux 上编辑时,
# 还要加上一些特殊的转换动作!
[root@test netlogon]# cat -A startup.tmp | tr '$' '/r' > startup.bat
[root@test netlogon]# cat -A startup.bat
net time //birdhome /set /yes^M$
net use U: //birdhome/homes^M$
net use T: //birdhome/tmp^M$
# 看到了吗?!每一行的最后面要加上有 ^M 这个 Windows 的杰作才可以!
# 除此之外,我们还要将原先在 bird2000 上的 bird 这个使用的个人设定值
# 给他复制过来 SAMBA 主机上面喔!在 Windows 2000 预设的情况下, bird
# 这个人的设定值会是在:
C:/Documents and Settings/bird
# 请将这个 bird 目录完整的给他复制到 /home/profiles/bird 当中,也就是说,
# 在 SAMBA 主机内的 /home/profiles/bird 里面就有原先 Windows 2000 内的
开始
Application Data
Favorites
My Documents
....
# 等等的档案数据喔!然后这样做:
[root@test netlogon]# cd /home/samba/profiles
[root@test profiles]# chown bird -R bird/
# 这个时候您应该已经将原先 Windows 的 bird 这个人的设定值给他复制到
# /home/samba/profiles/bird 当中了才对!
- 设定 Machine account 与 user account :
重要的工作来啦!我们要为 PDC 建立与 Client 主机的相关性!也就是在刚刚上面第一个步骤当中,我们提到的 Client 的机器代码 (Machine account),在我们的案例当中,需要多了个 bird2000$ 与 bird98$ 两个机器代码,您必须要在 /etc/passwd 与 /etc/samba/smbpasswd 里面同时增加这两个机器代码才行!除此之外,因为 bird2000$ 与 bird98$ 其实只是要给 SAMBA 用的账号而已,所以我们不需要给他家目录与 Shell 啊!而且,在 /etc/samba/smbpasswd 当中,还要告诉 SAMBA 这两个账号是机器代码喔!所以您应该这样做:[root@test root]# groupadd smbmachine
# VBird 有时候会有点龟毛,既然我的 /etc/passwd 里面会有 SAMBA 用的机器码,
# 那么我就将这几个机器代码归类在特定的 group 之内,那就自订一个名为
# smbmachine 的 Machine group 好了! ^_^
[root@test root]# useradd -g smbmachine -d /dev/null -s /bin/false bird2000$
[root@test root]# useradd -g smbmachine -d /dev/null -s /bin/false bird98$
[root@test root]# smbpasswd -a -m bird2000$
[root@test root]# smbpasswd -a -m bird98$
# 注意啊!多了一个 -m 的参数,这个参数代表后面接的为 Machine account ,
# 而不是一般设定的 User account 喔!
[root@test root]# usradd bird
[root@test root]# smbpasswd -a bird
# 假设 bird 这个使用者还没有被建立,那么您应该这样建立他!
[root@test root]# smbpasswd -a root
# 记得要将 root 的身份设进去 smbpasswd 里面喔!
# 不过,只要在 Windows 2000 的登入设定完成之后,就可以将 root 取消掉了!
- Client 端登入 PDC :Windows 2000
要使用 Windows 2000 登入 SAMBA 做成的 PDC 比较麻烦一点~因为首先我们必须要『先以 root 登入 SAMBA 的 PDC 主机,设定好联机之后,才算成功』的啦!所以说,我们的 /etc/samba/smbpasswd 里面才需要那个 root 使用者!要用 Windows 2000 登入 Linux 的步骤是这样的:
- 『开始』=>『设定』=>『控制台』,在出现的窗口中选择双击『网络和拨号联机』,出现如下窗口:
- 在上面的窗口当中,选择『网络识别』,之后出现底下的窗口喔:
- 由于我们在这个设定中,需要的主机名称为 bird2000 而网域为 birdhouse ,所以,万一您的 Windows 2000 原本设定并不是这样的网络识别状态,那么请选择上面图示的『内容』在出现的窗口当中填入正确的主机名称与工作群组!选择『确定』然后重新开机吧!
- 重新开机完成之后,还是回到『网络识别』(第二个步骤,也就是上上个图示)的地方,按下『网络识别』,会出现欢迎画面,在按下『下一步』之后,会出现如下的图示:
- 上面的图示请选择『这台计算机是公司网络的一部分』才行!然后选择『下一步』出现如下画面:
- 上面的图示请选择『我的公司使用一个或多个网域的网络』才行!然后按下下一步,会出现一个警告的讯息,告诉您,您必须要有的数据,这包含了计算机名称、网域使用者名称等等!在按下下一步之后,会出现如下画面:
- 这里请注意啊!第一次登入时,需要在使用者名称的地方输入 root 才行喔!那个『密码』是由 smbpasswd 设定的密码,并不是 root 在 Linux 系统 (/etc/shadow) 里面的密码喔!不要搞错了!按下下一步吧!
- 由于可能会出现一些小问题,所以这个画面会重复的给他出现的啦!重新输入一下我们的网域与主机名称吧!按下下一步:
- 再次的输入 root 与 root 的密码 ( /etc/samba/smbpasswd 里面的密码数据!),网域填写正确喔!然后按下确定:
- 看到这个画面时,您应该要很高兴的啦! ^_^!因为这就是正确的显示已经登入了 PDC 主机啦!咦!怎么会有新增使用者呢?!是的,因为 SAMBA 可以提供一个功能 ( 在 smb.conf 里面设定 add user script 的项目,请参考 man 5 smb.conf ) 来让第一次登入 PDC 的 Windows 2000 可以使用 SAMBA 提供的功能来使 Linux 主机增加使用者(同时新增在 /etc/passwd 与 /etc/samba/smbpasswd )!不过,我不太建议这样做啦!因为要新增使用者,只要网管人员登入 SAMBA 主机,使用 useradd 与 smbpasswd 即可,多了这个功能,觉得有点危险就是了 @_@!所以,通常我就直接按下『此时不新增使用者』,呵呵!这样就已经是 OK 啦!
- 万一在您的设定过程当中,老是出现底下的画面:
真是太可恶了!果真如此的话,那么建议您可以这样做看看:- 先察看一下 /var/log/samba 里面的登录文件信息,尤其是 bird2000.log 是关于 bird2000 这部主机的信息吶!
- 如果还是无法解决,可以在 lmhosts 里面增加 bird2000 的 IP 与主机名称的对应,然后将 samba 整个关掉『/etc/rc.d/init.d/smb stop』,等待一段时间让 NetBIOS 的名称解析时间逾时,再重新启动 samba 『/etc/rc.d/init.d/smb start』,然后再重新做一次输入 root 的密码那个动作!
- 当您再次的将 Windows 2000 重新开机之后,屏幕出现的登录画面会提醒您需要按下『Ctrl-Alt-Del』才能出现登录窗口,并且在登录窗口中会出现三个空格 (如果只有两个空格时,请按下『选项』喔,其它的功能就会自动的出现了!) :
- 使用者名称:这个名称可以(1)填入本机Windows 2000的使用者名称,也可以 (2)填入 PDC 上面的使用者名称,例如 bird ;
- 密码:这个密码也要对应上面输入的使用者,看是本机或者是 PDC 主机的使用者相对应的密码;
- 登入到:这里可以选择您所需要登入的是本机还是 PDC 网域吶!也需要与上面两个项目对应说!
- 假设我以 bird 登入,并且选择 BIRDHOUSE网域 来登入之后,开启档案总管,会得到如下的网络磁盘驱动器喔!
所以,我就可以自由自在的使用我自己的网络磁盘啦!不论在那个计算机上面,都可以使用同一个 SAMBA 机器上的目录,并且使用的都是同一组密码 (因为记录在 PDC 主机上面),修改密码也很简单啊! ^_^
经过上面的设定之后,如此一来,您就可以让使用者在各个 Widnows 2000 的环境当中使用您的网络磁盘驱动器啰! ^_^
- 『开始』=>『设定』=>『控制台』,在出现的窗口中选择双击『网络和拨号联机』,出现如下窗口:
- Client 端登入 PDC :Windows 98
在 Windows 98 上面登入 PDC 要比 Windows 2000 来的简单一些些说~整个作法可以这样来:
- 先清除桌面,然后在桌面将鼠标指针移动到『网络上的芳邻』上头,按右键,选内容,会出现如下画面:
务必确认在上面的窗口当中,最上头的空白部分含有:- TCP/IP 的协定:这个用来设定你的 IP 以及网络参数
- NetBEUI 的协定
- 在上面出现的画面当中,只要动两个部分,分别是(1)勾选『登入 Windows NT 网域』这一项(因为 SAMBA 的 PDC 是模拟 Windows NT 的系统啊!),并且在网域的地方填入您的网域,我们这里是 birdhouse 喔!然后按下确定,会回到前面的画面,而在前面的画面当中,选择『识别数据』会出现如下画面:
- 在上面的画面中,请务必填好计算机名称与工作群组吶!那个工作群组就是我们的网域 (birdhouse) 啊!然后按下确定,并且重新开机,重新开机后,会出现如下的登入画面喔!
只要填入正确的 PDC 上面的 ID 与密码,加上正确的网域,就可以登入了!而在启动 Windows 的画面时,会有一些程序在跑,那就是我们刚刚在 /home/samba/netlogon/startup.bat 所建立的批次档啰!跑完之后,您可以开启档案总管,就会发现如下画面喔:
没错!多了两个磁盘分割槽出来啰!恭喜您,又联机上啰!
所以说, Windows 98 要连上 PDC 很容易吧!几个动作就搞定了! - 先清除桌面,然后在桌面将鼠标指针移动到『网络上的芳邻』上头,按右键,选内容,会出现如下画面:
好了,关于 SAMBA 的 PDC 作法我们就谈到这里,还有更多的信息您可以前往这个章节最后面的『参考资源』所列出的网址去查阅,因为还有很多的作法吶!关于 PDC ,事实上,我觉得在一个网域当中,如果有多部的 Windows NT 主机,例如 Windows 2000 这一类的比较稳定的个人使用桌面版本时,使用 PDC 就很有用了!因为 Windows 2000 也是一个多人的操作系统,不像 Windows 98 是单人的操作系统,所以,当使用 Windows 2000 而无法登入 PDC 时,基本上,您是无法使用 Windows 2000 上面的任何的信息的,但是在 Windows 98 上面若无法正确的登入,您仍然具有该计算机的主控权喔!所以,我个人是觉得 PDC 在 Windows 2000 主机比较多的环境下,用途会更广喔!如果只是 Windows 98 的环境,那么.....或许 PDC 还是不要玩吧!我觉得对于新手来说,好难吶! @_@
设定成为打印机服务器 (printer server)
刚刚上面的说明大部分都是针对磁盘与目录的分享来进行 SAMBA 的设定,那么 SAMBA 有没有可能分享出装置呢?举个例子来说,例如那个我们在办公室都会用到的打印机 ( Printer ) 呢?如果说,能够让我们办公室的 File Server 同时提供打印机打印的功能,如此一来,藉由 Linux 这个操作系统可以 24 小时开机的稳定功能,我们就可以随时进行打印啰!没错!这真是个重要的任务啊!所以,底下我们就以 SAMBA 进行打印机打印功能的提供者的角度,来介绍这个 smb.conf 的设定喔!
事实上,在 Linux 底下的打印工作,是统一交由标准打印接口(或者说是程序)来进行数据与打印机之间的传输的,而这个打印的接口目前主要有两个,一个是比较老牌的 LPRng ,另一个则是功能较为强大的 CUPS ( Common Unix Printing System, CUPS ) 界面。因为 LPRng 的设定比较简单,而且功能也不差,所以这里我们主要是以 LPRng 这个打印管理程序来进行说明的喔!底下就是 LPRng 这个打印管理程序的一般工作流程:
整个打印流程是这样的:(1)当我们在 Windows 底下进行打印时 (就是按下打印按钮后), (2)经由网络传输功能将打印的工作传至 Linux 系统下的 LPRng 这个打印程序来接管, (3)之后经过一些转换程序( 转成正确的打印格式 )以及滤镜 ( filter ) 功能,将数据转换成可以经由打印机输出的格式后, (4)最后就可以由打印机 ( /dev/lp0 ) 来印出了!请注意喔,在 Linux 底下,打印机的装置代号为 /dev/lp0 ,第二部打印机则是 /dev/lp1 以此类推!
经过上面的程序说明后,我们知道要以 SAMBA 进行打印机的分享工作,实在很简单!您可以这样一步一步的进行喔!
- 确定打印机可以正确输出:
既然要分享打印机,当然就需要在 Linux 上面的打印机可以正确的打印咯!请这样做:- 将打印机接在 Linux 主机的 LPT 打印端口上 ( 就是 25 针的那个插槽 );
- 打开打印机的电源 (以后就不要关了吧! ^_^ );
- 在 Linux 主机上面开一个终端机 ( Terminal ) ,然后输入:
[root@test root]# echo "Hello world" > /dev/lp0
- 安装 LPRng 套件:
LPRng 是 Red Hat 主要的套件之一,所以如果您是 Red Hat 这个 Linux distribution 的使用者,请拿出您的原版光盘,然后就可以使用 RPM 来安装 LPRng 了!不过,如果您不是使用 Red Hat 的话,那么很可能因为您的 distribution 仅提供 CPUS 而已,所以就必须要手动的安装 LPRng 啰!安装的方法可以这样做:- 先到 LPRng 的官方网站下载最新的 LPRng 套件:
官方网站:http://www.lprng.com
FTP 网站:ftp://ftp.lprng.com/pub/LPRng/LPRng/
在我这个例子当中,主要是以 LPRng-3.8.21.tgz 这个套件为准喔! - 将捉下来的套件到 /usr/local 底下解压缩,并且开始设定与安装!( 因为我没有使用 SSL 加密以及 Kerberos 等功能,所以直接将他拿掉了!详细的功能参数请自行读取该目录下的 INSTALL !)
[root@test root]# cd /usr/local/src
[root@test src]# tar -zxvf /root/LPRng-3.8.21.tgz
.....(会产生一个名为 LPTng-3.8.21 的档案)...
[root@test src]# cd LPRng-3.8.21
[root@test LPRng-3.8.21]# ./configure --prefix=/usr/local/LPRng /
> --disable-keros_checks --disable-ssl --enable-nls
....( 花一段时间来进行系统确认! )....
建议可以使用 ./configure --help 来察看每一个设定项目的说明!
[root@test LPRng-3.8.21]# make clean all
....再花一段时间来等待~
[root@test LPRng-3.8.21]# make install # 开始给他安装下去!
这个时候, LPRng 套件的所有数据都放置在/usr/local/LPRng 里面了!
[root@test LPRng-3.8.21]# vi /etc/man.config
# 在这个档案当中加入一行
MANPATH /usr/local/LPRng/man # VBird 2003/07/20
# 这样未来在进行数据的 man 时,就可以直接查到 LPRng 的相关参数了!
# 例如 man checkpc、 man lprm ...[roo@test LPRng-3.8.21]#vi /etc/profile
# 在这个档案当中, export PATH 该行之前,加入:
PATH="$PATH":/usr/local/LPRng/bin:/usr/local/LPRng/sbin
# 这样一来,未来在登入主机之后,就可以进行 LPRng 的相关指令功能!
- 先到 LPRng 的官方网站下载最新的 LPRng 套件:
- 设定 LPRng 的设定档:
安装好了 LPRng 之后,接下来就是要使用 LPRng 的设定档来设定好您的打印机了!由于使用 RPM 安装与 Tarball 安装时,一些档案放置的地点不一样,所以,底下的设定在不同的系统当中可能会有点小差异喔!请依照您的系统作一下设定更改吧! ( 我这里分别以 Red Hat 9 这个使用 RPM 安装与 Mandrake 9.1 以 Tarball 安装时的设定为主 )0. 先确认 lp 这个系统账号是否存在?
[root@test root]# id lp
uid=4(lp) gid=7(lp) groups=7(lp)
万一出现了『 id: lp: No such user 』时,
请务必进行底下的动作,以新增打印机管理员账号:
groupadd lp
useradd -s /sbin/nologin -d /var/spool/lpd -g lp -r lp
mkdir -p /var/spool/lpd/lp0
chown lp:lp -R /var/spool/lpd
如果您的系统当中早就已经有了 lp 这个账号,那么上面的动作就不需要进行!
1. 先设定好 printcap 这个主要设定档!
[root@test root]# cp /etc/printcap /etc/printcap.bak.raw#只是备份
[root@test root]# vi /etc/printcap
# 如果是使用 Tarball 安装的,这个档案在 /usr/local/LPRng/etc/printcap
lp0|HP-LaserJet-1100:/
:sh:/
:ml=0:/
:mx=0:/
:sd=/var/spool/lpd/lp0:/
:lp=/dev/lp0:/
#上面说明的是:
# lp0 为打印机在 Linux 的名称,HP-LaserJet-1100 为打印机 lp0 的别名
# 请注意, HP-LasetJet-1100 可以随意设定,但是 lp0 最好保留,
# 因为未来比较容易处理一些突发状况!
# sh 为是否印出标头,这里我们没有设定标头喔!
# ml, mx 为打印机能够接受的讯息,这里我们不加限制!
# sd 为打印工作的队列(打印档案暂存的目录)
# lp 就是打印机的实际装置代号了!
# 事实上,重点仅在于 lp 与 sd 而已~ ^_^[root@test root]# checkpc -f
# 这个指令主要就是用来确认 printcap 是否设定正确的一个指令!
# 如果使用 Tarball 安装的朋友,请以 /usr/local/LPRng/sbin/checkpc -f 确认喔
2. 设定 LPRng 的主要存取设定档 lpd.perms
[root@test root]# vi /etc/lpd.perms
# 这个档案的内容挺重要的!因为涉及了其它使用者是否能使用您的 Linux 打印机
# 那个 perms 就是 permission 的意思啦!也就是说,谁能使用 lpd 这个 daemon
# lpd 就是管理打印机的 LPRng 的 daemon 啰!
# 1. 先以 IP 限制能来上来使用 Linux 的 Printer 的 IP 群,我这里开放出
# 192.168.0.0/255.255.255.0 这个网段喔!
REJECT SERVICE=X NOT REMOTEIP=127.0.0.1,192.168.0.0/255.255.255.0
# 如果您想要加入其它的 IP ,可以在后面以逗号继续分隔增加喔!
# 2. 再来是一些控制选项
ACCEPT SERVICE=C LPC=lpd,status,printcap,hold,release,stop,start REMOTEGROUP=bird
ACCEPT SERVICE=M SAMEHOST SAMEUSER
ACCEPT SERVICE=M SERVER REMOTEUSER=root
DEFAULT ACCEPT
# 事实上,由于我们在后头还会继续的设定防火墙,所以这里约略设定一下即可!
3. 设定一下启动的档案
[root@test root]# vi /etc/rc.d/init.d/lpd
# 如果是以 RPM 安装的话,这个步骤就不用作了!
# 使用 Tarball 安装时,预设没有这个档案,您可以写成这样:
#!/bin/sh
PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/LPRng/sbin:/usr/local/LPRng/bin
export PATH
case "$1" in
start)
# Start daemons.
echo "Starting lpd: /c"; /usr/local/LPRng/sbin/lpd;
echo "";
;;
stop)
# Stop daemons.
printf "Shutting down lpd: "
pkill lpd
echo "done"
;;
*)
echo "Usage: lpd {start|stop}"
;;
esac - 启动打印机的服务:
启动打印机实在很简单:[root@test root]# /etc/rc.d/init.d/lpd start
[root@test root]# netstat -tln
tcp 0 0 0.0.0.0:515 0.0.0.0:* LISTEN
[root@test root]# echo "/etc/rc.d/init.d/lpd start" >> /etc/rc.d/rc.local
- 编写 smb.conf ,加入打印机的支持:
既然打印机已经 ready 了,接下来就是要重新的给他设定好 smb.conf 啰!您可以这样加入一段支持:[root@test root]# vi /etc/samba/smb.conf
# 不管在哪里,找到 smb.conf 然后编辑他就是了!然后加入底下这一段:
[global]
printcap name = /etc/printcap
load printers = yes
printing = lprng
# 上面这三行预设应该会存在 smb.conf 当中,只要找到这三行,
# 并将行首的 ; 拿掉即可!注意,这三行是新增的!
# 特别给他留意一下,打印机的分享是经由 [printers] 相关的设定来提供的!
[printers]
comment = HP LaserJet 1100
printable = yes
browsable = no
public = no
validusers = bird puma addida amani pada
printing = lprng
path = /var/spool/lpd/samba
# 注意一下,上面重要的地方在于:
# printable 需要启动为 yes
# validusers 有需要的话就请自行设定,我这里仅允许五位使用者登入而已!
# printing 设定成使用 lprng 这个管理程序
# path 这个就是打印机队列,我将他设定在 /var/spool/lpd/samba 中
[root@test root]# mkdir -p /var/spool/lpd/samba
[root@test root]# chown root:root /var/spool/lpd/samba
[root@test root]# chmod 777 /var/spool/lpd/samba
[root@test root]# testparm
[root@test root]# /etc/rc.d/init.d/smb restart
- 一些问题克服 ( lprm, lpq... )
由上面的步骤进行来看,这个时候您的 Linux 主机应该已经可以分享您的打印机了!很开心吧! ^_^ !不过,我们还是得要稍微熟悉一下在 Linux 底下管理打印机的手段喔!为什么呢?想象一个画面,今天,您已经在 Windows 上面按下『打印』按钮,偏偏竟然是印错了档案,这个档案还有 100 页之多~因为 SAMBA 会先将打印数据队列在 /var/spool/lpd/samba 当中,所以,这个时候使用 Windows 并不能管理该打印机~哇!难道我要痴痴的等待 100 页印完吗?!呵呵!当然不需要!您可以登入 Linux 来控管您的打印数据呢!前提之下是,您必须使用与 SAMBA 相同的使用者登入系统喔![root@test root]# lpq
# 可以察看打印机的状态
Printer: lp0@test 'HP-LaserJet-1100'
Queue: no printable jobs in queue
Status: job 'cfA209test.vbird.idv.tw' removed at 13:29:24.163
[root@test root]# lprm all
# 将所有打印机的等待打印的数据通通删除!
所以将您的 SAMBA 设定成为打印机服务器也不难吧! ^_^
设定成为打印机服务器 ( Printer Server + CUPS 系统)
除了 LPRng 这个打印程序之外,我们还可以使用较新的 CUPS 系统 ( Common Unix Printer System ) 来做为我们的打印程序喔!底下我以 Red Hat 9 为例来设计 CUPS + SAMBA 的设定方式:
- 安装 CPUS 的相关套件:
安装的套件就是 CUPS 咯!检查一下吧![root@test root]# rpm -qa | grep cups
cups-libs-1.1.17-13.3
cups-1.1.17-13.3
qtcups-2.0-15
- 设定 CUPS 的设定档 cupsd.conf 并启动 cups:
由于 CUPS 是一个服务,他可以对 Internet 提供打印的服务喔!所以,未来启动 cups 之后,会产生一个监听的接口,而谁可以登入这个监听的接口呢!?呵呵!没错,就是需要在这个 cupsd.conf 档案内设定啦!我们假设我们的 CUPS 是对内部的 192.168.0.0/24 这个网域开放的,所以:[root@test root]# vi /etc/cups/cupsd.conf
# 其实这个档案的设定很类似 httpd.conf 呢!我们只要针对两个参数来设定即可,
# 分别是 / 与 /admin 喔!设定只有 192.168.0.0/24 可以登入!
<Location /admin>
AuthType Basic
AuthClass User
Order Deny,Allow
Deny From All
Allow From 192.168.0.0/24
# 注意一下,上面的 AuthClass User 这个设定值,可以让您以 Linux 上面的
# User 身份来登入 CUPS 以设定 Printer 喔!
# 这个 /admin 的设定内容主要与『打印机管理员』有关的设定
</Location>
<Location />
Order Deny,Allow
Deny From All
Allow From 192.168.0.0/24
# 这个 / 设定值则是决定谁可以登入使用 Printer 呢!
</Location>
[root@test root]# /etc/rc.d/init.d/cups start
[root@test root]# netstat -utln | grep 631
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:631 0.0.0.0:*
# 请注意到,启动了 CUPS 之后,会产生这个 631 的埠口吶! - 设定您的第一部打印机:
好了,既然 CUPS 这样就可以设定成功了,接下来当然就是需要设定我们的打印机了!设定打印机可以很简单的以 lpadmin 来设定,也可以使用 Web 接口来设定喔!在文字接口下,假设您的打印机是 HP 的激光打印机 (lasetjet),例如鸟哥研究室的 hp 1100 laserjet ,我可以这样设定:[root@test root]# lpadmin -p HP-1100-LaserJet -m laserjet.ppd -E /
> -v parallel:/dev/lp0
# 参数说明:
# -p 后面接打印机名称,名称可以随便取!
# -m 后面接打印机的接口模块档案(module interface file)
# -E 则是说,这个打印机可以用来进行打印之意!
# -v 后面接的则是『串行端口 parallel』或者是『网络 socket 』!
# 以 lpadmin 设定好打印机后,整个打印机的状态列其实被放置在
# /etc/cups/printers.conf 里面喔!
注意一下,如果如同上面的图示中,出现了『file:/dev/null』呵呵!那就表示『您的打印机发生错误了』,因为一般来说,Linux 本机打印机应该是会出现:『parallel:/dev/lp0 』才对喔!在上面的图示当中,您可以选择『Modify Printer』或者是『Configure Printer』来最佳化您的打印机吶! ^_^
- 编写 smb.conf ,加入打印机的支持:
既然打印机已经 ready 了,接下来就是要重新的给他设定好 smb.conf 啰!您可以这样加入一段支持:[root@test root]# vi /etc/samba/smb.conf
# 不管在哪里,找到 smb.conf 然后编辑他就是了!然后加入底下这一段:
[global]
printcap name = cups
load printers = yes
printing = cups
[printers]
comment = HP LaserJet 1100
printable = yes
browsable = no
public = no
validusers = bird puma addida amani pada
printing = cups
path = /var/spool/lpd/samba
[root@test root]# mkdir -p /var/spool/lpd/samba
[root@test root]# chown root:root /var/spool/lpd/samba
[root@test root]# chmod 777 /var/spool/lpd/samba
[root@test root]# testparm
[root@test root]# /etc/rc.d/init.d/smb restart
- %S:取代目前的设定项目值,所谓的『设定项目值』就是在 [ ] 里面的内容!举例来说:
Client 端的设定:
-
- TCP/IP
- NetBEUI
- 所有的计算机都是同一个『工作群组, Workgroup 』
- 所有的计算机都有独特的『NetBIOS 主机名称』。
关于 Windows 的通讯协议设定方法,我们已经在前面的『局域网络简介』里面提过了,这里不再赘述,请自行前往参考。除了这个协议的设定之外,在同一个网域之内,要将计算机以 LAN 兜在一起,最好还需要网络识别的方式:
还是得再次的强调,NetBIOS 主机名称与 Internet 上面使用 DNS 解析的主机名称不同!假设这个设定的项目通过了,那么该如何在 Windows 与 Linux 之间分享档案呢?
在 Windows 上浏览 Linux 分享档案的设定
在 Windows 之间分享档案真的是很简单,只要设定好『资源共享』或者是 Windows NT 系列的所谓的『共享』那么就可以使用彼此的档案啰!而要在 Windows 上面浏览 Linux 的 SAMBA 主机,那也很简单,只要知道 Linux 的 NetBIOS Name 之后,直接在『网络上的芳邻』去点选,也可以利用『开始』=>『搜寻』=>『计算机』=>填写入 Linux 的 NetBIOS Name ,如果一切联机都没有问题,就可以连接上 SAMBA 主机啦!因为实在太简单了!所以这里我们就不再强调了!(注:事实上,使用档案总管就可以进行很多分享的工作了!尤其是『联机网络磁盘驱动器』的项目喔!)
在 Linux 上浏览 Windows 分享档案的设定
既然 Windows 可以浏览 Linux 的档案,没道理 Linux 不能浏览 Windows 的档案吧!呵呵!这么说真是不错啊!这里我们介绍几个 Samba 提供的指令,来让您轻松的使用 Windows 的资源喔!
smbclient 语法介绍:
1. 察看 NetBIOS 主机分享的目录状态:
[root@test root]# smbclient -L //netbiosname [-U username]
# 这个 -L 的参数主要的目的在于察看 netbiosname 那部主机有提供什么目录,
# 比较需要留意的是,如果没有加上 -U username 时,那么预设是以匿名者
# anonymous 来登入该 NetBIOSname 的,所以能看到的目录或许就会被限制喔!
# 另外,NetBIOS 主机名称在 Linux 底下,需要在前面加上『 // 』喔!
范例:
[root@test root]# smbclient -L //bird2000 -U bird
added interface ip=192.168.1.2 bcast=192.168.1.255 nmask=255.255.255.0
Password:
Domain=[BIRDHOUSE] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]Sharename Type Comment
--------- ---- -------
IPC$ IPC 远程 IPC
D$ Disk 预设共享
ADMIN$ Disk 远程管理
C$ Disk 预设共享Server Comment
--------- -------Workgroup Master
--------- -------
# 如上面的范例来看,不管那个 //bird2000 是 Linux Samba 还是 Windows ,
# 都可以显示出类似上面的画面,在 sharename 的地方,显示 bird 这个使用者
# 登入时,可以取得使用的目录!
2. 信差服务:
[root@test root]# smbclient -M netbiosname
# 这个 -M 是 messages 的意思,他可以将数据以 Windows 的 winpopup 程序
# 来传给该计算机上面的使用者喔!除非对方的 winpopup 关闭!
范例:
[root@test root]# smbclient -M bird2000
added interface ip=192.168.1.2 bcast=192.168.1.255 nmask=255.255.255.0
Connected. Type your message, ending it with a Control-D
Hello, How are you? <==最后这里是按下 Ctrl + D 来结束的!
sent 21 bytes
# 然后 bird2000 这部计算机会出现如下画面:
3. 登入目录:
[root@test root]# smbclient '//netbiosname/directory' [-U useranem] [-W workgroup]
# 这才是 smbclient 最主要的目的啦!就是登入 NetBIOS 那部主机的某个目录,
# 然后可以使用 ftp 的功能来将数据上传或下载喔!
范例:
[root@test root]# smbclient -L //127.0.0.1 -U bird
added interface ip=192.168.1.2 bcast=192.168.1.255 nmask=255.255.255.0
Password:
Domain=[BIRDHOUSE] OS=[Unix] Server=[Samba 2.2.7a-security-rollup-fix]Sharename Type Comment
--------- ---- -------
netlogon Disk Network Logon Service
public Disk Public Stuff
IPC$ IPC IPC Service (Bird's testing SAMBA Server)
ADMIN$ Disk IPC Service (Bird's testing SAMBA Server)Server Comment
--------- -------
BIRDHOME Bird's testing SAMBA ServerWorkgroup Master
--------- -------
BIRDHOUSE BIRDHOME# 先以 -L 的参数察看一下 127.0.0.1 这个 IP 的分享情况,发现 bird 可以登入
# //127.0.0.1/public 这个目录喔!由于 / 在 bash 里面是有特殊意义的字符,
# 所以我们要以单引号 ' 将目录整个括号起来喔!
[root@test root]# smbclient '//127.0.0.1/public' -U bird
added interface ip=192.168.1.2 bcast=192.168.1.255 nmask=255.255.255.0
Password:
Domain=[BIRDHOUSE] OS=[Unix] Server=[Samba 2.2.7a-security-rollup-fix]
smb: /> dir
# 在 smb 底下其实就是在 //127.0.0.1/public 这个目录底下啦!所以,
# 我们可以使用 dir, get, put 等常用的 ftp 指令来进行数据传输了!
? :列出所有可以用的指令,常用!
cd :变换到远程主机的目录
del :杀掉某个档案
lcd :变换本机端的目录
ls :察看目前所在目录的档案
dir :与 ls 相同
get :下载单一档案
mget:下载大量档案
mput:上传大量档案
put :上传单一档案
rm :删除档案
# 其它的指令用法请参考 man smbclient 喔!
事实上,使用 smbclient 一点也不方便,因为使用的是 ftp 的功能语法,有点怪怪的~能不能像 Windows 那样,可以直接联机网络磁盘驱动器啊?!这当然没有问题!不过就需要藉由 smbmount 来协助了!smbmount 可以将远程主机分享出来的目录整个给他 mount 到本机的 mount point (某个目录),如此一来,远程主机的目录就好像在我们本机的一个 partition 一样喔!可以直接执行复制、编辑等动作!这可就好用的多了!底下我们来谈一谈怎么用这个 smbmount 吧!
smbmount 语法介绍:
[root@test root]# smbmount //netbiosname/directory [-o options]
参数说明:
netbiosname :可以是 IP 也可以是网芳上面的NetBIOS主机名称
-o 后面接的参数 options 常用的有底下这些参数:
username=你的登入账号:例如 username=bird
password=你的登入密码:需要与上面 username 相对应啊!
codepage=语言格式:这个可以设定支持的语系,例如繁体中文:codepage=cp950
范例:
# 假设我要以 bird 身份,密码为 mypasswd 挂载远程主机 //birdhome/tmp
# 那个目录,并且挂载到我 Linux 的 /home/birdhome 这个目录,如何做?
[root@test root]# smbclient -L //birdhome -U bird
# 先以 smbclient 找出可以挂载的目录!在这个案例中,我有 //birdhome/tmp
# 可以挂载!
[root@test root]# smbmount '//birdhome/tmp' /home/birdhome /
> -o username='bird',password='mypasswd',codepage='cp950'
# 再次给他强调一下,因为 / 在 bash 当中是特殊字符,所以挂载时请特别
# 使用 ' 来将 / 设定成为一般字符!还有,在 -o 后面的各项参数中,
# 中间都是以逗号来隔开的!并且设定值最好也使用单引号 ' 来设定!
[root@test root]# df
//birdhome/tmp 3020160 186880 2833280 7% /home/birdhome
# 如上所示,你应该就可以看到目录对应 mount point 啦!
经由 smbmount 的动作,我们就可以轻易的将远程分享出来的咚咚给他挂载到自己 Linux 本机上面!好用的很~事实上,原本 mount 这个指令如果有支持 smbfs 的话,那也就可以直接挂载 网络上的芳邻 分享出来的目录了!例如上面的例子当中,我们也可以这样下达指令:
[root@test root]# mount -t smbfs '//birdhome/tmp' /home/birdhome /
> -o username=bird,password='mypasswd',iocharset='cp950'
# 上面那个 iocharset 与 codepage 都是用来设定语系的!
更详细的 mount 用法,请 man mount 或者看考『鸟哥的 Linux 私房菜 -- 基础学习篇』的内容喔! ^_^
安全相关方面
-
- 仅针对 192.168.0.0/24 这个网域开放 SAMBA;
- SAMBA 的 port 有 137~139 tcp/udp;
- SAMBA 主机的网络卡为 eth0
- /sbin/iptables -A INPUT -p tcp -i eth0 -s 192.168.0.0/24 --dport 137:139 -j ACCEPT
/sbin/iptables -A INPUT -p udp -i eth0 -s 192.168.0.0/24 --dport 137:139 -j ACCEPT
- ALL : ALL
- hosts allow = 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5
- hosts allow = 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 127.
- /etc (因为含有 /etc/passwd 以及 /etc/samba 里面的资料,所以建议可以全部给他备份下来 )
- /home (还是可以察看一下,是否有其它非必要的!不过,一般来说,都会是备份的个人数据比较多啦!)
- 其它由 smb.conf 里面设定开放的目录。
配合 quota 来规范使用者的使用空间
quota 是磁盘配额限制的一个 daemon ,您可以依据不同的使用者来加以限制他们能够使用的硬盘空间,前提是『该磁盘空间必须是一个独立的 partition 』才行,不建议针对根目录『 / 』进行 quota !这也是为什么我们在主机规划时特别建议大家独立出一个 partition 来进行硬盘规划的原因!关于 quota 的详细用法在『鸟哥的 Linux 私房菜--基础学习篇』里面已经谈得很清楚了,这里我们不再详谈!只给大家来做个练习就是了!
习题练习 - 问:在规划主机的时候,我将 /dev/hda2 独立一个 partition 给 /home 这个目录,现在想要规划 quota 针对 bird 这个使用者进行磁盘配额的限制,他的 hardlimit 为 50mb 而 softlimit 为 40mb ,请问整个动作应该如何进行?
- 编辑修改 /etc/fstab ,使得 /dev/hda2 这个 partition 成为如下模样:
/dev/hda2 /home ext3 defaults,usrquota,grpquota 1 1
修改完毕之后,请千万记得使用 mount -a 查询看看有没有设定错误 (上面总共只有六个字段喔!),这个动作如果发生错误,那么请记得再次的进行 /etc/fstab 的修改!请特别留意啊!因为写错的话,很容易造成无法正常开机的窘境!
- 上述动作确定没有问题之后,请重新开机启动 quota 的支持:
sync; sync; sync; reboot
- 执行底下的指令,建立 quota 所需要的设定档案:
quotacheck -avug
特别注意,如果上述的动作发生『找不到设定文件』的意思的讯息时,您可以这样做:
touch /home/aquota.user; touch /home/aquota.group
然后在进行一次 quotacheck 即可!
- 启动 quota 啰:
quotaon -av
- 设定 bird 的磁盘配额:
edquota -u bird
Disk quotas for user test (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hdb2 32 40000 50000 8 0 0
因为我们只针对硬盘空间,不针对 inode 做限制,所以只要前面的数字修订即可!请注意,数字的单位为 kbytes !
如何设定防火墙 iptables
如果您的主机环境本身已经具有防火墙了,而且是较为严密的防火墙,那么 SAMBA 所需要的 port 应该会被您挡住才对~这个时候,请特别在您的防火墙规则中开放出 SAMBA 所需要的 port 与针对的 IP 网域喔!一般来说,因为 SAMBA 越来越不安全了(前面说过,病毒的问题很严重),所以,通常我们会建议大家 SAMBA 仅针对我们自己的网域来开放即可!甚至仅针对少部分主机来开放即可呢!
要设定防火墙,请务必具有 iptables 的基本观念,在 认识网络安全 的章节当中我们已经谈过了,请自行前往参考喔!在这里,我们仅针对 SAMBA 所需要的 port 与 IP 网段进行说明。
假设: 针对上面的设定,您可以在防火墙机制当中加入两行喔:
当然啦!这是很简单很简单的防火墙规则,您必须要依据您的环境自行修改(通常修改那个 192.168.0.0/24 网段即可!)。除了 iptables 必须要开放之外,您还需要将管制 daemon 是否能够进出的 TCP Wrappers 开放才行吶!如果万一您看到 /etc/hosts.deny 里面多了这一行:
不要怀疑,很可能会造成不只 SAMBA 不能动作而已~连其它的 daemon 都可能会无法动作呢!所以,请将这一行拿掉吧!或者是将适合的 daemon 开放在 /etc/hosts.allow 档案里面喔!
如何设定 daemons 的抵挡功能 ( hosts allow 项目 )
除了 iptables 与 TCP Wrappers 这两个 Linux 本身的防火墙机制之外,其实 SAMBA 本身也就提供了防火墙的机制啦!那就是在 /etc/samba/smb.conf 这个档案里面的 hosts allow 与 hosts deny 的项目了!这两个设定是在 [global] 里面的设定,一般来说,只要设定 hosts allow 那一项就可以了!因为没有被设定到里面的 IP 都无法使用 SAMBA 喔!以上面的防火墙例子来说,我们仅开放 192.168.0.0/24 这个网域可以使用 137~139 的 port ,不过,在这个网域当中,我们又仅针对五部计算机开放服务,例如 192.168.0.1~192.168.0.5 ,那么我可以在 smb.conf 里面多加这一行:
各个 IP 之间都以空格隔开即可!此外,如果您想要针对整个网域来开放,例如本机的 127.0.0.0/8 这个网域,那么可以再加入:
这样就可以了!如此一来,虽然本机所在的网段 192.168.0.0/24 都可以尝试登入 SAMBA ( 因为可以通过 iptables 的规则 ),不过却会被 SAMBA 本身的设定挡住!这有什么好处啊?!好处就是在网段里面尝试登入 SAMBA 但是却遭 SAMBA 拒绝的 IP 与原因,都会被纪录到登录文件里面去,如此一来,我们可以被动的利用分析 SAMBA 的登录档,以发现是否有人想要入侵或者是有某部计算机是否已经被不正常的病毒所感染呢!
要备份些什么咚咚?( /home, 开放的咚咚, smb.conf, smbpasswd...)
跟 SAMBA 最有关的当然就是使用者的信息啰!所以,您应该要备份的就是使用者的数据,以及 Samba 相关的设定数据了!比较相关的有几个咚咚:
无论如何,备份还是挺重要的!
问题克服
-
- log file = /var/log/samba/%m.log
- /etc/rc.d/init.d/smb stop
那个 %m 是指 Client 的 NetBIOS Name 的意思,所以,当有个 bird2000 的主机来登入我们的 birdhome 主机时,那么登入的信息就会被纪录在 /var/log/samba/bird2000.log 档案喔!而如果万一来源 IP 并没有 Netbios name 的时候,那么很可能是一些错误讯息,这些错误讯息就会被纪录到 log.smbd 里面去了!所以,如果您要察看某部计算机连上您的 SAMBA 主机发生了什么问题时,特别要留意这个登录档的形式喔!
另外,如果您的 SAMBA 明明已经启动完成了,却偏偏老是无法成功,又无法查出问题时,建议先关闭 Samba 一阵子,再重新启动:
在我的案例当中,确实有几次是因为 PID 与 NetBIOS 的问题,导致整个 SAMBA 怪怪的~所以完整的关闭之后,经过一阵子的短暂时间,再重新启动,应该就可以恢复正常了!
还有,万一您在进行写入的动作时,老是发现『您没有相关写入的权限!』,不要怀疑,几乎可以确定是 Permission 的问题,也就是 Linux 的权限与 SAMBA 开放的权限并不相符合!无论如何,您必须要了解能不能写入 Linux 磁盘,看的是 PID 的权限与 Linxu 档案系统是否吻合,而那个 smb.conf 里面设定的相关权限只是在 SAMBA 运作过程当中『预计』要给使用者的权限而已,并不能取代真正的 Linux 权限喔!所以,万一真的发现该问题存在,请登入 Linux 系统,查验一下该对应的目录的 permission 吧! ^_^
附带说明一点,常常有朋友会问 swat ( Samba Web Administration Tool )是什么?那个其实是 SAMBA 提供给 SAMBA 系统管理员的一个 Web 图形接口的管理工具!我个人是不太喜欢使用工具来工作的,如果您有兴趣,请自行参考相关的书籍来使用吧! ^_^
重点回顾
- (等待更新中)
本章与 LPI 的关系
- 在 LPI 网站 http://www.lpi.org 里面提到的,(等待更新中)
参考资源:
- man 5 smb.conf
- Study Area :http://www.study-area.org/linux/servers/linux_samba.htm
- 电子书 Using Samba:http://de.samba.org/samba/ftp/docs/htmldocs/using_samba/index.html
- Samba PDC FAQ:http://de.samba.org/samba/ftp/docs/htmldocs/samba-pdc-faq.html
- Samba PDC HOWTO: http://de.samba.org/samba/ftp/docs/htmldocs/samba-pdc-howto.html
- SAMBA 官方网站:http://www.samba.org/
- rondo 的 SAMBA 密技:http://rondo.study-area.org/~linux/student_samba/server/samba/
- 依玛猫的打印文件:http://www.imacat.idv.tw/tech/lnxprint.html