方案一:通过SMB的SSH
我们要建立的第一个方案将是经过调整的Linux服务器,这样通过安全外壳协议(SSH)连接至该服务器的任何服务都可以通过服务器消息块(SMB)进行验证,以便访问Windows服务器。虽然Windows NT 3.51、NT4、2000或XP服务器都可以,我们还是使用了微软的Windows 2000 Advanced Server。
虽然SSH协议使用口令或证书密钥用来验证,但SMB验证只使用口令。我们把口令用于SSH会话。如果使用证书,SMB验证就不会参与验证过程。你可以使用能够识别PAM的任何SSH服务器,不过我们推荐随同Red Hat 7.2交付、已经集成到里面的OpenSSH服务器。
为此,我们需要Red Hat Linux7.2系统默认状态下不包括的一个PAM模块(欲了解下载及编译该模块的信息,请见下面附文“PAM中的Windows Domain验证”以及SMB口令发问/应答验证)。
“通过SMB口令发问/应答的SSH服务验证”显示了我们的设置。在Linux SSH服务器上,确保通过运行rpm -q openssh openssh-server指令来安装SSH服务器,指令输出结果应该如下:
openssh-2.9p2-7
openssh-server-2.9p2-7
版本号会有所不同。
只要编辑/etc/ssh/sshd_config文件,就可以配置SSH服务器,不过默认值应该可以接受。SSH协议使用口令或证书密钥用于验证。就这个例子而言,我们想要使用口令,但这也是SSH的默认值。
我们安装并配置了pam_smb,然后编辑/etc/pam.d/sshd,以便内容类似“修改后的SSHD PAM配置”图(这样做只须添加一行,即最上头的auth行)。
修改后的SSHD PAM配置
我们指示PAM系统:如果出现SSH连接,应该首先利用SMB验证来证实SSH用户。如果Windows域接受提供的用户名/口令对,就允许用户访问。如果禁止,就根据系统验证配置进行验证。要是这也失败,就拒绝用户访问。SSH服务器经配置后,使用pam_smb模块作为验证的规则。
最后,我们要为Linux服务器和Windows域添加用户。这种解决方案显然存在一个不足:我们提供的是企业可伸缩验证机制,而不是企业可伸缩帐号管理机制。
我们必须设法确保:对Windows域的每个用户而言,Linux服务器上的是同一用户(见下面的附文“面向Unix的Windows 2000服务”)。我们将利用Windows上的User Manager、在Linux上运行useradd手工添加用户。你要为Windows域中的新用户帐号提供口令,但可能不需要为Linux帐号提供口令,因为该口令无法与Windows域口令保持同步。然而如果有Linux口令,可以作为应付万一Windows域拒绝口令的一种退路。
用户通过SSH连接到Linux服务器后,用户的客户软件就会发送口令到服务器(通过加密隧道)。服务器连接到主域控制器(PDC)或后备域控制器(BDC),并要求名为SMBNegProt请求的验证协商。作为对SSH服务器的响应,PDC会发出SMBNegProt响应,里面包括口令发问。SSH服务器利用从用户处收到的口令,对SMBsesssetupX请求中的口令发问作出响应。
如果用户在SSH连接开始时提供的口令与用户在Windows域中的一模一样,PDC就会发出确认性的SMBsesssetupX响应。SSH服务器收到确认性响应后,许可用户通过SSH继续登录到Linux服务器。口令永远不会以明文格式传输。
方案二:通过Active Directory/Kerberos的POP/IMAP
第二个方案就是配置Linux服务器,以便经由邮局协议(POP)或因特网消息访问协议(IMAP)电子邮件服务连接到Linux服务器的任何用户都可以通过Kerberos安全系统进行验证,从而访问Windows服务器。这使你可以在Windows域中建立Linux服务器从而使用电子邮件,而不需要购买基于Windows的电子邮件解决方案。几种电子邮件客户软件如微软的Outlook Express、网景的Messenger和高通的Eudora都可以进行配置,以便Linux服务器用于管理出站和入站电子邮件。这些客户软件甚至可以通过SSL与Linux服务器通信,确保口令的保密性。这只适用于Windows Active Directory域。"通过Kerberos的POP服务验证"图显示了我们的配置。
通过Kerberos的POP服务验证
注意:通过Active Directory/Kerberos域验证SSH连接,这完全同通过SMB域验证POP和IMAP连接一样简单。其实,其它任何验证机制同样简单(这体现了PAM的最终价值)。你恐怕需要以同样的机制验证Linux服务器提供的所有服务,无论是面向Windows 200以前版本的域的SMB验证,还是面向Windows 2000 Active Directory或面向Kerberos域的Active Directory/Kerberos验证。
为此,我们需要名为pam_krb5的另一个PAM模块。为了确保它安装在Red Hat Linux 7.2系统上,请运行rmp -q pam_krb5命令,应该会得到结果:pam_krb5-1.46-1。
然后我们要配置Linux服务器上的Kerberos,但首先需要一些信息。我们必须知道密钥分配中心(KDC),它含有Windows PDC的名字或IP地址。为了方便,我们把KDC命为pdc.domain.net。要是DNS服务器安全受危及,你会希望使用KDC的IP地址。我们还使用DNS服务器作为Kerberos管理服务器。
我们还要知道区域名。区域相当于Windows Active Directory名的Kerberos,而Active Directory名又往往是DNS域名。Active Directory名并不总是与DNS域名一样,但在PDC启动时赞成使用。为了方便,区域取名为DOMAIN.NET(区域必须大写)。
有了这些信息,可以编辑/etc/krb5.conf文件,该文件里面含有多个分段。每个分段用形式为[section_name]的分段名字符串加以描述。/etc/krb5.conf文件的分段数可能多于这里所列示的。如果这样的话,多余分段不用去管。修改或增添相应分段,以便内容类似“Linux服务器上的/etc/krb5.conf设置”。
Linux服务器上的/etc/krb5.com设置