服务器架设篇 - RedHat 9

第十九章、简易 SAMBA 服务器设置

关于 SAMBA 这个 File server 的设置方法介绍喔!

最近更新时间: 2003/09/30

本文数据主要针对 RedHat 9 的系统进行说明,要注意的是,RedHat 9 与 Red Hat Enterprise Linux (RHEL) 是完全不同的东西!RedHat 9 在 2003 年推出,在 2004 年就不再维护了!这部份网站更新到 2005 年,也没有再维护过! 因此,建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 RedHat 9 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
在一般的局域网路中 (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 这个好用的服务器啦!咦!怪了!怎么服务器的名称会使用 SAMBA 呢?还真是怪怪的呢!那么这个 SAMBA 服务器的功能是什么呢?另外,他最早是经由什么样的想法而开发出来的呢?呵呵!底下就让我们慢慢的谈一谈吧!
     

    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 网络上的主机名称解析 (NetBIOS name)
    • 可以进行设备的分享 ( 例如 Zip, CDROM... )
     
    底下我们来谈几个 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 的『网上邻居』来做简单的说明:
     
    • 当我们想要登录某部 Windows 主机使用他所提供的文件数据时,必需要加入该 Windows 主机的群组 ( Workgroup ),并且我们的机器也必需要设置一个主机名称,注意喔,这个主机名称跟 Hostname 是不一样的,因为这个主机名称是架构在 NetBIOS 协定上的,我们可以简单的称呼他为 NetBIOS Name 好了。在同一个群组当中,NetBIOS Name 必需要是独一无二的喔
     
    • 好了,等到我们登录该主机之后,能不能使用该主机所提供的文件数据还要看 Windows 主机有没有提供我们使用的权限呐!所以,并不是登录该 Windows 主机之后,我们就可以无限制的取用该主机的文件资源了。也就是说,如果对方主机允许你登录,但是却没有开放任何资源让您取用,呵呵,登录主机也无法查看对方的硬盘里面的数据的啦!
     
    了解了呴,同样的 SAMBA 主机就使用两个 daemons 来管理这两个不同的服务:
     
    • smbd :这个 daemon 的主要功能就是用来管理 SAMBA 主机分享什么目录、文件与打印机等等的内容。
    • nmbd :这个 daemon 则是用来管理群组啦、NetBIOS name 啦等等的解析。
     
    所以啰, SAMBA 每次启动至少都需要有这两个 daemons 喔!这可不要忘记啰! ^_^而当我们启动了 SAMBA 之后,主机系统就会启动 137, 138, 139 三个 port ,且同时会有 UDP/TCP 的监听服务喔!这可不要忘记了!因为后面设置防火墙的时候,还会使用到这三个 port 的呢!
     

    连接模式的介绍 ( peer/peer, domain model )
     
    SAMBA 主机的应用相当的广泛,而且可以依照不同的网域连接与用户帐号、密码的控管方式不同,来加以不同的类别应用,例如最常见的 Workgroup 及 Domain 两种方式的连接模式呢!底下我们就是要来谈一谈这两种最常见的局域网路的连接模式 peer/peer 及domain model。
     
    • 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 可以达到上述两种模式的啦!底下我们会分别来介绍喔!

套件安装:

    事实上, SAMBA 的安装一点也不难,而且这个咚咚在各主要 distribution 上面都有提供,也都大同小异,所以,比较建议使用您自己的 distribution 所提供的 RPM 文件来安装喔!当然啦,您也可以自行使用 Tarball 来安装的啦!
     

    使用 RPM 来安装
     
    使用 RPM 来安装真是一点都不难啦!不过,要注意一下安装的套件名称就是了,因为不同的 distribution 对于 RPM 文件的命名都不太一样!举个例子来说, Red Hat 9 对于 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 等等。
     
    不过,在 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 端的设置

    由于 SAMBA 几乎一定包含在各个主要的 Linux distribution 当中,并且不同版本之间的功能差异也不是很大,所以,底下的介绍我们都以 RPM 安装的 SAMBA 套件来进行说明。当然啦,即使同样是 RPM 的文件,但是在各个 Linux distribution 当中, SAMBA 的主要文件放置的目录还是可能会不太一样。不过,因为 SAMBA 的设置档文件名都是不变的 ( smb.conf ),所以,虽然底下我们是以 Red Hat 9 为范例,不过,您依旧可以使用 locate, find, whereis 等指令在不同的 distribution 系统下找出 SAMBA 主要的设置档与运行档喔! ( 这就是为什么我们喜欢教大家使用 vi 以及纯文本模式学习 Linux 的原因,因为一法通,万法通啊!)
     
    另外,我一开始的范例当中都是针对没有设置防火墙的情况下所进行设置与测试,如果您的环境里面已经有架设防火墙的话,那么您应该要先了解防火墙的架构,并将 SAMBA 需要的 port 给他开放,否则很难测试成功喔!或者直接察看本章节较后面专门谈安全的部分,尤其是 iptables 与 /etc/hosts.allow(deny) 这部份喔!
     

    SAMBA 的套件结构
     
    我们这里以 Red Hat 9 的 SAMBA 套件来介绍他相关的一些设置档与运行档,不过,如果您的 distribution 并不是 Red Hat 9 ,那也没有关系,因为都是大同小异的啦!善用 locate 这个指令去搜索喔!
     
    • 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 主机单纯要用来做为文件服务器的话 (File Server) ,那么建议您 Linux 主机就不要安装 X Window 的咚咚,以节省一些硬盘的空间。此外,如果您想要针对不同的用户开放不同的登录权限,那表示您的 SAMBA 主机将会有很多人物同时进进出出的访问数据文件。为了避免某些用户占用了大部分的硬盘空间,也为了维护上的便利,这个时候挺建议您将 /home 这个目录独立出一个 parition ,此外,空间也要大一点,因为每个用户登录 SAMBA 系统的时候,缺省都是会进入到个人的家目录的,而 Linux 缺省的个人家目录就在 /home 底下,所以呐, /home 是需要大一些些的。
     
    • 在安装 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 开放喔!
     

    基础的设置流程与 smb.conf 的主要规划
     
    在开始设置 SAMBA 这个服务器之前,我们先来谈一谈应该如何较为简单的设置 SAMBA 吧!因为 SAMBA 的功能很强大,可以做为简单的单一主机控管自己分享出去的数据,也可以做为整个区域内所有电脑的帐号管理主机 ( Primary Domain Controller, 这部份我们会在后面进行介绍喔! )。不过,整个 SAMBA 的设置流程倒是没有多大的差异性!嗯!既然 SAMBA 是要让 Linux 加入 Windows 网上邻居的一项工具,那么我们就先来谈一谈,在 Windows 上面,您要如何分享你机器上面的目录给大家使用呢?
     
    1. 先在自己的电脑上面安装必要的协定:那就是 NetBIOS ( 有时候会是 NetBEUI 喔!)的安装咯!直接在网络设置里面设置好即可;
    2. 再来则是在文件总管里面设置好要分享的目录、磁盘或者是设备(如打印机);
    3. 然后,给这个分享出来的咚咚一组帐号及密码(如果需要的话),让外部用户可以使用这组帐号密码登录 Windows 主机;
    4. 然后就开始运作了!
     
    整个流程大概就是这么简单吧!事实上,在 Linux 底下的设置也是这么简单的啦!
     
    1. 先参考 局域网路的设置 那一章节,先搞定硬件的连接吧!
    2. 之后,先在 linux 上面的 SAMBA 设置档 smb.conf 里面设置好主机所支持的各项功能,例如是否需要密码、是否支持 PDC 等等;
    3. 然后在 smb.conf 的后半部当中设置好想要分享的目录与该目录的属性;
    4. 如果在步骤 2 里面的 smb.conf 文件内设置的分享方法是需要帐号与密码的登录时,就以 smbpasswd 创建用户的帐号与密码;
    5. 启动 smb 的服务,开始运转啰!
     
    呵呵!所以会动到的设置档几乎就是只有 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 都与权限有关的咯!
     
    注意一下,在上面的案例中,我们只有两个主要的设置群:
     
    • 一个是 [global] 的主机相关设置,这个是每个 SAMBA 主机都需要设置的喔!里面的规定都与 SAMBA 主机的环境有关!
     
    • 至于 [Webpage] 呢?他是什么玩意~这里我们举个实际的例子好了,当您在局域网路内以网上邻居登录某部主机之后,不是会看到该主机所提供的『目录或者设备的名称』吗?!那个 Webpage 就是名称啦!也就是说,当您以网上邻居登录 linux 时,看到的 Linux 所分享出来的目录名称就是『Webpage』啦!不过,这个 Webpage 只是在 SAMBA 服务当中所显示的名称而已,并不是真正的 Linux 文件系统上面的目录!这个 Webpage 所代表的真正的目录要看底下设置项目的『path』设置项目才行!这也就是说,当您在网上邻居登录 Linux 后,看到 Webpage 这个目录,用鼠标将他点下去,接下来看到的内容就是 /var/www/html 这个真正 Linux 文件系统里面的数据咯!
     
  • 关于变量:

  • 在上面的例子当中,我们有看到一个比较有趣的设置是『log file = /var/log/samba/log.%m』,怎么会有个 %m 啊?!呵呵!那个就是 SAMBA 里面的变量值啦!在 SAMBA 当中,为了便利用户的设置,所以会有许多的变量值提供给系统管理员来使用,主要的变量有底下几个:
     
    • %S:取代目前的设置项目值,所谓的『设置项目值』就是在 [ ] 里面的内容!举例来说:
    • [homes]
        valid users = %S
        ....
      因为 valid users 是允许的登录者,设置为 %S 表示任何可登录的用户都能够登录的意思~今天如果 test 这个用户登录之后,那个 [homes] 就会自动的变成了 [test] 了!这样可以明白了吗?! %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 的设置介绍吧!
     
    1. 主机预计分享的状况:

    2. 在整个 LAN 里面的工作群组 ( workgroup )为:birdhouse
      我的 Linux 主机 NetBIOS 名称为 ( netbios name ):birdhome
      安全设置为没有防备的 share (share 为 smb.conf 里面 security 的设置值)
      仅仅分享 /tmp 这个目录而已~
       
    3. 设置 lmhosts :

    4. 事实上,这个文件目前是可以不用设置了!不过,如果保险一点来看,设置一下也没有什么不好的!在这个文件当中,您要设置的数据很简单,就是每一部 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
      在我的区网当中总共有三部电脑,分别是 Linux 主机的 192.168.0.100 以及两部 Windows 主机 192.168.0.110 及 120 ,请注意喔!这三部电脑的工作群组都必须是 birdhouse 而电脑名称请个别取 birdbrother1, birdbrother2 等不同的主机名称呢!再次强调,这个名称是 NetBIOS name 喔!
       
    5. 开始设置 smb.conf:

    6. 在这个例子当中,我们仅分享出 /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 '^$'
      # 这个动作在确认一下上面的设置是否相同,因为有时候可能会忘记将某个
      # 设置给注解掉呢! ^_^
       
    7. 测试 smb.conf 设置值与启动 SAMBA :

    8. 设置好了最主要的设置档 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
      # 如果看到这样,呵呵!就应该没有问题啦!
      事实上,当您完成了 smb.conf 的设置时,请务必使用 testparm 来检查一下 smb.conf 的设置是否正确喔!因为很多时候,我们都会一不小心忘记这、忘记那的,所以,使用 testparm 来查阅一下设置值,确实有帮助的呐!此外,启动后,记得去察看一下 port 是否有启动喔!还有还有,不要忘记了,如果您原先就有设置防火墙的话,一定要去察看一下防火墙的设置是否已经启动了 137 ~ 139 的登录?!
       
    9. Client 端的测试:

    10. 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 Server

              Workgroup            Master
              ---------            -------
             birdhouse          birdhome

      看到上面显示的吗?!那个 smbclient 指令可以用来(1)查找某部主机的分享内容与(2)登录某部主机进行数据的访问!更详的用法我们会在底下说明!在上面的案例下,我们使用 -L 这个参数,去察看主机名称(注意,这里是以 netbios name 为主机名称喔!)分享出来的数据有哪些?!如上所示,列出 birdhome 该部主机的分享的目录 (tmp) 以及主机名称还有群组特性!这就表示 SAMBA 设置完成啦!
     
    这样就简单的设置完毕了!大家都可以使用网上邻居登录您的 Linux 主机,并且使用 /tmp 这个目录喔!而,如果您想要增加其他的目录开放给大家使用时,就请自行模仿 [tmp] 底下的设置值,

    不过,需要特别留意的仅是 Linux 的文件权限与 SAMBA 设置的权限关系!这个问题我们会在安全性与问题克服里面进行详细的说明喔! (注:这个问题最常发生在用户身上,因为『即使 SAMBA 主机设置您可以无限制的使用某个目录下的文件,但是是否能够使用,仍然得视登录 SAMBA 的该用户对于 Linux 的文件系统是否有访问的权限』喔!)
     


    设置需要用户登录的 Workgroup
     
    上面介绍了没有防备的 SAMBA 主机之后,您是否觉得:『呵呵!SAMBA 还真是不错用』啊!是没错啦!设置方面确实很简单,然而还是有缺点的,就是万一有外人不小心在网上邻居上面点一点、按一按,刚好进入到您的主机系统当中,由于您的主机系统是没有防备的,所以他可以自由的进出您的主机,也可以随意的将数据下载(或者是上传)到您的 SAMBA 主机上面,更可能由于局域网路内有 Nimda 等网络芳邻攻击型病毒,而将病毒硬塞一份到您的 SAMBA 主机当中,使得您的局域网路里面的网络带宽被吃掉之外,还可能使其他的局域网路内的 Windows PC 操作系统被搞破坏掉~哇!真是问题多多啊!所以啰!不建议在公共的场合底下设置无防备的 SAMBA ,即使是私人单位内部,还是不建议架设上面的没有任何防备措施的 SAMBA 主机喔!
     
    所以呢,接下来,我们要介绍的就是需要用户提供帐号密码才能登录 SAMBA 主机的设置方法咯!用户必须要能够提供帐号与密码供主机判定身份,若身份合格,才能够使用主机的相关资源喔!底下我们要介绍的是比较简单的 peer/peer 的连接 ( 相关的连接模式,请参考前面的连接模式一节 ),此外,使用的还是 workgroup 的方式来设置的喔!
     
    1. 主机预计分享的状况:

    2. 在整个 LAN 里面的工作群组 ( workgroup )为:birdhouse
      我的 Linux 主机 NetBIOS 名称为 ( netbios name ):birdhome
      安全设置为工作群组类型 user
      分享家目录与特定目录 /home/public 给所有用户使用
       
    3. 设置 lmhosts:

    4. 同样的,我有三部主机,请参考上一章节的设置值:
       
    5. 开始设置 smb.conf 并检验 smb.conf 的设置参数:

    6. 在这个案例当中,我们要分享的数据有(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 ,当然,这个目录就必须要存在啊!
      其实重点只有在于 security = user 以及 encrypt passwords 与 smb passwd file 这三行!有了这三行,您的 SAMBA 就需要去查找用户要登录时的帐号与密码了。同时,请注意在 [homes] 里面的设置当中,有一个 valid users 对吧!这个 valid users 指的是:『能够登录这个目录的用户是谁?』的意思!那么谁才有权力能够登录您的 SAMBA 服务器呢?!呵呵!这个底下直接告诉你。
       
    7. 设置用户帐号与密码:

    8. 设置用户帐号是很重要的一环,因为设置错误的话,当然也就任何人都没有办法登录的!在这里我们必须先要说明一下 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 的参数,让该帐号暂时无法使用喔!
      在上面的例子当中,我们仅有开放 bird 才能登录我们的主机喔!此外,在 smb.conf 里面有个设置 valid users ,这个 valid users 所规定可以使用 SAMBA 的帐号,就是在 /etc/samba/smbpasswd 里面出现的帐号啰!
       
    9. 重新启动 SAMBA 服务器与 Client 端的测试:

    10. 重新启动 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 的家目录了!
      # 也就是粗体字那一行啊!这样可以清楚的知道了?!
       
    11. 关于权限的简略说明:

    12. 由前面在介绍 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 )
     
    1. 预计达成的架构:
    2.  

       
      就如同上面的图标,我们在 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 服务器上面的数据啦! ^_^
       
    3. 设置 smb.conf 设置档:

    4. 我们预计分享的目录与权限就如同上一个步骤的说明,不过,我还想要额外的分享出 /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
      在这边的设置当中,最重要的地方在于 [global] 里面的 logon script 以及 [netlogon] 的设置了!这两个设置请特别留意不要设置错误了!否则会真的很麻烦~在这个案例当中,我让每个用户登录 PDC 辨识身份后,都去运行 /home/samba/netlogon/startup.bat 这个文件就是了!与刚刚我们上面建议的每个用户使用不同的 scripts 是不一样的设置值喔!请稍微留意一下呐!好了,在这样的设置值之后,我们就可以直接重新启动 smb 了!并且也可以提供 Windows 来登录我们的 PDC 啰!
       
    5. 处理 PDC 主机所需要的各个目录与文件:

    6. 刚刚上面我们设置了很多的不同的数据目录,在这里我们得要好好的给他创建起来!
      [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 当中了才对!
      在上面我们创建了 SAMBA 所需要的目录,尤其是那个 netlogon !然后,还需要创建每个用户登录都会去读取的 startup.bat 那个文件,注意啊!那个文件是 Windows 的格式,所以如果您在 Linux 上面编辑的话,不要忘记了加上特殊动作来转换格式!当然啦!如果您是在 Windows 的系统上面编辑 startup.bat 的话,那么特殊动作就不需要进行了!此外,由于我们想要让 bird 这个用户『不论在哪一部 Windows 2000 的机器上面,都可以套用同一组的个人设置值』,这个时候就得要让 /home/samba/profiles 内部存有与用户帐号相同的目录了,也就是 /home/samba/profiles/bird 这个目录喔!在这个目录下就具有 bird 的我的最爱啦、我的文档夹啦等等的数据!因为是 bird 的啊!所以记得要将该目录的所有人设置为 bird 才行喔!(注: /home/samba/profiles/user 每个用户的设置值最好不要太大,鸟哥曾经测试过,以我的 Windows 2000 原本的设置值完整的给他拷贝到 SAMBA 主机上,结果竟然发现有 300MB 这么大,导致我每次在 Windows 2000 登录 PDC 主机来取得我的 Profile 都要等大约 10 分钟左右,因为要将 profile 完整的读过来啊!(要传 300MB 的数据量啊!)
       
    7. 设置 Machine account 与 user account :

    8. 重要的工作来啦!我们要为 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 取消掉了!
      特别的再给他注意喔!因为 bird2000$ 与 bird98$ 只是 machine account ,所以不需要提供 Linux 的密码啊!也就是不需要 passwd bird2000$ 喔!不要去更动 /etc/shadow 的意思啦! ^_^
       
    9. Client 端登录 PDC :Windows 2000

    10. 要使用 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 啦!
      • 万一在您的设置过程当中,老是出现底下的画面:


      • 真是太可恶了!果真如此的话,那么建议您可以这样做看看:
        1. 先察看一下 /var/log/samba 里面的注册表信息,尤其是 bird2000.log 是关于 bird2000 这部主机的信息呐!
        2. 如果还是无法解决,可以在 lmhosts 里面增加 bird2000 的 IP 与主机名称的对应,然后将 samba 整个关掉『/etc/rc.d/init.d/smb stop』,等待一段时间让 NetBIOS 的名称解析时间逾时,再重新启动 samba 『/etc/rc.d/init.d/smb start』,然后再重新做一次输入 root 的密码那个动作!
        在我尝试过的案例中,上面第二个步骤挺有效的!不过,还是得要察看 /var/log/samba 里面的登录信息才行喔!
      • 当您再次的将 Windows 2000 重新开机之后,屏幕出现的登录画面会提醒您需要按下『Ctrl-Alt-Del』才能出现登录窗口,并且在登录窗口中会出现三个空格 (如果只有两个空格时,请按下『选项』喔,其他的功能就会自动的出现了!) :
        1. 用户名:这个名称可以(1)填入本机Windows 2000的用户名,也可以 (2)填入 PDC 上面的用户名,例如 bird ;
        2. 密码:这个密码也要对应上面输入的用户,看是本机或者是 PDC 主机的用户相对应的密码;
        3. 登录到:这里可以选择您所需要登录的是本机还是 PDC 网域呐!也需要与上面两个项目对应说!
      • 假设我以 bird 登录,并且选择 BIRDHOUSE网域 来登录之后,打开文件总管,会得到如下的网络磁盘机喔!


      • 所以,我就可以自由自在的使用我自己的网络磁盘啦!不论在那个电脑上面,都可以使用同一个 SAMBA 机器上的目录,并且使用的都是同一组密码 (因为记录在 PDC 主机上面),修改密码也很简单啊! ^_^
       
      经过上面的设置之后,如此一来,您就可以让用户在各个 Widnows 2000 的环境当中使用您的网络磁盘机啰! ^_^
       
    11. Client 端登录 PDC :Windows 98

    12. 在 Windows 98 上面登录 PDC 要比 Windows 2000 来的简单一些些说~整个作法可以这样来:
       
      • 先清除桌面,然后在桌面将鼠标指针移动到『网上邻居』上头,按右键,选内容,会出现如下画面:


      • 务必确认在上面的窗口当中,最上头的空白部分含有:
        1. TCP/IP 的协定:这个用来设置你的 IP 以及网络参数
        2. NetBEUI 的协定
        然后特别留意喔!在底下的空格上面,必须要是『Client for Microsoft Networks』的主网络登录模式,之后,请在上方的空格处,双击『Client for Microsoft Networks』,会出现如下画面:
      • 在上面出现的画面当中,只要动两个部分,分别是(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 进行打印机的分享工作,实在很简单!您可以这样一步一步的进行喔!
     
    1. 确定打印机可以正确输出:

    2. 既然要分享打印机,当然就需要在 Linux 上面的打印机可以正确的打印咯!请这样做:
      • 将打印机接在 Linux 主机的 LPT 打印端口上 ( 就是 25 针的那个插槽 );
      • 打开打印机的电源 (以后就不要关了吧! ^_^ );
      • 在 Linux 主机上面开一个终端机 ( Terminal ) ,然后输入:
      • [root@test root]# echo "Hello world" > /dev/lp0
        照道理来说,这样就可以将『 Hello world 』这个字符串输出到打印机上面去了!
      如果在打印机上面印出了 Hello world 时,就表示打印机已经准备妥当了!接下来就是各种设置啰!
       
    3. 安装 LPRng 套件:

    4. 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 的相关指令功能!

         
    5. 设置 LPRng 的设置档:

    6. 安装好了 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 

       
    7. 启动打印机的服务:

    8. 启动打印机实在很简单:
      [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
      如果有出现 printer 或者是 515 这个 port number 的话,那就表示 lpd 应该已经在 LISTEN 了!如果确定该程序没有问题,就可以将他写入开机时启动的设置档当中啰!
       
    9. 编写 smb.conf ,加入打印机的支持:

    10. 既然打印机已经 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
      如此一来,在同一个网域的朋友就可以看到我这一部 Linux 分享的打印机了,并且,打印机的名称为 HP LaserJet 1100 喔!很方便吧!
       
    11. 一些问题克服 ( lprm, lpq... )

    12. 由上面的步骤进行来看,这个时候您的 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
      # 将所有打印机的等待打印的数据通通删除!
      基本上,我最常下达的指令就是 lprm all 了!因为打印机出现问题时,使用这个指令可以将打印机等待中的数据通通杀掉,然后重新启动打印机,就可以恢复正常的打印啰!
     
    所以将您的 SAMBA 设置成为打印机服务器也不难吧! ^_^
     

    设置成为打印机服务器 ( Printer Server + CUPS 系统)
     
    除了 LPRng 这个打印程序之外,我们还可以使用较新的 CUPS 系统 ( Common Unix Printer System ) 来做为我们的打印进程喔!底下我以 Red Hat 9 为例来设计 CUPS + SAMBA 的设置方式:
     
    1. 安装 CPUS 的相关套件:

    2. 安装的套件就是 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 的套件当中,最重要的就是在 /etc/cups 这个目录内的文件了!尤其是主要的设置档 /etc/cups/cupsd.conf 喔!
       
    3. 设置 CUPS 的设置档 cupsd.conf 并启动 cups:

    4. 由于 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 的端口口呐!
       
    5. 设置您的第一部打印机:

    6. 好了,既然 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 里面喔!
      除了这个方法之外,其实我们可以使用简单的 Web 接口来管理,例如我可以在 192.168.0.100 这个 Client 上面,连上刚刚设置好打印机的 192.168.0.5 这个 server,连接的方法为使用浏览器,在网址列输入 http://192.168.0.5:631 ,然后按下 Printers 之后,出现下列图标:

      注意一下,如果如同上面的图标中,出现了『file:/dev/null』呵呵!那就表示『您的打印机发生错误了』,因为一般来说,Linux 本机打印机应该是会出现:『parallel:/dev/lp0 』才对喔!在上面的图标当中,您可以选择『Modify Printer』或者是『Configure Printer』来优化您的打印机呐! ^_^
       
    7. 编写 smb.conf ,加入打印机的支持:

    8. 既然打印机已经 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
      如此一来,在同一个网域的朋友就可以看到我这一部 Linux 分享的打印机了,并且,打印机的名称为 HP LaserJet 1100 喔!很方便吧!
       
    在打印机的设置当中,鸟哥曾经发生过一件相当糗的事情,我拼了老命的设置 LPRng 以及 CUPS 就是无法设置好 Printer ,虽然已经连上打印机了,但是就是印出来都是乱码,很伤脑筋~等到我花了一整天去恶搞之后,最后竟然发现,错误的地方在于『BIOS 的平行端口设置』唉!伤脑筋的很~还记得每次开机的时候系统都会去读取 BIOS 的设置吗?一般来说,按下 DEL 按键后,会进入 BIOS 的设置画面,在该画面当中,选择相关的设置参数,与 Parallel 有关的项目,将『模块』改成 EPP/SPP 吧!这样就可以支持您的打印机了!天呐!就因为这个设置值,让鸟哥花了一两天的时间,还差一点将主机砸掉....

Client 端的设置:

    整个 SABMA 的主要目的其实是针对局域网路来达成更便利的数据传输的手段,而既然是针对局域网路 ( LAN ) 的话,那么整个局域网路的 Windows 与 Linux 电脑的设置就得好好的搞定一番啦!因为整个 LAN 里面使用最多的大概就是那个 NetBIOS ( 一般常见的是后来的升级版,也就是 NetBEUI ),所以,您必须要在 Windows 里面至少设置两个通信协定才行:
     
    • TCP/IP
    • NetBEUI
     
    关于 Windows 的通信协定设置方法,我们已经在前面的『局域网路简介』里面提过了,这里不再赘述,请自行前往参考。除了这个协定的设置之外,在同一个网域之内,要将电脑以 LAN 兜在一起,最好还需要网络识别的方式:
     
    • 所有的电脑都是同一个『工作群组, Workgroup 』
    • 所有的电脑都有独特的『NetBIOS 主机名称』。
     
    还是得再次的强调,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 Server

            Workgroup            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 私房菜 -- 基础学习篇』的内容喔! ^_^

安全相关方面

    使用 SAMBA 其实也是挺有一定的危险性的!因为近期来利用 NetBIOS 来进行攻击的病虫实在是不少,而且,也有很多坊间的书籍在告诉大家『入侵的手段』啊!所以,我常常告诫我的朋友们,在 Windows 上面,资源分享完毕之后,应该立即将该分享的权限取消!以避免不小心被入侵或者被感染病毒的机会啊!此外,如果您是学校单位的话,那么利用 SAMBA 分配给每的班级自己的网页空间,应该是不错的想法,不过,如果有某个班级一下子就用掉您的大部分硬盘空间,这样对其他的用户来说,有点不太公平~因此,利用 quota 来限制每个用户(班级)的硬盘使用空间,也是一个很可行的方案啊! ^_^
     

    配合 quota 来规范用户的使用空间
     
    quota 是磁盘配额限制的一个 daemon ,您可以依据不同的用户来加以限制他们能够使用的硬盘空间,前提是『该磁盘空间必须是一个独立的 partition 』才行,不建议针对根目录『 / 』进行 quota !这也是为什么我们在主机规划时特别建议大家独立出一个 partition 来进行硬盘规划的原因!关于 quota 的详细用法在『鸟哥的 Linux 私房菜--基础学习篇』里面已经谈得很清楚了,这里我们不再详谈!只给大家来做个练习就是了!
     
    习题练习
      问:在规划主机的时候,我将 /dev/hda2 独立一个 partition 给 /home 这个目录,现在想要规划 quota 针对 bird 这个用户进行磁盘配额的限制,他的 hardlimit 为 50mb 而 softlimit 为 40mb ,请问整个动作应该如何进行?
       
    1. 编辑修改 /etc/fstab ,使得 /dev/hda2 这个 partition 成为如下模样:

    2. /dev/hda2   /home    ext3    defaults,usrquota,grpquota 1 1
      修改完毕之后,请千万记得使用 mount -a 查找看看有没有设置错误 (上面总共只有六个字段喔!),这个动作如果发生错误,那么请记得再次的进行 /etc/fstab 的修改!请特别留意啊!因为写错的话,很容易造成无法正常开机的窘境!
       
    3. 上述动作确定没有问题之后,请重新开机启动 quota 的支持:

    4. sync; sync; sync; reboot
       
    5. 运行底下的指令,创建 quota 所需要的设置文件:

    6. quotacheck -avug
      特别注意,如果上述的动作发生『找不到设置档』的意思的消息时,您可以这样做:
      touch /home/aquota.user; touch /home/aquota.group
      然后在进行一次 quotacheck 即可!
       
    7. 启动 quota 啰:

    8. quotaon -av
       
    9. 设置 bird 的磁盘配额:

    10. 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 这个网域开放 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
     
    当然啦!这是很简单很简单的防火墙规则,您必须要依据您的环境自行修改(通常修改那个 192.168.0.0/24 网段即可!)。除了 iptables 必须要开放之外,您还需要将管制 daemon 是否能够进出的 TCP Wrappers 开放才行呐!如果万一您看到 /etc/hosts.deny 里面多了这一行:
     
      ALL : ALL
     
    不要怀疑,很可能会造成不只 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 里面多加这一行:
     
      hosts allow = 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5
     
    各个 IP 之间都以空格隔开即可!此外,如果您想要针对整个网域来开放,例如本机的 127.0.0.0/8 这个网域,那么可以再加入:
     
      hosts allow = 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 127.
     
    这样就可以了!如此一来,虽然本机所在的网段 192.168.0.0/24 都可以尝试登录 SAMBA ( 因为可以通过 iptables 的规则 ),不过却会被 SAMBA 本身的设置挡住!这有什么好处啊?!好处就是在网段里面尝试登录 SAMBA 但是却遭 SAMBA 拒绝的 IP 与原因,都会被纪录到注册表里面去,如此一来,我们可以被动的利用分析 SAMBA 的注册表,以发现是否有人想要入侵或者是有某部电脑是否已经被不正常的病毒所感染呢!
     

    要备份些什么咚咚?( /home, 开放的咚咚, smb.conf, smbpasswd...)
     
    跟 SAMBA 最有关的当然就是用户的信息啰!所以,您应该要备份的就是用户的数据,以及 Samba 相关的设置数据了!比较相关的有几个咚咚:
     
    • /etc (因为含有 /etc/passwd 以及 /etc/samba 里面的数据,所以建议可以全部给他备份下来 )
    • /home (还是可以察看一下,是否有其他非必要的!不过,一般来说,都会是备份的个人数据比较多啦!)
    • 其他由 smb.conf 里面设置开放的目录。
     
    无论如何,备份还是挺重要的!

问题克服

    通常我们在设置 SAMBA 的时候,如果是以 Workgroup 的方式来进行 smb.conf 的设置时,几乎很容易就可以设置成功了!并没有什么很困难的步骤!不过,万一还是无法成功的设置起来,请务必察看注册表,也就是在 /var/log/samba 里面的数据!在这里面的数据当中,您会发现:咦!怎么这么多文件啊!因为我们在 smb.conf 里面设置了:
     
      log file = /var/log/samba/%m.log
     
    那个 %m 是指 Client 的 NetBIOS Name 的意思,所以,当有个 bird2000 的主机来登录我们的 birdhome 主机时,那么登录的信息就会被纪录在 /var/log/samba/bird2000.log 文件喔!而如果万一来源 IP 并没有 Netbios name 的时候,那么很可能是一些错误消息,这些错误消息就会被纪录到 log.smbd 里面去了!所以,如果您要察看某部电脑连上您的 SAMBA 主机发生了什么问题时,特别要留意这个注册表的形式喔!
     
    另外,如果您的 SAMBA 明明已经启动完成了,却偏偏老是无法成功,又无法查出问题时,建议先关闭 Samba 一阵子,再重新启动:
     
      /etc/rc.d/init.d/smb stop
     
    在我的案例当中,确实有几次是因为 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 里面提到的,(等待更新中)

  • 参考资源:


    本章习题练习

    • 一般来说, SAMBA 使用的设置档放置在哪里?文件名为何?
    • 哪一个指令可以用来判断 smb.conf 这个设置档的正确性?
    • 哪一个指令可以用来察看 SAMBA 主机分享出什么目录?
    • smbmount 的功能为何?
    • 我今天使用 smbpasswd 去添加一位用户 badbird,让他可以登录我的 Linux SAMBA 主机,但是无论如何就是无法添加。您认为原因可能是什么?

    • 前往参考用解答
    修改历史:
    2001/09/17:好久以前曾经完成的一项任务 ^_^
    2003/07/26:将 2001/09/17 所写的内容做了大幅度的修订,增加原理以及更多的设置项目!
    2003/09/10:将 PDC 部分补充的更完整,因为加入了个人化的 Profiles 在 /home/samba/profiles 当中了!同时加入课后练习喔
    2003/09/30:加入了 CUPS 打印机的支持!
    2005/10/17:特别注意到本文目前是以 samba 2.x 版本来写的, 所以在中文编码上面与最新的 samba 3.0.x 版本不同。请参考: 中文编码 网友的详细说明喔!

    备忘:让用户可以自己改密码的方式:
    http://moto.debian.org.tw/viewtopic.php?t=7732&
    http://de.samba.org/samba/docs/using_samba/ch09.html
    其他链接
    环境工程模式篇
    鸟园讨论区
    鸟哥旧站

    今日 人数统计
    昨日 人数统计
    本月 人数统计
    上月 人数统计