我有一个 NFS4 文件系统,它具有基于 AD 的身份验证设置和与之匹配的 ACLS。我正在控制对挂载文件系统的计算机的访问,因此 ACL 非常基础。一个 ACL 阻止用户在父级重命名或删除文件夹。第二个 ACL 为“所有人”和“域用户”提供对“子文件夹和文件”的完全访问权限
我遇到的问题是,在其中一个子文件夹中有一个“*.pax.gz”文件。如果我登录到 Linux 客户端并 cd 到该文件夹,我就可以看到该文件和正确的权限。如果我运行 gunzip“filename”,它会创建一个 *.pax 文件,但“所有人”和“域用户”权限都消失了,我成为了该文件的所有者。
是否可以设置 ACL 或任何内容,使最终结果是 *.pax 文件保留与 *.pax.gz 文件相同的权限?
答案1
您需要使用以下命令将 ACE 添加到父目录中'F'和‘d’标志强制新创建的文件和目录继承该 ACE。
来自 nfs4_acl 手册页:
INHERITANCE FLAGS - can be used in any directory ACE d directory-inherit - newly-created subdirectories will inherit the ACE. f file-inherit - newly-created files will inherit the ACE, minus its inheritance flags. Newly-created subdirectories will inherit the ACE; if directory-inherit is not also specified in the parent ACE, inherit-only will be added to the inherited ACE. n no-propagate-inherit - newly-created subdirectories will inherit the ACE, minus its inheritance flags. i inherit-only - the ACE is not considered in permissions checks, but it is heritable; however, the inherit-only flag is stripped from inherited ACEs.
答案2
这应该可以解决问题:
sudo -u <current file owner> -g "Domain Users" gunzip *.pax.gz
您需要这样做的原因是,当您使用 gunzip 压缩某些内容时,程序会将 gz 加载到内存中并对其进行解压缩,将解压缩的版本作为新文件1写入磁盘并取消链接(删除)旧版本。
[1]:当你创建一个新文件时,你所处的用户上下文就是所有者,并且他们的主要组是该文件的组,-g 会导致 sudo 更改该会话的主要组。
允许非 root 用户执行此操作:
创建一个您希望能够使用 gunzip 的用户系统组,在此示例中我们将其称为“gunzip”。
visudo
添加行:
%gunzip ALL=(ALL) NOPASSWD:NOEXEC: gunzip
保存并退出
答案3
为了正确地存储和恢复元数据信息作为 ACL 等,你应该使用tar -pzcf
andtar -pzxf
而不是普通的gz
orgunzip