1. 问题

1. 问题

1. 问题

我有一个目录dir,它具有 (NFS) ACL 默认权限,因此默认情况下,用户1001也可以写入其中创建的每个文件和文件夹。此目录在 NFS v4 上共享。

我如何确保通过 NFS 创建的每个文件和文件夹都继承此权限?

2. 我运行的命令

我在NFS客户端运行了以下命令。

client@nfsclient $ nfs4_getfacl dir

# file: dir
A::OWNER@:rwaDxtTcCy
A::1001:rwaDxtcy
A::GROUP@:rxtcy
A::EVERYONE@:rxtcy
A:fdi:OWNER@:rwaDxtTcCy
A:fdi:1001:rwaDxtcy
A:fdi:GROUP@:rxtcy
A:fdi:EVERYONE@:rxtcy

但是,当我在其中创建一个新文件时,它的权限不允许用户1001写入该文件。

client@nfsclient $ touch dir/file
client@nfsclient $ nfs4_getfacl dir/file

# file: dir/file
A::OWNER@:rwatTcCy
A::1001:rtcy
A::GROUP@:rtcy
A::EVERYONE@:rtcy

在这种情况下,为什么用户没有1001写权限?dir/file

当我在 NFS 服务器上查看相同内容时dir/file,由于 ,权限以某种方式不允许它写入mask

server@nfsserver $ getfacl dir/file
# file: dir/file
# owner: client
# group: client
user::rw-
user:1001:rwx                   #effective:r--
group::r-x                      #effective:r--
mask::r--
other::r--

有没有办法确保文件创建时的掩码是正确的?

3. 它在服务器端工作

当我在服务器端运行完全相同的命令时,将遵循默认权限。

server@nfsserver $ getfacl dir
# file: dir
# owner: client
# group: client
user::rwx
user:1001:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:1001:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

并且它创建了正确的权限。

server@nfsserver $ touch dir/file
server@nfsserver $ getfacl dir/file
# file: dir/file
# owner: server
# group: server
user::rw-
user:1001:rwx                   #effective:rw-
group::r-x                      #effective:r--
mask::rw-
other::r--

我正在使用 NFS v4 和 ext4 文件系统。

答案1

为了实现这一点,您需要在两个系统上使用相同的 UID 和 GID。理想情况下,您应该运行某种域软件来实现这一点(LDAP、NIS、NISplus 等)。

如果你看看这些话题,你会发现还有很多其他的问答帖子https://serverfault.com或者https://unix.stackexchange.com/

如果您没有这样的系统,那么在每个系统上设置相同的 GID 可能更容易。设置组权限。然后将适当的用户放入适当的组中。这样,用户可以更改,但基于组的权限保持不变。这使得 ACL 的管理比到处指定每个用户的权限容易得多。

答案2

不幸的是,我找不到任何好的解决方案。我唯一能做的就是以下内容。

在客户端上将 umask 设置为最多 002。

client@nfsclient $ umask 002

这将在服务器上正确设置掩码,因此它也会正确设置任何默认权限。但是,这将默认为该组创建可写文件。

我也尝试了 sshfs,那里也发生了同样的事情。

也可以看看https://serverfault.com/questions/544194/nfs-v4-acl-inheritance-problems-i-flag-set-but-not-wanted/544771

答案3

嘿,我知道这是一个老威胁,但我想指出的是,使用 nfs 4.2,它可以在我的系统 rhel8 上运行。我可以设置具有权限的默认 acl,umask 不会屏蔽它们。

在服务器上:

vi /etc/exports
/export/c       -root_squash,rw [Client]
/export/d       -root_squash,rw [Client]

getfacl Group1
# file: Group1
# owner: root
# group: nfs
# flags: -st
user::rwx
group::rwx
group:access:r-x
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:group:access:r-x
default:mask::rwx
default:other::---

目录 Group1 存在于目录 c 和 d 上

在客户端:

vi /etc/fstab
[server]:/export/c         /mnt/nfs/c      nfs4    defaults,nfsvers=4.0    0       0
[server]:/export/d         /mnt/nfs/d      nfs4    defaults,nfsvers=4.2    0       0


#User with group nfs
umask 0027

mkdir /mnt/nfs/c/Group1/a
mkdir /mnt/nfs/d/Group1/a

ll -d /mnt/nfs/c/Group1/a
drwxr-s---. 2 Daniel nfs 6 Nov 25 16:02 a

ll -d /mnt/nfs/d/Group1/a
drwxrws---. 2 Daniel nfs 6 Nov 26 09:05 a

如果我错了请纠正我,但我也在 nfsvers=4.1 上测试了它,但它还是不起作用,所以我认为这个问题在 nfsv4.2 中已经修复了

相关内容