当前位置:Linux教程 - Samba - samba - samba2.2配置成PDC

samba - samba2.2配置成PDC

samba2.2配置成PDC
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

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域控制


6.1. 说明
注意,作者提示:本文是David Bannon的Samba 2.2 PDC HOWTO和Samba NT Domain FAQ的结合。

Samba 2.2之前的版本已实现了少量的Windows NT 4.0主域控制器功能。而2.2版还完成了下面这些功能:

Windows NT 4.0/2000客户进行域登录

在用户安全级中加入Windows 9x客户

从Samba主域控制器中接收Windows客户的用户及组列表

漫游用户设置

Windows NT 4.0风格的系统策略

但还有这些功能没有实现:

Windows NT 4域信任

Windows NT 4.0域控制器的安全账号数据库复制(如,Samba主域控制器与NT备份域控制器进行复制,或反之)

通过用户管理器向域中添加用户账号

实现Windows 2000域控制器功能(如Kerberos和活动目录)

请注意,在本文所描述的Windows 9x客户并不是域中的真正成员。因此,支持Windows 9x域登录风格的协议与NT4域登录是完全不同的,而且这个功能早就被正式支持了。

从 Samba 2.2.0开始,正式支持了NT4风格的域登录,适用于Windows NT 4.0和Windows 2000 (包括SP1)客户。本文描述了把Samba配置成PDC所必须的步骤。开始之前请先确保它正常工作,否则请参考UNIX_INSTALL.html以及smb.conf(5)的手册页。

具体实现基本上分为两步:

配置Samba作为PDC


建立机器信任账号并把客户加入到域中来

另外还有一些次要的东西如用户配置、系统策略等。但这些并不是必须的,而且,这和Windows NT的网络概念是差不多的,这里只简单地提一下了。


--------------------------------------------------------------------------------

6.2. 配置Samba域控制器
首先是服务器工作所必须的smb.conf选项,在此就不详细解释了,详情请参见smb.conf(5)的手册页。为方便读者,我们已经把这些选项链接到smb.conf中实际的描述上了(译者注:如果你是单独获得这个文件的,请把它放到html版的手册页目录中去)。

以下是实现PDC的样本配置文件:

[global]
; 基本服务器设定
netbios name = POGO
workgroup = NARNIA

; 成为域及本地主浏览器
os level = 64
preferred master = yes
domain master = yes
local master = yes

; 安全性设定(必须使用security = user)
security = user

; PDC必须使用加密口令
encrypt passwords = yes

; 支持域登录
domain logons = yes

; 指定保存用户配置的目录
logon path = \%Nprofiles\%u

; 指定用户的主目录及相应的映射盘符
logon drive = H:
logon home = homeserver\%u

; 为所有用户指定一个通用登录脚本并使用[netlogon]共享项的相对DOS路径
logon script = logon.cmd

; 域控制器必须的共享项
[netlogon]
path = /usr/local/samba/lib/netlogon
writeable = no
write list = ntadmin

; 存放用户配置的共享项
[profiles]
path = /export/smb/ntprofile
writeable = yes
create mask = 0600
directory mask = 0700

对上面的配置,有几点需要强调一下:

必须使用加密口令,工作原理请参见ENCRYPTION.html文件。

服务器必须支持域登录并具有[netlogon]共享项。

为了使Windows客户查找域控制器,Samba服务器必须成为域主浏览器。

由于Samba 2.2并未真正实现NT组账号和UNIX组账号间的映射(原因一言难尽),所以你应该参考smb.conf文件中的domain admin users和domain admin group两个选项来建立域管理员之类的账号。


--------------------------------------------------------------------------------

6.3. 建立机器信任账号并把客户添加到域中
机器信任账号就是计算机账号。它的口令则是域控制器进行可靠通信所必须而且共享的机密。Windows 9x无法成为真正的域成员就是因为它不拥有机器信任账号,从而无法和域控制器协同工作。

机器信任账号的口令是保存在NT主域控制器的注册表中的。而Samba主域控制器则把它们与用户的LanMan和NT散列口令(通常是smbpasswd文件)保存在同一个目录中。但机器信任账号只使用NT散列口令。

要建立机器信任账号有两种方法:

在把客户加入到域之前,通过手工方式建立。如果用这种方法,那么这个机器信任账号的口令就是已知值 -- 小写的机器netbios名。

在客户加入到域时建立机器账号。如果用这种方法,就把用于添加客户的管理账号的会话关键字作为产生随机口令值的密钥。

为了产生Windows NT的SID,Samba需要让机器账号占有一个UNIX的uid,所以,所有机器账号都要在/etc/passwd和smbpasswd中有相应的项存在。在将来的版本中将无须在/etc/passwd中建立相应项。

在/etc/passwd文件中,机器账号的名称应该是机器名后加$符号,而且没有口令、登录shell及主目录等项。例如名为‘doppy’的计算机的账号应该是:

doppy$:505:501:NTMachine:/dev/null:/bin/false

如果你使用手工方式来建立机器账号,那么必须先在/etc/passwd(或NIS口令表)中建立相应项,然后再用如下命令格式在smbpasswd文件中添加机器账号:

root# smbpasswd -a -m machine_name

其中的machine_name为计算机的netbios名。

此时,请马上把该计算机加到域中去。入侵者可以利用这种开放的账号访问域中的用户信息。

如果你用的是在客户机加入域时自动建立其机器账号这种方法,那么需要在smb.conf中使用add user script选项并为其指定适当的值。以下示例可用于RedHat 6.2 Linux系统:

add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u

在Samba 2.2中,只有root账号才可以用这种方法来建立机器账号。因此在smbpasswd文件中还要root账号。但出于安全性考虑,最好为其另设口令,而不要使用同/etc/passwd中相同的口令。


--------------------------------------------------------------------------------

6.4. 常见问题及错误
机器账号后无法添加‘$’符号。

FreeBSD (和其它BSD系统)无法创建带‘$’符号的用户名。上述问题只有在创建账号时才会遇到,而建立之后就该账号就可以正常工作。所以可以先创建不带‘$’符号的用户账号,再用vipw编辑账号的用户名,在后面添加‘$’。或者,索性使用vipw创建整个账号,但要注意必须使用一个唯一的uid!

在建立机器账号时系统提示“你已经连接到域中”。

这说明你在客户端使用了一个不合法的账号来为计算机创建机器账号。请先退出,关闭初始连接并用其它合法的用户账号再试试。

另外,如果你的计算机已是一个‘组成员’,而它所属的组名与要加入的域同名的话(真是个坏主意),也会得到这样的信息。只要更换工作组名,重启后再试就可以了。

系统提示“加入到域时出现错误,提供的信任与现有设置发生冲突”

这和上面提到的“你已经连接到域中……”是同一个问题。

“系统无法为你提供登录(C000019B)”

我已经顺利加入到域中,但在更换了Samba版本后,尝试登录时就得到这样的信息:“系统无法为你提供登录(C000019B),请再试一次或与你的管理员联系”。

这是因为,保存在private/WORKGROUP.SID文件中的域SID发生了改变。例如,你删除了这个文件,但smbd又自动再创建了一个;要么就是,你正在版本2.0.7、TNG和HEAD分支代码之间换来换去(不推荐这么做)。要解决这个问题只有一个办法,那就是恢复原始域SID信息,或者从域中删除该域客户并重新加入。

“该计算机的机器账号不存在或不可访问”

当我试着把客户机加入到域中时得到这样的信息,这是什么问题?

这说明PDC上没有与当前客户机相对应的机器账号。如果你是使用add user script选项来建立账号,那么这就表示这个脚本在工作时出了问题,所以必须确保域用户管理正常进行。

另外,如果你是通过手工方式来建立账号,那么这样的信息就说明建立的账号有问题。看一下/etc/passwd和smbpasswd文件中是否存在机器账号,并确保其账号名是客户机的netbios名后加一个‘$’符号(如computer_name$)。另外,据说还有人发现,如果Samba服务器与 NT客户机的子网掩码不一致,也会发生这样的问题,这样的话你应该知道怎么解决了吧。


--------------------------------------------------------------------------------

6.5. 系统策略及配置文件
在Samba域中设置系统策略及漫游用户配置文件与在NT4域中是一样的。你应该阅读微软的白皮书Implementing Profiles and Policies in Windows NT 4.0。

这里有一些额外的资料:

什么是Windows NT策略编辑器?

要建立或编辑ntconfig.pol文件必须使用NT服务器策略编辑器poledit.exe,NT服务器版提供了这个程序。工作站版虽然也有一个策略编辑器,但不能用来建立域策略。此外,还可以在NT工作站/服务器上安装Windows 95的策略编辑器,但它无法以NT的方式来工作。然而,在工作站版中可以使用服务器版中的一些相应文件。所需的文件是poledit.exe、common.adm和winnt.adm,只要把两个*.adm文件放到 c:winntinf目录,程序会方便地进行查找。要注意的是inf目录是‘隐藏’的。

在Windows NT 4.0的 Service Pack 3(及更高版)中也提供了NT策略编辑器。只要用servicepackname /x命令解开文件就可以了,如,对于 service pack 6a就用Nt4sp6ai.exe /x。另外在Office97的策略样板文件及微软的零管理工具包中也可以找到该策略编辑器。

Win95可以执行策略吗?

只要在Win9x中安装组策略管理器就可以控制组策略了。该程序位于Win98光盘的 tools eskit etadminpoledit目录中,双击grouppol.inf就可以完成安装。然后重复注册/登录数次来检查 Win98是否执行了组策略。但每台Win9x主机都要安装一套,很麻烦。

如果你发现没有正常执行组策略,可以升级Win9x的grouppol.dll文件。而相应的组列表会从服务器的/etc/group中取得。

哪里有‘用户管理器’和‘服务器管理器’呢?

因为我没有购买NT服务器版的光盘,到哪里去找‘域用户管理器’和‘服务器管理器’?

微软发布了一套名为nexus的用于windows 95系统的工具,它包含了:

服务器管理器

域用户管理器

事件查看器

该工具可以从ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE下载。

Windows NT 4.0版本的‘域用户管理器’和‘服务器管理器’可以通过微软的FTP站点ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE下载。


--------------------------------------------------------------------------------

6.6. 其它可获得的帮助
在邮件列表、RFC和文档中可以获得很多资料。同Samba发布包随同提供的文档中对常见的SMB问题进行了很好地说明,如浏览问题等。

有没有用于调试域登录操作的诊断工具?

Samba本身就是最好的调试诊断工具了。你可以对smbd和nmbd使用-d选项来为它们指定一个调试等级。关于这个选项,可以参考这两个进程的手册页及smb.conf文件。其中,调试等级的范围是从1(缺省值)到10(用于调试口令)。

另外一个很有用的方法就是用gcc -g选项来编译Samba。这样就会在二进制程序中包含调试功能,你可以用gdb连接到正在运行中的smbd/nmbd 进程中。要把gdb连接到一个为NT工作站提供服务的smbd进程,首先要在工作站那一端建立连接,在登录时选择进入到域中,这样就会产生 ‘LsaEnumTrustedDomains’。然后,让工作站保持这个打开的连接,这时会有一个相应的smbd进程处于运行状态中(假定没有把空闲超时设得太短),当你在工作站端输入口令时,服务器端就可以用gdb进行连接了。

其它值得研究的Samba命令:

testparam | more

smbclient -L //{服务器的netbios名}

在http://www.tcpdup.org/有一个tcpdump的SMB专用版。另外,可以在http://www.ethereal.com找到另一个用于UNIX和Win32主机的包嗅探器Ethereal。

要在Windows NT上进行监视工作,可以使用MSDN光盘、NT服务器版光盘或SMS光盘中提供的网络监视器(netmon)。SMS中提供的版本可以监视任意两个计算机(要把网络接口置为混杂模式)间的通信数据包。而NT服务器版光盘提供的版本只能监视本地子网中流向自已及广播地址的通信数据包。另外,要注意Ethereal可以读写netmon格式的数据文件。

如何在NT工作站或Win9x机器上安装‘网络监视器’?

在 NT工作站上安装netmon可以按照以下的步骤进行,在这个例子中,安装的netmon版本是4.00.349,它来自 Windows NT Server 4.0,并安装到Windows NT Workstation 4.0,但同时需要这两个版本的安装光盘。其它版本的netmon安装步骤类似。

首先需要在NT服务器版上安装‘网络监视工具和代理’:

点击‘开始’-‘设置’- ‘控制面板’- ‘网络’- ‘服务’- ‘添加’

选择‘网络监视工具和代理’并点击‘确定’

在网络控制面板上点击‘确定’

按提示插入Windows NT Server 4.0安装光盘

这样,netmon程序就保存在%SYSTEMROOT%System32 etmon*.*。其中还有两个子目录,captures和parsers,后者存放分析数据包必须的DLL库。

然后在工作站上进行安装:

点击‘开始’-‘设置’- ‘控制面板’- ‘网络’- ‘服务’- ‘添加’

选择‘网络监视工具和代理’并点击‘确定’

在网络控制面板上点击‘确定’.

按提示插入Windows NT Workstation 4.0安装光盘

现在,把NT服务器的%SYSTEMROOT%System32 etmon*.*拷到工作站的%SYSTEMROOT%System32 etmon*.*,并设置适当的权限。注意,在NT上运行netmon需要管理员权限。

如果为Windows 9x安装监视工具,需要从它的光盘上安装网络监视代理(admin ettools etmon)。这个目录中还有一个readme文件,它介绍了安装步骤。


--------------------------------------------------------------------------------

6.6.1. 链接及类似资源
Samba主站。在这里我们提供了离你最近的镜像站点!

Samba镜像站中的开发文档可能会提到你的问题。如果是这样的话,就说明开发者正在解决它。

看看Scott Merrill是如何来模拟备份域控制器的:http://www.skippy.net/linux/smb-howto.html。

在http://bioserve.latrobe.edu.au/samba中,David Bannon维护了一篇把2.0.7作为PDC的文章。

在http://samba.org/cifs/中有其它关于CIFS的信息。

在http://mailhost.cb1.com/~lkcl/ntdom/中有关于UNIX上的NT域的内容。

早期SMB规范:ftp://ftp.microsoft.com/developr/drg/CIFS/


--------------------------------------------------------------------------------

6.6.2. 邮件列表
如何从邮件列表中获得帮助?

Samba有许多相关的邮件列表。请到http://samba.org选择离你最近的镜像站点,然后选Support栏中的Samba related mailing lists。

与Samba TNG有关的问题请到http://www.samba-tng.org。但请不要把这类问题发到Samba的主列表中去。

在使用邮件列表时请遵循以下规则:

记住,开发者是志愿工作者,他们没有任何收益,也不保证其观点百发百中,通常也只能算是最佳建议而已。

尽可能提供你所使用的Samba及操作系统的版本,还有smb.conf的有关部分,至少要给出影响PDC功能的[global]段中的选项。

如果你是通过CVS获得代码的,那么除了代码版本之外,还应提供最后一次刷新的日期。

请尽量简单厄要地表达问题,不要用html格式来发送邮件。

不要讨论无关的问题。

不要交叉投递,请选择最合适的列表进行提问。很多人都订阅了多个列表,他们讨厌过多地看到同一话题。如果有人看到某个问题更适合其它列表,会帮你转发过去的。

如果要讨论一个调试方面的问题,请不要把整个记录都发上来,提供相应的出错信息足矣。

如果你有一个完整的netmon跟踪信息(从打开管道到出错),那么就把*.cap文件发上来吧。

在邮件中夹带附件请三思而后行,最好只提供相关的部分。要知道Samba的邮件列表有大量的订阅者,不是每个人都希望收到一份smb.conf的。

如何取消邮件列表?

要退订请去当初订阅的地方看看:http://lists.samba.org,或者看一下这里。请不要在邮件中询问如何退订。


--------------------------------------------------------------------------------

6.7. DOMAIN_CONTROL.txt:Samba & Windows NT域控制
该附录的原作者为Samba开发小组的John H Terpstra。

注意:“域控制器”和那些与之相关的术语同属于一种特殊验证方法,这种方法是建立SMB域的基础。在Windows NT Server 3.1之前,各家公司都单独开发了域控制器,并各自对LAN Manager 2.1协议进行了扩展。Windows NT则使用了微软自己的方法来分发用户验证数据库。 DOMAIN.txt文件举例说明了Samba基于共享验证数据库机制参与或建立SMB域的方法,它和Windows NT的SAM是不同的。

Windows NT Server既可作为独立的文件和打印服务器,也可作为参与域控制的服务器(域成员、主域控制器或备份域控制器)。

OS/2 Warp Server、 Digital Pathworks和其它类似产品在这方面的功能都很相似,它们都可以同Windows NT一起参与域控制。但只有那些含有兼容 Windows NT代码的服务器才可以作主域控制器(如Windows NT Server、Advanced Server for Unix)。

对很多人来说这些术语实在是太令人混淆了,所以让我们来解释一下。

每个Windows NT系统(工作站或服务器)都有一份注册表数据库。该注册表含有所有在NT环境中运行的服务(与UNIX的后台进程类似)的初始信息。同时,注册表还包括应用程序所需动态库的位置。其实,它囊括了系统运作所需的全部信息。

在任何Windows NT机器上,只要打开一个命令提示符并输入以下命令就可以找到注册表文件:

C:WINNT>dir %SystemRoot%System32config

其中的环境变量%SystemRoot%可以用下面的命令得到:

C:WINNT>echo %SystemRoot%

你需要了解的主要几个注册表部件就是这些文件:default、system、software、sam和security。

在一个域环境中,Windows NT域控制器会互相复制SAM和SECURITY文件,这样就保证了域中所有控制器数据的一致性。

Windows NT系统是由一种安全模式构成的,在这种模式中,所有待运行的应用程序和服务都必须先向安全管理器验明自身以获得所需的适当权限。而且NT的用户数据库也位于注册表中,这些数据包括用户的安全标识符、主目录、组成员资格、桌面配置等等。

每个NT系统(工作站与服务器)都有自己的注册表。参与域安全控制工作的NT服务器共享一套公有的数据库,而工作站及独立服务器则各自拥有一份完全独立的注册表数据库,在这一点上,这两种系统是有区别的。

NT的用户数据库称为SAM(Security Access Manager),使用它可以完成所有用户的验证工作,另外还有交叉验证(例如,确保用户请求的服务项根据用户的权限进行工作)。

Samba 开发小组已经提供了一个工具,用来把NT的SAM转换为smbpasswd格式。该工具可以在离你最近的Samba镜像站的 /pub/samba/pwdump找到,详情可以参见ENCRYPTION.txt文件。这个工具虽然很有用,但要用它把SAM复制到Samba系统上却并不那么容易。

在一个由配置好了的NT服务器所控制的安全域系统中,Windows for Workgroups、 Windows 95和Windows NT Workstations/Servers都可以协同工作。每个这样的域最多只能有一台主域控制器 (PDC);而每个域至少要有一台备份域控制器(BDC)。这些域控制器要互相复制SAM数据库,因此它们的注册表中都会有最新的SAM信息。