分类:
2009-05-23 23:45:20
2009 年 5 月 13 日
学习如何通过 Kerberos 跨领域设置为 AIX® Network File System (NFS) version 4 设置和配置 Enterprise Identity Mapping (EIM)。
Network File System (NFS) 是使用最广泛的分布式文件系统之一。它让用户能够在客户机上方便地访问远程文件,就像这些文件在本地机器上一样。这种分布式环境通常由多个 NFS 域组成。NFS 客户机所属的域常常可能与 NFS 服务器域不同。在这种情况下,需要为本地 NFS 服务器和客户机提供一种把外部域中的用户和组转换为本地域中的对应用户和组的方法。这种方法称为身份映射,由 nfsrgyd NFS 守护进程处理。
当前的 AIX NFSv4 实现使用 Kerberos 增强安全性。在实际环境中,可能用不同的 Kerberos 领域(管理域)配置 NFS 域。因此在这种情况下,需要在 Kerberos 领域之间配置跨领域设置。关于 NFSv4 中的跨领域设置的更多信息,请参见 Securing NFS in AIX An Introduction to NFS V4 in AIX 5L Version 5.3 Redbook(见 参考资料)。
本文讨论通过 Kerberos 跨领域设置为 AIX NFS version 4 配置 Enterprise Identity Mapping (EIM) 的步骤。IBM NAS (Network Authentication Service) 是 IBM 在 AIX 上提供的 Kerberos 版本。本文讨论如何设置使用 Kerberos 身份验证的 NFSv4 服务器,在 Kerberos 领域之间配置跨领域设置,然后为 NFSv4 配置 EIM,从而实现外部身份映射。
AIX 使用 EIM 提供外部身份映射。EIM 是一种基于 LDAP 的技术,用来管理组织中的多个用户注册表。对于 NFSv4 中的身份映射,使用 EIM 存储外部 NFS 域的用户名和组名,以及它们到本地用户名和组名的映射。
请考虑一个场景:NFS 客户机在 NFS 域 us.ibm.com 中,NFS 服务器在 in.ibm.com 域中。
NFS 客户机上的 group2 组中有一个 UNIX® 用户 user2。当这个用户访问 NFS 挂装的目录中的文件时,传递的 user2 的所有者信息是 user2@us.ibm.com 和 group2@us.ibm.com。
现在,NFS 服务器发现这个请求来自外部域,因此向 EIM 服务器查询外部身份映射信息。为了正确地解析这个请求,EIM 管理员必须在 EIM 服务器上存储下面的外部身份映射信息。
用户 | 域 |
---|---|
user2 | us.ibm.com |
user1 | in.ibm.com |
这里的 user1 和 user2 是同一用户 (nfs_user) 在不同 NFS 域中的两个身份。
组 | 域 |
---|---|
group2 | us.ibm.com |
group1 | in.ibm.com |
这里的 group1 和 group2 是同一个组 (nfs_group) 在不同 NFS 域中的两个身份。
NFS 服务器知道 us.ibm.com 域中的 user2 就是 in.ibm.com 域中的 user1,us.ibm.com 域中的 group2 就是 in.ibm.com 域中的 group1。因此,NFS 服务器会以 user1:group1 的身份访问文件;但是,在 NFS 客户机上,看到的文件所有者信息是 user2:group2。
当 NFSv4 使用 AUTH_KERB (Kerberos) 安全风格时,从客户机传递给服务器的所有者信息是 principal@kerberos_realm,然后 NFS 服务器把它转换为本机凭证 (uid: gid)。在这种情况下,为了成功地实现身份映射,EIM 管理员还必须在 EIM 服务器上存储 Kerberos 领域到 NFS 域的映射信息。
下面的示例说明这种设置以及实现本文目标的方法。
AIX NAS 1.4 (KDC) and AIX NFS V4 server and EIM Client: Hostname : vayu08.in.ibm.com NFS domain name : in.ibm.com Realm name : REALM_1 Operating system : AIX 6.1.0.0 IBM NAS admin principal : admin/admin NFS V4 Server principal : nfs/vayu08.in.ibm.com IBM NAS user principal : user1 Unix users : user1:group1 AIX NAS 1.4 (KDC) and EIM server: Hostname : vayu07.in.ibm.com NFS domain name : us.ibm.com Realm Name : REALM_2 Operating system : AIX 6.1.0.0 IBM NAS admin principal : admin/admin IBM NAS user principal : user2 IBM Tivoli Directory Server Version 5.2 AIX NAS 1.4 client and AIX NFS V4 client: Hostname : nfsaix08.in.ibm.com NFS domain name : us.ibm.com Realm name : REALM_2 Operating system : AIX 6.1.0.0 Unix users : user2:group2 Configured to REALM_1 and REALM_2 realms. |
|
为了便于解释,我们把配置过程划分为四个步骤:
关于配置 IBM NAS 的更多信息,请参见 AIX Version 6.1 Expansion Pack CD 上的 IBM NAS Version 1.4 Administration Guide。
# hostname vayu08.in.ibm.com # export PATH=/usr/krb5/bin/:/usr/krb5/sbin/:$PATH # config.krb5 -S -r REALM_1 -d in.ibm.com Initializing configuration... Creating /etc/krb5/krb5_cfg_type... Creating /etc/krb5/krb5.conf... Creating /var/krb5/krb5kdc/kdc.conf... Creating database files... Initializing database '/var/krb5/krb5kdc/principal' for realm 'REALM_1' master key name 'K/M@REALM_1' You are prompted for the database Master Password. It is important that you DO NOT FORGET this password. Enter database Master Password: Re-enter database Master Password to verify: WARNING: no policy specified for admin/admin@REALM_1; defaulting to no policy. Note that policy may be overridden by ACL restrictions. Enter password for principal "admin/admin@REALM_1": Re-enter password for principal "admin/admin@REALM_1": Principal "admin/admin@REALM_1" created. Creating keytable... Creating /var/krb5/krb5kdc/kadm5.acl... Starting krb5kdc... krb5kdc was started successfully. Starting kadmind... kadmind was started successfully. The command completed successfully. # |
还可以使用 mkkrb5srv 命令配置 NAS 服务器。mkkrb5srv 命令的完整用法请参见它的主页。
# hostname vayu08.in.ibm.com # chnfsdom in.ibm.com # chnfsdom Current local domain: in.ibm.com # kadmin.local kadmin.local: ank nfs/vayu08.in.ibm.com WARNING: no policy specified for nfs/vayu08.in.ibm.com@REALM_1; defaulting to no policy. Note that policy may be overridden by ACL restrictions. Enter password for principal "nfs/vayu08.in.ibm.com@REALM_1": Re-enter password for principal "nfs/vayu08.in.ibm.com@REALM_1": Principal "nfs/vayu08.in.ibm.com@REALM_1" created. kadmin.local: ktadd nfs/vayu08.in.ibm.com Entry for principal nfs/vayu08.in.ibm.com with kvno 2, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal nfs/vayu08.in.ibm.com with kvno 2, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal nfs/vayu08.in.ibm.com with kvno 2, encryption type AES-256 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal nfs/vayu08.in.ibm.com with kvno 2, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin.local: # nfshostkey -p nfs/vayu08.in.ibm.com -f /etc/krb5/krb5.keytab # nfshostkey -l nfs/vayu08.in.ibm.com /etc/krb5/krb5.keytab # exportfs -i -o vers=4,sec=krb5 /home/guest # exportfs /home/guest -vers=4,sec=krb5 # chnfs -s 0513-044 The gssd Subsystem was requested to stop. # chnfs -S 0513-059 The gssd Subsystem has been started. Subsystem PID is 286862. |
关于为 AIX NFSv4 配置 Kerberos 的更多信息,请参见 Securing NFS in AIX. An Introduction to NFS V4 in AIX 5L Version 5.3 Redbook(见 参考资料)。
# mkgroup group1 # useradd -g group1 user1 #kadmin.local: ank user1 WARNING: no policy specified for user1@REALM_1; defaulting to no policy. Note that policy may be overridden by ACL restrictions. Enter password for principal "user1@REALM_1": Re-enter password for principal "user1@REALM_1": Principal "user1@REALM_1" created. |
bash-2.05b# hostname vayu07.in.ibm.com bash-2.05b# config.krb5 -S -r REALM_2 -d us.ibm.com Initializing configuration... Creating /etc/krb5/krb5_cfg_type... Creating /etc/krb5/krb5.conf... Creating /var/krb5/krb5kdc/kdc.conf... Creating database files... Initializing database '/var/krb5/krb5kdc/principal' for realm 'REALM_2' master key name 'K/M@REALM_2' You are prompted for the database Master Password. It is important that you DO NOT FORGET this password. Enter database Master Password: Re-enter database Master Password to verify: WARNING: no policy specified for admin/admin@REALM_2; defaulting to no policy. Note that policy may be overridden by ACL restrictions. Enter password for principal "admin/admin@REALM_2": Re-enter password for principal "admin/admin@REALM_2": Principal "admin/admin@REALM_2" created. Creating keytable... Creating /var/krb5/krb5kdc/kadm5.acl... Starting krb5kdc... krb5kdc was started successfully. Starting kadmind... kadmind was started successfully. The command completed successfully. |
现在,为另一个用户 (user2) 创建一个 Kerberos 主体。
bash-2.05b# hostname vayu07.in.ibm.com # kadmin.local kadmin.local: ank user2 WARNING: no policy specified for user2@REALM_2; defaulting to no policy. Note that policy may be overridden by ACL restrictions. Enter password for principal "user2@REALM_2": Re-enter password for principal "user2@REALM_2": Principal "user2@REALM_2" created. |
# kadmin.local kadmin.local: ank krbtgt/REALM_2@REALM_1 WARNING: no policy specified for krbtgt/REALM_2@REALM_1; defaulting to no policy. Note that policy may be overridden by ACL restrictions. Enter password for principal "krbtgt/REALM_2@REALM_1": Re-enter password for principal "krbtgt/REALM_2@REALM_1": Principal "krbtgt/REALM_2@REALM_1" created. kadmin.local: kadmin.local: ank krbtgt/REALM_1@REALM_2 WARNING: no policy specified for krbtgt/REALM_1@REALM_2; defaulting to no policy. Note that policy may be overridden by ACL restrictions. Enter password for principal "krbtgt/REALM_1@REALM_2": Re-enter password for principal "krbtgt/REALM_1@REALM_2": Principal "krbtgt/REALM_1@REALM_2" created. |
[libdefaults] default_realm = REALM_1 default_keytab_name = FILE:/etc/krb5/krb5.keytab default_tkt_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5 des-cbc-crc default_tgs_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5 des-cbc-crc [realms] REALM_1 = { kdc = vayu08.in.ibm.com:88 admin_server = vayu08.in.ibm.com:749 default_domain = in.ibm.com } REALM_2 = { kdc = vayu07.in.ibm.com:88 admin_server = vayu07.in.ibm.com:749 default_domain = us.ibm.com } [domain_realm] .in.ibm.com = REALM_1 vayu08.in.ibm.com = REALM_1 .us.ibm.com = REALM_2 vayu07.in.ibm.com = REALM_2 [logging] kdc = FILE:/var/krb5/log/krb5kdc.log admin_server = FILE:/var/krb5/log/kadmin.log default = FILE:/var/krb5/log/krb5lib.log |
# stop.krb5 # start.krb5 |
# hostname nfsaix08.in.ibm.com #config.krb5 -C -r REALM_2 -d us.ibm.com -c vayu07.in.ibm.com -s vayu07.in.ibm.com |
# mkgroup group2 # useradd -g group2 user2 |
# hostname nfsaix08.in.ibm.com # chnfsdom us.ibm.com # kinit user2 Password for user2@REALM_2: # mount -o vers=4,sec=krb5 vayu08:/home/guest /mnt # cd /mnt/ # touch data.txt # ls -l total 0 -rw-r--r-- 1 nobody nobody 0 Nov 19 17:37 data.txt |
可以看到,对于在 NFS 挂装的目录中创建的文件,ls -l 输出显示的用户名和组名是 nobody:nobody。注意,NFS 服务器和客户机的 NFS 域不一样。
如果这个命令中的 -h [host_name] 是本地主机,那么会在这台主机上自动地配置 LDAP 服务器。关于安装和配置 LDAP 的更多信息,请参见 IBM Tivoli® Directory Server Version 5.2 文档。
# hostname vayu07.in.ibm.com bash-2.05b# chnfsim -c -a -t P -h vayu07.in.ibm.com -e nfs -f nfseim -w secret ldapdb2's New password: Enter the new password again: You have chosen the following actions: Administrator DN 'cn=admin' and password will be set. Setting administrator DN 'cn=admin' and password. Set administrator DN 'cn=admin' and password. IBM Tivoli Directory Server Configuration complete. You have chosen the following actions: Database 'ldapdb2' will be configured in instance 'ldapdb2'. : : IBM Tivoli Directory Server Configuration complete. You have chosen the following actions: Suffix 'cn=aixdata' will be added to the configuration file. Adding suffix: 'cn=aixdata'. Added suffix: 'cn=aixdata'. IBM Tivoli Directory Server Configuration complete. Server starting in configuration only mode. : : Server starting. : : Non-SSL port initialized to 389. adding new entry cn=nfseim adding new entry cn=nfs_map_reader,cn=nfseim |
在 EIM 服务器中添加清单 14 所示的领域-域映射。
# chnfsim -a -r REALM_1 -d in.ibm.com # chnfsim -a -r REALM_2 -d us.ibm.com |
在 EIM 服务器中添加用户和组身份映射信息。还需要在 EIM 服务器中添加 /usr/sbin/nfsrgyd 守护进程的所有者,即 root:system。
#chnfsim -a -u -i "nfs_user" -n user1 -d in.ibm.com #chnfsim -a -u -i "nfs_user" -n user2 -d us.ibm.com #chnfsim -a -g -i "nfs_group" -n group1 -d in.ibm.com #chnfsim -a -g -i "nfs_group" -n group2 -d us.ibm.com #chnfsim -a -u -i root -n root -d in.ibm.com #chnfsim -a -u -i root -n root -d us.ibm.com #chnfsim -a -g -i system -n system -d in.ibm.com #chnfsim -a -g -i system -n system -d us.ibm.com |
#hostname vayu08.in.ibm.com # chnfsim -c EIM server type: P EIM server: vayu07.in.ibm.com EIM domain: nfs EIM directory suffix: nfseim #chnfsim -c -a -t P -h vayu07.in.ibm.com -e nfs -f nfseim -w secret # chnfsim -l -u -i nfs_user Identity mappings for nfs_user: Name Domain user1 in.ibm.com user2 us.ibm.com # chnfsim -l -g -i nfs_group Identity mappings for nfs_group: Name Domain group1 in.ibm.com group2 us.ibm.com # chnfsim -l Realm to Domain mappings: realm_1 in.ibm.com realm_2 us.ibm.com |
在 AIX V53L 和 AIX V610 及更高版本上,可以为 NFS 服务器配置多个 EIM LDAP 副本服务器。因此,如果 EIM 服务器之一停机了,NFSv4 服务器可以从另一台可用的 EIM 服务器获取所需的映射信息。
# chnfs -v # chnfs -V |
#hostname vayu08.in.ibm.com #kdestroy #nfsauthreset # kinit user2 Password for user2@REALM_2: # mount -o vers=4,sec=krb5 vayu08:/home/guest /mnt # cd /mnt # touch abc.txt # ls -l total 0 -rw-r--r-- 1 user2 group2 0 Nov 19 18:03 abc.txt |
在服务器上检查这个文件的用户和组信息。
#hostname vayu08.in.ibm.com # cd /home/guest/ # ls -l total 0 -rw-r--r-- 1 user1 group1 0 Nov 19 18:03 abc.txt |
可以看到,在 EIM 服务器上配置和添加外部身份信息之后,NFSv4 服务器和客户机就能够显示正确的文件所有者信息。
|
在本文中,讨论了如何通过跨领域 Kerberos (IBM NAS) 设置为 AIX Network File System (NFS) version 4 设置和配置 Enterprise Identity Mapping (EIM),让 NFS 服务器/客户机可以看到正确的文件所有者信息。