访问控制列表 (access control list, ACL) 通过使文件的属主可以为文件属主、组以及其他特定用户和组定义文件权限来提供更好的文件安全性。ACL 是使用 setfacl 命令在服务器和客户机上设置的。请参见 setfacl(1) 手册页。在 NFS 版本 4 中,ID 映射器 nfsmapid 用于将服务器上的 ACL 项中的用户 ID 或组 ID 映射为客户机上的 ACL 项中的用户 ID 或组 ID。反之也能实现。ACL 项中的用户 ID 和组 ID 必须同时存在于客户机和服务器上。
以下情况可能导致 ID 映射失败:
如果服务器上 ACL 项中存在的用户或组不能映射为客户机上的有效用户或组,则不允许用户读取客户机上的 ACL。
例如,在发出 ls -l 命令后,由于一些文件的用户 ID 或组 ID 等 ACL 实体不能从服务器映射到客户机,您将收到错误消息 Permission denied。ID 映射器无法映射 ACL 中的用户或组。如果 ID 映射器能够映射该用户或组,则在通过 ls -l 生成的文件列表中,权限后面会显示一个加号 (+)。例如:
% ls -l -rw-r--rw-+ 1 luis staff 11968 Aug 12 2005 foobar |
类似地,getfacl 命令可以针对相同的原因返回 Permission denied 错误消息。有关此命令的更多信息,请参见 getfacl(1) 手册页。
如果不能将在客户机上设置的任何 ACL 项中的用户 ID 或组 ID 映射为服务器上的有效用户 ID 或组 ID,则 setfacl 命令可能会失败并返回 Permission denied 错误消息。
如果客户机和服务机的 NFSMAPID_DOMAIN 值不匹配,则 ID 映射将失败。有关更多信息,请参见/etc/default/nfs 文件的关键字。
为避免 ID 映射问题,请执行以下操作:
确保在 /etc/default/nfs 文件中正确设置了 NFSMAPID_DOMAIN 的值。
确保 ACL 项中的所有用户和组 ID 同时存在于 NFS 版本 4 客户机和服务器上。
要确定是否有无法在服务器或客户机上映射的用户或组,请使用以下脚本:
#! /usr/sbin/dtrace -Fs sdt:::nfs4-acl-nobody { printf("validate_idmapping: (%s) in the ACL could not be mapped!", stringof(arg0)); } |
此脚本中使用的探测器名称是一个接口,该接口以后可以更改。有关更多信息,请参见《Solaris 动态跟踪指南》中的“稳定性级别”。
请参见以下内容: