RHEL - NFS4:挂载/导出为 rw,用户写入权限被拒绝

RHEL - NFS4:挂载/导出为 rw,用户写入权限被拒绝

我在 RHEL 5.3 服务器 (charlie) 和 RHEL 5.4 客户端 (simcom1) 之间配置了 nfs4。这些机器由名为“alpha”的 Windows Server 2008 活动目录机器配置为通过 kerberos 对用户进行身份验证。Alpha 还充当本地网络的 dns 和 dhcp 机器。

我注意到,当用户首次登录 RHEL 计算机时,系统会向他们分配该计算机的唯一 UID;第一个登录的用户获得 10001。因此,我看到 simcom1 和 charlie 之间的用户具有不同的 UID。当用户在 nfs4 安装中执行“ls -la”命令时,我以为所有者列中的用户名会指示“nobody”或至少是错误的用户名 - 因为每个用户的 UID 在计算机之间是不同的,并且并非所有用户都登录了每台计算机。

但是,simcom1 能够正确解析通过 nfs4 对驻留在 charlie 上的文件执行的“ls -la”中的用户名。最麻烦的是,用户无法跨 nfs 挂载写入文件。

服务器 charlie 将根目录导出为 rw。客户端 simcom1 将导出挂载为 rw。我的配置如下所示。

我的问题是,如何配置 RHEL 机器以允许用户通过已以读/写方式安装的 nfs4 写入文件?

[root@charlie ~]# more /etc/exports
/ 10.100.0.0/16(rw,no_root_squash,fsid=0)

[root@charlie ~]#cat /etc/sysconfig/nfs
#
# Define which protocol versions mountd
# will advertise. The values are "no" or "yes"
# with yes being the default
#MOUNTD_NFS_V1="no"
#MOUNTD_NFS_V2="no"
#MOUNTD_NFS_V3="no"
#
#
# Path to remote quota server. See rquotad(8)
#RQUOTAD="/usr/sbin/rpc.rquotad"
# Port rquotad should listen on.
#RQUOTAD_PORT=875
# Optinal options passed to rquotad
#RPCRQUOTADOPTS=""
#
#
# TCP port rpc.lockd should listen on.
#LOCKD_TCPPORT=32803
# UDP port rpc.lockd should listen on.
#LOCKD_UDPPORT=32769
#
#
# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)
# Turn off v2 and v3 protocol support
#RPCNFSDARGS="-N 2 -N 3"
# Turn off v4 protocol support
#RPCNFSDARGS="-N 4"
# Number of nfs server processes to be started.
# The default is 8.
RPCNFSDCOUNT=8
# Stop the nfsd module from being pre-loaded
#NFSD_MODULE="noload"
#
#
# Optional arguments passed to rpc.mountd. See rpc.mountd(8)
#STATDARG=""
#RPCMOUNTDOPTS=""
# Port rpc.mountd should listen on.
#MOUNTD_PORT=892
#
#
# Optional arguments passed to rpc.statd. See rpc.statd(8)
#RPCIDMAPDARGS=""
#
# Set to turn on Secure NFS mounts.
SECURE_NFS="no"
# Optional arguments passed to rpc.gssd. See rpc.gssd(8)
#RPCGSSDARGS="-vvv"
# Optional arguments passed to rpc.svcgssd. See rpc.svcgssd(8)
#RPCSVCGSSDARGS="-vvv"
# Don't load security modules in to the kernel
#SECURE_NFS_MODS="noload"
#
# Don't load sunrpc module.
#RPCMTAB="noload"
#

[root@simcom1 ~]# cat /etc/fstab
--start snip--
charlie:/home /usr/local/dev/charlie nfs4 rw,nosuid, 0 0
--end snip--

[brendanmac@simcom1 /usr/local/dev/charlie/brendanmac]# touch file
touch: cannot touch 'file': Permission denied

[brendanmac@simcom1 /usr/local/dev/charlie/brendanmac]# su
Password:
[root@simcom1 /usr/local/dev/charlie/brendanmac]# touch file
[root@simcom1 /usr/local/dev/charlie/brendanmac]# ls -la file
-rw------- 1 root root 0 May 26 10:43 file

答案1

我遇到了完全相同的问题,并发现了问题所在:问题在于 nfsv4 使用 idmapd,而 idmapd 在 userid => names 之间进行映射,但反过来不行。换句话说,它无法工作。看到正确的权限用户和组只是花哨和令人困惑,但是当您使用文件系统时,它仍将使用通过 uid 进行映射的旧方法。因此,服务器端的 uid 应该与该用户的客户端相同。否则,创建文件...将因权限被拒绝而失败。当然,除非 uid 匹配。

参考: http://thread.gmane.org/gmane.linux.nfsv4/7103/focus=7105

相关内容