Samba-HOWTO-Collection中文翻译版(2.20)

2013年08月23日 ⁄ 综合 ⁄ 共 19460字 ⁄ 字号 ⁄ 评论关闭

Samba计划文档 (初稿)

Samba小组

编译:meaculpa

中文译稿声明:

该文档是Samba软件的一部分,受GNU GPL保护,使用时请注意版权问题;由于译者水平有限,错误之处在所难免,希望各位读者来信指正,由此产生的一切后果,本人概不负责。



概要

本文档汇集了Samba文档历年来的HOWTOs。我试图确保所有内容都是最新的,但有时一个人维护不了这么大的项目。你可以在http://www.samba.org/的“Documentation”找到这份文档的最新版本,有更新的话寄给jerry@samba.org

干杯,jerry

目录表
1. 如何安装并测试Samba
1.1. Step 0: 阅读手册页
1.2. Step 1: 编译二进制
1.3. Step 2: 所有关键步骤
1.4. Step 3: 建立配置文件
1.5. Step 4: 用testparm测试你的配置文件
1.6. Step 5: 启动smbd和nmbd进程
1.6.1. Step 5a: 从inetd.conf启动
1.6.2. Step 5b. 可选法:以后台进程启动
1.7. Step 6: 尝试列出服务器可获得之共享项
1.8. Step 7: 尝试从UNIX客户端建立连接
1.9. Step 8: 尝试从DOS、WfWg、Win9x、WinNT、Win2k、OS/2及其它客户端建立连接
1.10. 如不工作咋办?
1.10.1. 诊断问题
1.10.2. 范围ID
1.10.3. 选择协议级别
1.10.4. 从UNIX向PC客户端进行打印
1.10.5. 锁定
1.10.6. 映射用户名
1.10.7. 其它字符集
2. Samba 2.x中的LanMan和NT口令加密
2.1. 介绍
2.2. 工作原理
2.3. 重要的安全性说明
2.3.1. SMB加密的好处
2.3.2. 非加密口令的好处
2.4. smbpasswd文件
2.5. smbpasswd命令
2.6. 设定Samba支持LanManager加密
3. 在Samba中配置微软分布式文件系统树
3.1. 介绍
3.1.1. 说明
4. Samba 2.2.x中的打印支持
4.1. 介绍
4.2. 配置
4.2.1. 建立[print$]项
4.2.2. 为现有打印机设定驱动程序
4.2.3. 支持大量打印机
4.2.4. 通过Windows NT APW添加新打印机
4.2.5. Samba和打印机端口
4.3. Imprints工具包
4.3.1. 什么是Imprints?
4.3.2. 建立打印机驱动程序包
4.3.3. Imprints服务器
4.3.4. 客户端安装程序
4.4. 从Samba 2.0.x向2.2.x迁移
5. Samba 2.x中的security = domain选项
5.1. 把Samba 2.2添加到NT域
5.2. Samba和Windows 2000域
5.3. 为什么比security = server选项更好?
6. 把Samba 2.2配置成主域控制器
6.1. 说明
6.2. 配置Samba域控制器
6.3. 建立机器信任账号并把客户添加到域中
6.4. 常见问题及错误
6.5. 系统策略及配置文件
6.6. 其它可获得的帮助
6.6.1. 链接及类似资源
6.6.2. 邮件列表
6.7. DOMAIN_CONTROL.txt:Samba & Windows NT域控制
7. 用Winbind在Windows NT与UNIX间进行统一登录
7.1. 概要
7.2. 介绍
7.3. Winbind的功能
7.3.1. 使用目标
7.4. winbind如何工作
7.4.1. Microsoft远程过程调用
7.4.2. 名字服务切换
7.4.3. 可插式验证模块
7.4.4. 用户及组ID的分配
7.4.5. 缓存结果
7.5. 安装及配置
7.6. 限制
7.7. 结语
8. UNIX权限位和Windows NT访问控制表
8.1. 用NT安全对话框浏览和修改UNIX权限
8.2. 如何浏览Samba共享项上的文件权限
8.3. 浏览文件所有权
8.4. 浏览文件或目录权限
8.4.1. 文件权限
8.4.2. 目录权限
8.5. 修改文件或目录权限
8.6. 使用创建掩码选项
8.7. 使用文件属性映射
9. OS2客户HOWTO
9.1. 常见问答集
9.1.1. 如何把OS/2 Warp Connect或OS/2 Warp 4配置成Samba的客户端?
9.1.2. 如何把How can I configure OS/2 Warp 3 (非Connect版)、OS/2 1.2、1.3或2.x配置成Samba的客户端?
9.1.3. 把OS/2(任何版本)作为客户端还有其它的问题吗?
9.1.4. 如何让OS/2客户下载打印机驱动程序呢?

10. 中文翻译版致谢


第1章. 如何安装并测试Samba

1.1. Step 0: 阅读手册页

Samba发布版中所带的手册页包含了大量有用的信息,如果你不知道怎样阅读它们,可以试试下面的命令:

$ nroff -man smbd.8 | more

在Samba的网站http://www.samba.org可以找到其它的资源。


1.2. Step 1: 编译二进制

先运行source目录中的./configure 程序。它会自动根据你的操作系统情况来对Samba进行配置,如果你有特殊要求可以运行:

root# ./configure --help

这样就可以看到想要的特殊选项。然后,再执行:

root# make

这样就开始创建二进制程序。当编译成功你就可以用:

root# make install

来安装二进制程序和手册页了。还可以用下面的命令分别安装二进制程序和/或手册页:

root# make installbin

root# make installman

注意,如果你正在对以前的版本进行升级,那么原来老版本的二进制程序已经更名为带“.old”扩展了。如果你发现当前版本有问题,可以用下面的命令退回到以前的版本:

root# make revert


1.3. Step 2: 所有关键步骤

在这一步你必须为自己准备好一杯咖啡或其它刺激性的饮料。安装过程有时很复杂,所以可能会需要这样的东西。如果你以前安装过Samba则可以跳过这一步。


1.4. Step 3: 建立配置文件

在发布包的examples子目录里有一份配置文件的样本。我建议你仔细阅读这个文件,看看各选项在实际使用中是如何搭配的。所有选项的信息请参见手册页。

下面是最简单实用的配置文件:

[global]
workgroup = MYGROUP [homes]
guest ok = no
read only = no

通过这样的配置,服务器上的用户只要用他们的账号就可能通过服务器与自己的主目录进行连接。(注意工作组也可以设置为Samba要加入的工作组名,请参见BROWSING.txt中的内容)

注意用make install不会安装smb.conf文件,你需要自己建立这个文件。(可以从发布包的examples/子目录里拷嘛)

然后把这个文件放到Makefile文件中指定的相应目录里(缺省查找/usr/local/samba/lib/目录)。

关于设置[homes]共享项的安全性请参考UNIX_SECURITY.txt文件。


1.5. Step 4: 用testparm测试你的配置文件

用testparm程序测试smb.conf文件非常重要。如果testparm运行OK就会列出可装载的服务项,否则会给出出错信息。在继续之前请确保它运行OK,并且服务项都符合要求。


1.6. Step 5: 启动smbd和nmbd进程

你必须选择是以后台进程方式还是从inetd里启动smbd和nmbd,注意二者只能选其一。要么把它们放到inetd.conf,然后由inetd根据需要来启动;要么从命令行或从/etc/rc.local里以后台进程方式启动。参见手册页中有关的命令行选项,特别要注意的是启动Samba的账号,通常必须是root。

以后台进程方式启动smbdnmbd的主要优势是,对初始化连接请求的响应要更快一点,不过这并不是个太大的问题。


1.6.1. Step 5a: 从inetd.conf启动

注意:如果你用NIS或NIS+来分发服务映射表的话,就会与以下方法有所不同。

找到/etc/services中所定义的端口139/tcp。如没有就把下面这行加进去:

netbios-ssn 139/tcp

类似的,还应该有如下这样的端口137/udp定义:

netbios-ns 137/udp

接着编辑/etc/inetd.conf并加入下面这两行:

netbios-ssn stream tcp nowait root /usr/local/samba/bin/smbd smbd
netbios-ns dgram udp wait root /usr/local/samba/bin/nmbd nmbd

各种UNIX版本中的/etc/inetd.conf其语法可能也不同。参考一下该文件中其它项目的格式。

注意:有些UNIX的/etc/services已经包含了诸如netbios_ns这样的项目(小心下划线)。你必须编辑/etc/services或者/etc/inetd.conf使它们一致。

注意:在很多系统上你必须使用smb.conf中的“interfaces”选项来指定系统接口的IP地址及掩码。如果你不知道网络的广播地址,请以root身份运行ifconfignmbd会在运行时尝试检测广播地址,但在有些系统上这样做就会失败。如有必要请参见“testing nmbd”部分获得查找方法。

!!!警告!!!多数UNIX的inetd.conf只接受大约5个命令行参数。也就是说你不应该在选项和参数间用太多空格,或者使用一个脚本并让它从inetd启动。

接着重新启动inetd,为此你只要给它发信HUP信号就可以了。如果你已安装了一个以前版本的nmbd,那还需要把它杀一下。


1.6.2. Step 5b. 可选法:以后台进程启动

要以后台进程方式来启动服务器,应该创建一个如下这样的脚本,并起名为诸如startsmb

 

#!/bin/sh
/usr/local/samba/bin/smbd -D
/usr/local/samba/bin/nmbd -D

然后用chmod +x startsmb这个命令使它可执行。当然你可以手工运行startsmb或者从/etc/rc.local启动。给nmbdsmbd各发一个杀进程信号就可以使它们停止运行。

注意:如果你用的是SVR4风格的init系统的话,可以改一下examples/svr4-startup这个脚本以使它适用于你的系统。


1.7. Step 6: 尝试列出服务器可获得之共享项

$ smbclient -L yourhostname

用上面这个命令,就可以得到一份服务器上可获得的共享项列表,不然的话就是设置上出了什么问题。注意,这个方法也可以用于查看其它LanManager客户端(如WfWg)可获得的共享信息。

如果选用了用户级安全,则Samba会在列出共享列表前要求你输入口令。详情请参见smbclient的手册页。(你可以在命令行上加入选项-U%来强迫它列出共享列表,但对于非Samba服务器就不能这么做了。)


1.8. Step 7: 尝试从UNIX客户端建立连接

$ smbclient //yourhostname/aservice

命令中的yourhostname应该是安装了smbd程序的主机名。而aservice就是在smb.conf文件中定义了的服务项。如果在smb.conf中定义了[homes]段的话可以试着用你的用户名来连接。例如,如果你的UNIX主机是bambi,而你的用户名是fred的话,该命令就应该是:

$ smbclient //bambi/fred


1.9. Step 8: 尝试从DOS、WfWg、Win9x、WinNT、Win2k、OS/2及其它客户端建立连接

要装载磁盘的话:

C:/WINDOWS/> net use d: //servername/service

要打印的话:

C:/WINDOWS/> net use lpt1: //servername/spoolservice

C:/WINDOWS/> print filename

至此,你已经安装成功,否则请向我汇报bug!


1.10. 如不工作咋办?

如果你万事不顺并开始考虑“是谁写了这一大堆的垃圾”的话,我建议你再做一次step 2(或多次),直到你平静下来。

然后你可以去读一下DIAGNOSIS.txt和FAQ。如果还是卡住的话请试一下邮件列表和新闻组(详情参见README)。Samba已经在世界上数千个站点成功安装,所以可能已经有人已经遇到并解决了你的问题。你还可以到WWW站点去查一下Samba-digest发布的消息。

当你修正了什么问题,请给我发回更新的文档或源代码,以方便后来人。


1.10.1. 诊断问题

如果你有安装方面的问题请参考DIAGNOSIS.txt,看看能否找到该问题。


1.10.2. 范围ID

缺省情况下Samba会用一个空的范围ID。这样的话,所有的windows机器也必须有一个空范围ID。如果你真想用非空的范围ID,就需要在nmbd、smbd和smbclient命令中使用-i <scope>选项,不过这样一来所有的机器都必须具有相同的设定。不推荐使用范围ID。


1.10.3. 选择协议级别

SMB协议有很多别名,现在Samba支持5种,它们分别是CORE、COREPLUS、LANMAN1、LANMAN2和NT1。

你可以在smb.conf文件中选择支持最高级的协议。缺省为NT1,对大多数站点来说这是最合适的。

以前一些版本的Samba必须使用COREPLUS,现在已经修正了这种限制,而且已经不太需要使用低于LANMAN1的协议了。保留COREPLUS只是兼容一些少数情况,如WfWg要在该协议中保持口令的大小写格式,而在LANMAN1、LANMAN2或NT1下所有的口令在被发送前都转换为大写,所以在某些情况下你可能要强制使用“password level=”选项。

使用LANMAN2和NT1主要的好处是支持一些客户的长文件名(如smbclient、Windows NT或Win95)。

详情请参见smb.conf(5)手册页。

注意:如要支持打印队列报表,则在WfWg下必须用TCP/IP作为缺省协议。如果在有些系统上把NetBEUI作为缺省的话,就会打断打印队列报表,这大概是WfWg的一个bug。


1.10.4. 从UNIX向PC客户端进行打印

要从一台UNIX主机使用smb服务器上的打印机,就需要编译smbclient程序。然后还需要安装“smbprint”脚本。详情请阅读smbprint的使用说明。

另外还有一个具有同样功能的SYSV风格脚本smbprint.sysv,它也有使用说明。


1.10.5. 锁定

有时锁定会产生一些麻烦。

SMB服务器要实现两种类型的锁定。第一种是“记录锁定record locking”,它允许一个客户锁定一个打开文件的一段字节;第二种就是“拒绝模式deny modes”(译者注:也称“共享模式”),它在打开文件时指定的。

Samba使用UNIX系统调用fcntl()来支持“记录锁定”。而通常实现的方法是用rpc来调用服务器上运行的rpc.lockd进程。不幸的是rpc.lockd实现问题太多了,特别是要与其他版本进行对话的情况。rpc.lockd崩溃并不是什么稀罕事儿。

还有一个问题是,把PC客户端产生的32位锁定请求转换为多数UNIX所支持的31位请求。但很多PC应用程序(典型的如OLE2应用)使用字节范围(其中最高位为标志位)的方式进行工作。Samba尝试通过转换来支持这类应用程序,并且这样的转换被证明是相当成功的。

严格意义上的SMB服务器应该在每次读写被调用文件之前检查其锁定情况。但fcntl()按上述方式来工作速度可能比较慢,而且会使rpc.lockd过载。当然这几乎也是不必要的,如果锁定对客户来说非常重要的话,他们应该在读写之前独立生成锁定调用。缺省情况下,Samba只在客户明确要求时才生成锁定调用,但如果你设置了“strict locking = yes”选项的话,它会在每次读写时生成锁定调用。

你还可以使用“locking = no”完全禁止记录锁定。用于那些不支持或不需要锁定的共享项(如cdrom)。此时,Samba会向客户端返回一个伪造的代码。

第二种锁定叫“拒绝模式”。它是在应用程序打开文件并决定允许的访问类型时设置的。客户端可以请求的模式有DENY_NONE、DENY_READ、DENY_WRITE或DENY_ALL。另外还有特殊兼容模式DENY_FCB和DENY_DOS。

在那些负载沉重的、执行共享模式代码很慢的服务器上,可以用“share modes = no”选项禁止共享模式。如果你的操作系统支持的话,可以使用共享内存加快共享模式的执行,详情参见Makefile文件中的FAST_SHARE_MODES选项。


1.10.6. 映射用户名

要映射PC及UNIX服务器的用户名,可以去看一下smb.conf中“username map”选项。详情参见smb.conf的手册页。


1.10.7. 其它字符集

如果文件名使用重音字符(如德语、法语或斯堪的纳维亚语)有问题,那么最好去看一下smb.conf中的“valid chars”选项以及examples目录中的validchars软件包。


Chapter 2. Samba 2.x中的LanMan和NT口令加密

2.1. 介绍

Samba兼容LanManager和Windows NT口令加密。

本文描述了SMB口令加密算法的工作原理,并给出了建议,请仔细阅读。


2.2. 工作原理

LanManager加密与UNIX口令加密稍微有些相似。SMB服务器使用一个存放用户口令散列值的文件,该文件的建立过程为:取得用户的明文口令,将首字母转为大写,然后要么截短到,要么用空字节补足14个字节长。然后把这14个字节值作为两个56位的DES密钥,用来产生出一个‘魔术’8字节值,最后形成一个16字节的值,并由服务器及客户机保存,这就是“散列口令”。

Windows NT的加密机制就更高级了,它对用户口令的Unicode码进行MD4散列运算,而且也产生一个16字节的不可逆散列值。

当客户端(LanManager、Windows for WorkGroups、Windows 95或Windows NT)要装载一个Samba驱动器(或使用Samba资源),就先发出一个连接请求并与服务器协商要使用的协议。Samba服务器在回复时产生一个8字节的随机值(这个值称为“质询”),并把它发回客户端,然后再保存起来。注意,对于每个连接其质询都是不一样的。

然后,客户端对上述16字节散列口令再加上5个空字节,把结果作为三个56位的DES密钥,再用这三个密钥去加密8字节的质询值,最后形成一个24字节的“响应”值。

客户端通过SMB调用SMBsessionsetupX(当选用用户级安全时)或SMBtconX(当选用共享级安全时)把响应值发给Samba服务器。当使用Windows NT协议级时,用户口令的散列值与响应值都要经过上述的计算,并通过SMB调用发给服务器,所以就有两个24字节的值。

Samba服务器用自己保存的16字节散列口令值(从smbpasswd取得,该文件在后面描述)和质询值重复以上计算,然后检查计算结果与客户端提供的24字节值是否匹配。如果匹配,那么允许客户端进行访问,否则拒绝访问。

注意,Samba服务器不了解也不保存用户口令的明文值 - 只是用它来进行加密。同样,这个明文口令或散列值也不在网络上传输,这样就增强了安全性。


2.3. 重要的安全性说明

从表面上看,UNIX和SMB的口令加密技术很相似,其实区别很大。在UNIX中,登录时通常通过网络发送明文口令,这很糟糕。而SMB加密机制虽然不通过网络发送明文口令,但它把16字节散列值保存在磁盘上,这也很糟糕。原因何在?因为该16字节散列值与“口令”等价:虽然不能从它那里得到用户的口令,但可以把它们用在一个经过修改的客户端程序中,以便访问服务器。虽然这需要一定的攻击技术,但却是完全可能的。所以请妥善保护smbpasswd。

当然了,理想的情况是,我们希望既不在网络上也不在磁盘上操作明文口令。遗憾的是这不可能,因为Samba要与其它SMB系统(Win、WfWg、Win95等)保持兼容。

警告

注意,Windows NT 4.0 Service pack 3改变了缺省的验证机制,不再在线发送明文口令。解决方法是,要么让Samba使用加密口令,要么编辑NT的注册表,重新允许使用明文口令。详情请参见WinNT.txt文档。

具有同样情况的微软操作系统还有:

  • 安装了基本网络重定向功能的MS DOS Network client 3.0

  • 更新了网络重定向功能的Windows 95

  • Windows 98 [se]

  • Windows 2000

注意:当前,微软所有的SMB/CIFS客户端都支持通过SMB质询/响应机制进行验证。允许使用明文口令并不会禁止客户参与加密验证的能力。


2.3.1. SMB加密的好处

  • 不通过网络传送明文口令。使用网络嗅探器无法记录传输的口令。

  • NT必须使用SMB加密口令同服务器进行通信。如果该服务器还在使用用户级安全模式,它会拒绝浏览服务器。它在每次连接时坚持要用户输入口令,当然这很烦人,而唯一的解决方法就是使用SMB加密。


2.3.2. 非加密口令的好处

  • 明文口令不保存的磁盘上。

  • 可以使用与其它UNIX服务一样的口令,如login和ftp。

  • 你可能已经使用了发送明文口令的其它服务(如telnet和ftp),所以多加一个也无关紧要。


2.4. smbpasswd文件

为了使Samba使用上述那些协议,必须查找用户名的16字节散列值。不幸的是,由于UNIX口令值也是通过散列功能来实现的,因此必须使用一个单独的口令文件smbpasswd存放这个16字节值。同时使用两个口令文件就应该避免同步问题。你可以用一个叫mksmbpasswd.sh的工具从UNIX的/etc/passwd文件产生一个smbpasswd文件,如:

$ cat /etc/passwd | mksmbpasswd.sh > /usr/local/samba/private/smbpasswd

如果你使用了NIS系统,就用:

$ ypcat passwd | mksmbpasswd.sh > /usr/local/samba/private/smbpasswd

我们把mksmbpasswd.sh程序放在Samba包的source目录中。而smbpasswd文件缺省情况是保存在以下目录的:

/usr/local/samba/private/smbpasswd

这里的/usr/local/samba/private/目录应该属于root,并且它的权限应是0500(chmod 500 /usr/local/samba/private)。

同样,这个目录里的smbpasswd文件也应属于root,且具有权限0600(chmod 600 smbpasswd)。

smbpasswd文件的格式如下(这里已被换行,在文件中应该是每项占一行):

username:uid:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:/
[Account type]:LCT-<last-change-time>:Long name

其中,Samba只使用usernameuidXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX、[Account type]和last-change-time这几项。

这里XXX段中两个冒号‘:’之间的32个‘X’字符极其重要,如果冒号间的字符不足32个,那么Samba对该账号的验证将会失败。其中第一个XXX段用于Lanman口令散列,而第二个则是Windows NT版本。

这个口令文件在建立时,所有用户的口令都是有32个‘X’字符。这样就禁止了用户对服务器的访问。当用户设置了口令后,‘X’字符改变为32个ascii十六进制值,用来表示其口令的16字节散列值。

要把用户口令设为空的话(不推荐),可以用vi编辑该文件并用“NO PASSWORD”这样的ascii文本替换头11个字符(不带引号)。

例如,把bob的口令清除之后,他的账号项应该如下:

bob:100:NO PASSWORDXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:/
[U ]:LCT-00000000:Bob's full name:/bobhome:/bobshell

如果你想让用户用smbpasswd命令设置他们自己的口令,就可以用NO PASSWORD来初始化他/她的口令项,这样他们在更改新口令时就不必输入旧口令了(不推荐,这不安全)。不过,必须让用户不提供口令也可以用smbpasswd程序连接到smbd进程,为此,你只要在smb.conf文件的[global]段中加入以下内容:

null passwords = yes

更安全的做法应该是为用户分配一个缺省口令而不是采用上述方法。

注意:要小心保护smbpasswd文件。如果有人可以接触这个文件,那他(具有足够的协议知识)就可以访问你的SMB服务器(要有足够的协议知识)。


2.5. smbpasswd命令

使用smbpasswd命令可以维护smbpasswd文件中的两个32字节口令字段。我们通常把它安装在/usr/local/samba/bin/目录中(或者你的主Samba二进制程序目录)。

注意,在Samba 1.9.18p4中,不要把这个程序配置为可以setuid到root身份(新版smbpasswd代码已经限制这个操作,不用担心会被意外地按这种方式运行)。

现在,smbpasswd程序以客户机/服务器模式工作,它作为客户端连接本地smbd,然后更改用户口令。所以,它就有下面这些优点:

  • smbpasswd不再被setuid到root身份 - 消除了大部分的安全问题。

  • 现在,smbpasswd可以更改Windows NT服务器上的口令(在更改NT域用户口令时只能将请求发给NT主域控制器)。

普通用户运行smbpasswd程序只要打:

$ smbpasswd

Old SMB password: <在此键入旧口令 - 如没有旧口令则打回车>

New SMB Password: <键入新口令>

Repeat New SMB Password: <重复输入>

如果旧口令输入有问题,或者两个新口令不匹配,就无法更改口令。

如果是以普通用户调用该程序,只能更改其自身的Samba口令。

如果是以root用户运行,就可以使用选项来指定要更改口令的用户。注意,smbpasswd不会提示或检查旧口令,因此可以用它来为忘记口令的用户重新分配口令。

对于熟悉UNIX的用户来说,smbpasswd的工作方法与使用passwdyppasswd命令类似。

关于这个程序的详情请参见它的手册页。


2.6. 设定Samba支持LanManager加密

下面简要描述一下如何来设定Samba,使它支持LanManager加密:

  1. 先编译安装好Samba。

  2. smb.conf文件的[global]段中加入encrypt passwords = yes选项,打开口令加密功能。

  3. 在Makefile文件指定的目录(--prefix=<dir>)中建立一份原始的smbpasswd口令文件。参见前面smbpasswd文件部分的详情。

提示,完成之后可以用smbclient工具来测试一下。


Chapter 3. 在Samba中配置微软分布式文件系统树

3.1. 介绍

使用分布式文件系统(DFS)可以把用户查看的文件、目录的逻辑视图与相应网络资源的物理位置隔离。它具有更高的可靠性、更透明的存储扩展性以及负载均衡等特点。有关DFS的详细资料可以在微软文档中找到。

本文描述了如何使用Samba在UNIX主机中实现分布式文件系统树(用支持DFS的客户端进行连接)。

要打开DFS功能,可以用--with-msdfs选项对Samba进行配置,当编译完成后,可以在smb.conf文件中设置全局选项host msdfs使Samba成为DFS服务器。然后再使用共享选项msdfs root指定一个共享项作为DFS根目录,这个目录用符号链接的形式来连接其它服务器。例如,在根共享目录中有一个符号链接junction->msdfs:storage1/share1,它表示一个DFS结点。当支持DFS的客户端访问这样的结点链接时,就会被重定向到实际的存储位置(在此例中为//storage1/share1)。

Samba的DFS系统可以同所有支持DFS的客户端(从Windows 95到2000)一起工作。

以下举例说明如何把Samba设置为DFS服务器。先建立如下这样的smb.conf文件

[global]
netbios name = Samba
host msdfs = yes [dfs]
path = /export/dfsroot
msdfs root = yes

在/export/dfsroot目录中,我们设置一些指到其它网络服务器的DFS链接。

root# cd /export/dfsroot

root# chown root /export/dfsroot

root# chmod 755 /export/dfsroot

root# ln -s msdfs:storageA//shareA linka

root# ln -s msdfs:serverB//share,serverC//share linkb

你应该为DFS根目录设置一定的权限,这样,只有指定的用户才能建立、删除或修改DFS链接。另外还要注意,符号链接名应该全部用小写。通过这样的限制,Samba就不会对链接名尝试所有的大小写组合形式。最后,设置符号链接使其指向需要的网络共享,然后重启Samba。

在支持DFS的客户端,用户可以通过//samba/dfs来浏览服务器上的DFS树。当访问linka或linkb(客户端显示的目录)时,就会立即转到相应的网络共享之上。


3.1.1. 说明

  • 如果Windows客户端已经装载的非DFS共享现在被用作了DFS根目录的话,就需要重新启动,反之亦然。其实,你应该用一个新的共享项作为DFS根目录。

  • 当前,DFS符号链接名必须全部使用小写字母。

  • 出于安全目的,作为DFS根的目录应该设置合适的权限,只允许指定的用户修改目录中的符号链接。


Chapter 4. Samba 2.2.x中的打印支持

4.1. 介绍

在2.2.0版本中,Samba使用MS-RPC(例如SPOOLSS命名管道)实现了本地Windows NT打印机制。以前的版本只支持LanMan打印调用。

新的SPOOLSS还提供了以下的额外功能:

  • 根据需要,支持Windows 95/98/NT/2000客户端下载打印机驱动程序。

  • 使用Windows NT添加打印机向导(APW)或Imprints工具包(参考http://imprints.sourceforge.net)上传打印机驱动程序。

  • 支持本地MS-RPC打印调用,如StartDocPrinter、numJobs()等等(关于Win32打印API的详情请参考MSDN文档http://msdn.microsoft.com/)。

  • 支持打印对象的访问控制表(ACL)。

  • 通过使用内部信息数据库来保存脱机任务信息,更好地支持打印队列操作。

注意,Windows NT/2000客户端要求Samba服务器为打印机分配一个合法的驱动程序。为此,就要考虑支持MSRPC打印调用以;而Windows 9x客户端无须Samba主机安装打印机的驱动程序。而且,Samba也不使用这些驱动程序来处理假脱机文件,驱动程序完全是客户端使用的。


4.2. 配置

[print$] 与 [printer$]

在以前的版本中,Samba推荐使用一个名为[printer$]的共享,它来自于Windows 9x共享打印机时所创建的printer$服务。Windows 9x打印服务器总是用这个printer$服务来让用户不用口令就可以下载打印机驱动程序。

另外,在那些版本中还有两个与此有关的选项:printer driver locationprinter driver。前者用于指定保存打印机驱动程序的目录,后者定义打印机驱动程序名。

现在它们已被忽略,所以请别再用了。关于如何进行更新,请参考移植部分


4.2.1. 建立[print$]项

为了上传打印机驱动程序文件,你必须先配置共享项[print$]。注意,它的名称很重要(print$是Windows NT打印服务器用来提供打印机驱动程序下载的服务项),别写错了。你可以参考一下下面这个例子(当然,有些选项值,如‘path’是任意的,可以用适当的值进行替换):

[print$]
path = /usr/local/samba/printers
guest ok = yes
browseable = yes
read only = yes
; 由于把它配置为只读,所以需要一个‘write list’。检查文件
; 系统权限以确保该账号可以向这个共享拷贝文件。如果这个账号
; 不是root账号,则应该作为‘printer admin’。
write list = ntadmin

使用write list选项可以让指定的用户具有写权限,这样他/她就可以在这个共享中更新文件。配置文件共享的详情请参见smb.conf(5)手册页

guest ok = yes这个选项的取舍取决于你的站点是如何配置的。如果Samba服务器上的每个用户都有账号,就无须使用了。

作者注:无须使用的含义是,如果所有的Windows NT用户都可以通过Samba服务器进行验证(这说明域用户及NT本地用户已经可以通过域控制器进行验证),那么guest访问是不必要的。当然,如果你没有禁止某些用户访问服务器,同时也没有安全方面的顾虑,还是可以放心使用这个功能的。要禁止用户,可以在[global]段中加入map to guest = Bad User选项,不过在使用前最好彻底理解该选项的含义。--jerry

Windows NT打印服务器要支持多种客户端平台下载相应的驱动程序文件,必须在[print$]服务项中建立对应每一种平台的子目录,Samba也使用了这种方法。

你可以在[print$]共享项下为每一种希望支持的平台建立对应的子目录。

[print$]-----
|-W32X86 ; "Windows NT x86"
|-WIN40 ; "Windows 95/98"
|-W32ALPHA ; "Windows NT Alpha_AXP"
|-W32MIPS ; "Windows NT R4000"
|-W32PPC ; "Windows NT PowerPC"
注意!需要权限

在当前版本中,要为samba服务器添加新打印机,必须满足以下两个条件中的任意一个:

  • 向Samba服务器添加打印机的账号,其uid必须为0(如,root账号)。

  • 向Samba服务器添加打印机的账号必须是printer admin列表中的成员之一。

当然,该账号还应该有权在[print$]子目录下添加文件。要记住,缺省情况下所有文件共享项都是‘只读’的。

当建立了所需的[print$]服务项及相关子目录后,只要在Windows NT 4.0客户端用root账号(或printer admin)登录到Samba服务器。选到Samba服务器的“打印机”文件夹中,这时应该就看到服务器定义的打印机共享列表。


4.2.2. 为现有打印机设定驱动程序

如上所述,Samba服务器打印机文件夹中的打印机列表还没有分配实际的驱动程序。但在缺省情况下,Samba会把驱动程序名设为“NO PRINTER DRIVER AVAILABLE FOR THIS PRINTER”。要是你试图查看打印机属性,就会得到如下信息:

Device settings cannot be displayed. The driver for the specified printer is not installed, only spooler properties will be displayed. Do you want to install the driver now?

在对话框中点击“No”后就会出现打印机属性窗口,这时有两种可选的方法来安装驱动程序:

  • 点“New Driver...”按钮安装一套新的,或者

  • 从已安装的驱动程序下拉列表中进行选择。最初该列表为空。

如果你要安装Windows NT x86以外的操作系统驱动程序,就要使用打印机属性对话框中的“Sharing”书签。(译者注:该书签中有一按钮为“Other Driver”)

如果你使用root账号连接到服务器,还可以在这个对话框中修改其它打印机的属性,如ACLs和设备设定。

最后还要说明一下,Windows NT打印服务器有可能会把并未共享的打印机列在打印机文件夹中。但Samba就不考虑这种情况了,根据定义,它只共享smb.conf文件指定的那些打印机。

另外还有一点很有趣,Windows NT客户机并不使用SMB打印共享,而宁愿使用MS-RPC直接打印到远程NT主机。当然,这要假定要打印的人在远程主机上必须有一定权限,Windows NT为打印机分配的缺省权限为:“Everyone”组可打印。


4.2.3. 支持大量打印机

在我们开发Samba 2.2的时候曾经出现过一个问题,那就是需要支持下载100台打印机的驱动程序。如果用Windows NT APW来实现的话就稍微有点麻烦了。要是多台打印机都共用驱动程序的话,就可以用rpcclient的setdriver命令对已安装的驱动程序进行关联。例如:

$ rpcclient pogo -U root%secret -c "enumdrivers"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3] [Windows NT x86]
Printer Driver Info 1:
Driver Name: [HP LaserJet 4000 Series PS] Printer Driver Info 1:
Driver Name: [HP LaserJet 2100 Series PS] Printer Driver Info 1:
Driver Name: [HP LaserJet 4Si/4SiMX PS] $ rpcclient pogo -U root%secret -c "enumprinters"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
flags:[0x800000]
name:[//POGO/hp-print]
description:[POGO//POGO/hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
comment:[] $ rpcclient pogo -U root%secret /
> -c "setdriver hp-print /"HP LaserJet 4000 Series PS/""
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
Successfully set hp-print to driver HP LaserJet 4000 Series PS.

4.2.4. 通过Windows NT APW添加新打印

缺省情况下,Samba在“打印机”文件夹中会提供smb.conf文件定义的所有共享打印机。同时,如果满足以下条件,就会在该文件夹中提供添加打印机向导的图标:

  • 连接的用户可以用管理权限(如root账号或printer admin)调用OpenPrinterEx(//server)。

  • 指定选项show add printer wizard = yes (缺省值)。

要用APW在Samba服务器上添加打印机,必须定义add printer command选项,这个选项所指定的程序也必须可以用来向系统(例如/etc/printcap或相应的文件)及smb.conf添加打印机。

当客户端使用APW图标添加的共享打印机不存在时,smbd会执行add printer command并重新分析smb.conf文件,然后查找新的打印机共享。如果该共享还未定义,则向客户端返回“拒绝访问”出错信息。注意,add printer program是以连接的用户身份执行的,它并不需要root来执行。

另外还有一个附加选项delete printer command,可以用它来从“打印机”文件夹中删除打印机项。


4.2.5. Samba和打印机端口

Windows NT/2000打印服务器为每台打印机分配一个端口,通常是LPT1:、COM1:、FILE:等等。同样,Samba也必须支持打印机端口这种概念,但系统上缺省只有一个打印机端口,称为“Samba Printer Port”,这并不是一个真正的打印端口,因为只有Windows客户机才需要它。

注意,Samba并不支持“打印机缓冲池”这个概念,当一台逻辑打印机分配了多个端口时,缓冲池用作负载均衡或失败重试。

如果你需要定义多个端口,smb.conf文件中有一个enumports command选项,你可以用它指定一个外部程序,通过这个程序在系统上产生一列端口。


4.3. Imprints工具包

Imprints工具包提供了一套与Windows NT APW等价的UNIX程序。详情请参见Imprints的网站http://imprints.sourceforge.net/。另外,它的源代码发布包中有详细的文档可以参考,本节只简要介绍一下。


4.3.1. 什么是Imprints?

Imprints是一套工具包,它支持以下功能:

  • 统一存储Windows NT及95/98的打印机驱动程序。

  • 提供建立Imprints打印机驱动程序所必须的工具集。

  • 提供了一套用于客户访问、安装远程Samba及Windows NT服务器打印机的程序。


4.3.2. 建立打印机驱动程序包

建立打印机驱动程序包的细节超出了本文的范围(详情请参见Samba发布包中的Imprints.txt文件)。简而言之,Imprints驱动程序包是一套含有驱动程序、相关INF文件及客户端安装所需之控制文件的压缩包。


4.3.3. Imprints服务器

Imprints服务器实际上是个数据库服务器,你可以通过标准HTTP机制对它进行查询。数据库中的每个打印驱动程序项都有一个相关的URL用于下载。而且每个包还附带GnuPG产生的数字签名,用这个签名就可以验证所下载包的真实性。建议“不要”禁止这个安全特性。


4.3.4. 客户端安装程序

Imprints客户端安装程序的详情请参见源代码包所含之Imprints-Client-HOWTO.ps文件。

Imprints客户端安装程序有两种形式:

  • 一组Perl命令行脚本

  • 一个基于GTK+的Perl命令行脚本的图形界面

用客户端程序可以查询Imprints数据库服务器已知的打印机型号,还可以下载并安装远程Samba和Windows NT打印服务器提供的驱动程序。

基本安装过程有四个步骤,并用smbclientrpcclient对Perl代码进行了包装。

foreach (支持的打印机架构平台)
{
1. rpcclient: 取得远程服务器上的适当上传目录
2. smbclient: 上传驱动程序文件
3. rpcclient: 发送AddPrinterDriver() MS-RPC调用
} 4. rpcclient: 发送AddPrinterEx() MS-RPC调用,实际建立打印机

当在各种客户端平台上执行Imprints工具包时会遇到驱动程序名的问题。例如,Windows NT使用诸如“Apple LaserWriter II NTX v51.8”的驱动程序名,而Windows 95则使用“Apple LaserWriter II NTX”。

问题是,对于打印机来说,要更新的是哪一套客户端驱动程序呢。有经验的读者会记得Windows NT的打印机属性对话框只用一种打印机驱动程序名。可以看一下下面这个Windows NT 4.0系统的注册表项:

HKLM/System/CurrentControlSet/Control/Print/Environment

你会发现Windows NT总是使用NT的那一套驱动程序名,这当然没有问题,因为NT只查找现有的NT版驱动程序。但Samba没有这种特性,因此,当驱动程序还没有安装时,就不能只使用一种驱动程序名?

要解决这种问题,就需要使Imprints的打印机驱动程序包同时含有Windows NT和95/98的驱动程序,并且先安装NT的。

校对中……


4.4. 从Samba 2.0.x向2.2.x迁移

在Samba 2.2中,打印机驱动程序的管理已经与以前的版本有所改变(我们希望有所改进),从你现有版本向2.2迁移可能会遇到象下面这样的问题。

一般说来,Windows系统具有一定的记忆功能。如果Windows NT客户端已连接过Samba 2.0服务器的话,它会记住这是一台LanMan打印服务器。而Samba2.2版本会尽可能支持MSRPC打印,当你升级以后,NT客户还是记住以前的设置。

要使用全新的MSRPC打印功能,先用下面的命令停掉客户端的假脱机服务,再删除[HKLM/SYSTEM/CurrentControlSet/Control/Print]中与打印服务器有关的注册键。

C:/WINNT/> net stop spooler

请小心操作注册表。

当删除了相应的注册表项之后,请用start替换掉刚才命令中的stop来重启假脱机服务。

另一方面,Windows 9x使用LanMan打印调用,无须进行任何修改操作。

警告

我们将考虑把以下的smb.conf选项作废掉,所以请不要在新的安装中再使用了。

  • printer driver file (G)

  • printer driver (S)

  • printer driver location (S)

在迁移过程中,你可能会面临如下的方案:

  • 无须支持Windows NT打印机驱动程序,则只要使用现有的选项就可以了。

  • 如果要支持NT打印机驱动程序,但却不想把9x驱动程序迁移到新服务器上,那么请保留现有的printers.def文件。当smbd在TDB中查找打印机的9x版驱动程序失败时,就会使用printers.def文件(及所有相关的选项)。make_printerdef工具仍会保持向后兼容,不过已经这属于那种老掉牙的工具了。

  • 如果在Samba服务器上安装了打印机的Windows 9x版驱动程序,那么这套程序的优先级最高,上面那三个旧的打印选项将被忽略(包括printer driver location)。

  • 如果要把现有的printers.def文件迁移到新服务器上,那么只能用Windows NT的APW来安装NT及9x驱动程序了。详情请参见smbclientrpcclient的用法。另外在http://imprints.sourceforge.net/有Imprints客户端安装程序的示例。


Chapter 5. Samba 2.x中的security = domain选项

5.1. 把Samba 2.2添加到NT域

要把Samba服务器添加到NT域中,必须在PDC的域服务器管理器中加入它的NetBIOS主机名,这样就在PDC的域SAM中加入了它的机器账号。要注意的是,在添加时要把Samba服务器作为一台“Windows NT工作站或服务器”,而不是“主或备份域控制器”。

假定你要把一台名为SERV1的Samba服务器加入到NT域DOM中,而该域的主域控制器及两个备份域控制器分别名为DOMPDCDOMBDC1DOMBDC2。那么首先停掉所有的Samba后台进程,再运行以下命令:

root# smbpasswd -j DOM -r DOMPDC

如果运行顺利,则会得到以下信息:

smbpasswd: Joined domain DOM.

smbpasswd(8)的用法请参见其手册页。

在以后的发布版中,加入域时就无须事先在PDC上创建机器信任账号了。

通过上面这条命令,Samba服务器使用机器账号口令更改协议,把它

https://www.xuebuyuan.com/800792.html

最新文档:https://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf

https://opensource.apple.com/source/samba/samba-72/samba/docs/Samba-HOWTO-Collection.pdf

https://blog.csdn.net/tang_fu/article/details/6160483

http://down.51cto.com/data/226117/

samba Doc的更多相关文章

  1. linux下Samba服务配置

    SMB是基于客户机/服务器型的协议,因而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可 ...

  2. samba基本配置

    安装启动不用说了 vim /etc/samba/smb.conf workgroup = WORKGROUP server string = Samba Server %vnetbios name = ...

  3. 最佳vim技巧

    最佳vim技巧----------------------------------------# 信息来源----------------------------------------www.vim ...

  4. OpenWrt中开启usb存储和samba服务

    在从官网安装的WNDR3800 15.05.1版本OpenWrt中, 不带usb存储支持以及samba, 需要另外安装 1. 启用usb支持 USB Basic Support https://wik ...

  5. LDAP与Samba

    默认的Samba服务器支持本地系统用户(smbpasswd添加后)访问Samba资源,不支持OpenLDAP服务器账号访问Samba共享资源 目的:配置完后,OpenLDAP每新增一个用户,就自动支持 ...

  6. samba的rpm包,只有tar.gz文件安装

    tar.gz包是源代码的包,不能直接运行,需要安装tar xvf samba-3.5.1.tar.gz cd samba-3.5.1 &&cd source3 &&./ ...

  7. 【转】Samba配置文件详解

    一. 客户命令: 1. smbclient smbclient 命令用来存取远程 samba 服务器上的资源,它的界面到目前为止还是文本方式的,命令形式和 ftp 类似. smbclient 命令的语 ...

  8. Samba服务器搭建配置

    本次环境: 服务端-centos6.8-192.168.2.200 客户端1-centos6.8-192.168.2.201 客户端2-Windows7-192.168.2.104 假设条件如下: 使 ...

  9. debian之samba服务器搭建

    安装过程非常简单: apt-get install samba sudo vim /etc/sama/smb.conf [pengdl] comment = pengdl's samba path = ...

随机推荐

  1. JavaScript 框架(库)

    JavaScript 高级程序设计(特别是对浏览器差异的复杂处理),通常很困难也很耗时. 为了应对这些调整,许多的 JavaScript (helper) 库应运而生. 这些 JavaScript 库 ...

  2. mac与phy怎样实现网络自适应

    这两天改动网卡驱动以实现10/100/1000M自适应,因此研究了下phy芯片和emac驱动怎样兼容10/100/1000M网络环境,记录在此. 网络中设备端数据链路层由mac芯片和phy芯片组成.p ...

  3. 安装VC6.0遇到的问题

    1. 问题现象 安装VC6.0后,又安装了VS2005.用VC6.0打开以前的.dsw文件时,程序自动关闭.如下图所示. 具体操作是:选择一个.dsw文件,右键菜单[打开方式]中选择[Microsof ...

  4. urllib -- ProxyHandler处理器(代理设置)

    import urllib.requestimport randomimport ssl proxy_list = [ {"https" : "196.61.27.58: ...

  5. CodeIgniter框架——函数(时间函数、装载函数)剖析+小知识点

    连接数据库: 格式: mysql -h主机地址 -u用户名-p用户密码 数据库的提示符:mysql> 退出数据库: exit(回车) 知识点积累: 1.date_default_timezone ...

  6. poj2420(模拟退火大法好)

    // // main.cpp // poj2420 // // Created by 陈加寿 on 16/2/13. // Copyright © 2016年 chenhuan001. All rig ...

  7. git github usage

    以gerrit-trigger-plugin为例,下面的链接都是从相应页面上直接拷贝的. 法一:不用github的账号,打开这个库在github上的主页,运行下面命令即可 read only 运行命令 ...

  8. exe4j中"this executable was created with an evaluation version of exe4j"

    在使用exe4j时,如果您的exe4j没有注册,在运行有exe4j转换的*.jar为*.exe的可执行文件是会提示:"this executable was created with an ...

  9. MySQL中事务的概述ACID了解

    事务可由一条非常简单的SQL语句组成,也可以有一组复杂的SQL语句组成.事务是访问并更新数据库中各种数据项的一个程序执行单元.在事务中操作,要么都做修改,要么都不做,这就是事务的目的,也是事务模型区别 ...

  10. bzoj3007 解救小云公主

    3007: 解救小云公主 Time Limit: 5 Sec  Memory Limit: 512 MB Submit: 159  Solved: 71 [id=3007" style=&q ...