关于Samba

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得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@localhost ]#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 的原始程序代码,然后在自己的机器上面编译。
[root@ localhost ]#wget http://ftp.XX/Unix/Samba/samba-2.2.8a.tar.gz [root@ localhost ]#cd /usr/local/src
[root@ localhost # tar -zxvf /root/samba-2.2.8a.tar.gz
这个时候会有一个目录跑出来:/usr/local/src/samba-2.2.8a
[root@ localhost ]# cd samba-2.2.8a #(在这个目录中察看一下README )
[root@ localhost samba-2.2.8a]# cd source
[root@ localhost 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@ localhost source]#make #(开始进行编译!)
    这个过程会花一些时间,因为他会将原始码(source code) 刚刚设定
    并以 gcc 这个compiler 来进行编译喔!所以会花一些时间
    [root@ localhost source]# make install
    将刚刚编译完成的可执行binary 档案安装到 /usr/local/samba 里面
    在这个例子当中,未来您在设定SAMBA 时,必需要到 /usr/local/samba 当中。
    执行文件
    SAMBA 的执行文件一般来说,做为 SAMBA Server 的执行档有 testparm,smbd, nmbd, smbpasswd,至于做为 SAMBA Client 的执行档主要则是:smbmount,smbclient。 smbd 与nmbd:这两个执行档是那两个主要的 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 这个指令来进行同样的功能就是了。
    SMB方法
    当登入的使用者尝试连接远端的电脑网络分享,例如 \server\myshare,Windows 用户端会在向使用者取得任何使用者名称或密码前,自动传送登入使用者的登入资料至
    SMB 伺服器,在这步骤,如果认证失败,Windows 会弹出一个视窗,询问使用者名称和密码。
    一般来说,SMB 对话以下列次序建立:
    “TCP Connection” – 建立 3-way handshake (连线) 至 port 139/tcp 或 445/tcp。
    “NetBIOS Session Request” – 使用下列 “Calling Names”:本机的 NetBIOS name
    加上第十六个字元 16th character 0×00:伺服器的 NetBIOS name 加上第十六个字元 0×20
    “SMB Negotiate Protocol” – 决定使用的协定方言,会是以下其中一项:PC Network Program 1.0
    (Core) – 只是分享层级保安模式;Microsoft Networks 1.03 (Core Plus) – 只是分享层级保安模式;Lanman1.0
    (LAN Manager 1.0) – 使用 Challenge/Response Authentication;Lanman2.1 (LAN
    Manager 2.1) – 使用 Challenge/Response Authentication; NT LM 0.12 (NT LM 0.12)
  • 使用 Challenge/Response Authentication
    SMB 对话启动,密码会按以下其中一种方法加密 (或不加密): Null (没有加密);Cleartext (没有加密); LM
    和 NTLM;NTLM;NTLMv2。接著密码会弄乱并传送给要求对话的电脑 (讽刺地,这步骤会在要求密码前做)。
    SMB Tree Connect:连接分享的名称 (例如: \servername\share);连接至一种服务类型 (例如: IPC$
    named pipe)