在本文中,我将讨论如何配置基于网络文件系统的UNIX客户端,通过RPCSEC_GSS协议使用Kerberos安全验证来实现网络文件系统下连接Windows服务器。
传统的网络文件系统客户端和服务器使用系统集成认证安全验证。它最重要的是允许客户端向网络文件系统服务器发送表明UNIX用户的用户ID或用户组ID的验证信息。每个网络文件系统请求都在传入请求中标明UNIX用户的用户ID或用户组ID。这种验证方式提供的安全性比较低,因为客户端可以通过标明一个不同用户的用户ID或用户组ID来欺骗请求。这种验证方式也是很脆弱的,因为间于客户端网络和服务器网络之间的任何第三方都可能抓取网络文件系统请求。
RPCSEC_GSS协议提供了一种通用的机制利用ONCRPC协议复合使用多种安全机制。现在的网络文件系统服务器支持在网络文件系统中利用RPCSEC_GSS协议使用两种Kerberos模式:krb5和krb5i。krb5在RPC请求级别上提供Kerberos验证,而krb5i(Kerbero v5同时含有集成认证)则可以防止网络文件系统负载被窃取。
要解释如何在UNIX客户端和运行网络文件系统的Windows服务器上设置Kerberos安全验证,最好的方式就是通过一个简单的例子来实现。在这次的教程中,我们先要明确以下的架构:
1、 名叫NFSDOMAIN.COM的windows域和活动目录运行在一台名为nfsdomain-dc.nfsdomain.com的域控制器上;
2、 运行网络文件系统服务器的Windows服务器:windowsnfsserver.nfsdomain.com;
3、 UNIX客户端:unixclient.nfsdomain.com;
4、 unixclient.nfsdomain.com上的UNIX用户:unixuser1,用户ID为500;
5、 unixclient.nfsdomain.com上的UNIX用户组:unixgroup1,用户组ID为500;
6、 Windows用户:NFSDOMAIN/unixuser1;
7、 Windows用户组:NFSDOMAIN/unixgroup1。
为了确保演示配置向导,我们假设unixclient.nfsdomain.com运行的系统是OpenSolaris。
前提:
首先,我们需要确认域控制器、Windows网络文件系统服务器和UNIX客户端间DNS解析正常。
对Solaris客户端的一个提醒是主机名必须设置成域全名的第一部分。在unixclient.nfsdomain.com上运行“hostname”,应该仅显示“unixclient”。如果显示的不是这样,那需要设置主机名为“unixclient”。
确认所有上面提到的用户和用户组已经创建完毕,同时NFSDOMAIN/unixuser1必须是NFSDOMAIN/unixgroup1的成员。我们必须为unixuser1设置一个密码。如果在UNIX客户端上的用户ID和用户组ID不同,就需要我们指定相应的项为对应的值,例如我们此次举例的500。
将UNIX客户端加入活动目录:
现在我们要配置unix客户端能从NFSDOMAIN.COM域上获取Kerberos验证凭证。这可以通过修改/etc/krb5/krb5.conf文件来实现。在该文件中,会有一些预留的键值可供编辑。我们需要修改以下部分:“默认域名default_realm”、“域控制器名称kdc”、“管理服务器名称admin_server”和“网络文件系统域名domain_realm”。我们也需要在"libdefaults"下添加两项值“default_tkt_enctypes”和“default_tgs_encrypes”。我在后面会解释为什么需要添加这两项。最后这个文件会修改成下面样子: