我在 Linux 服务器上创建了一个 nfs 挂载,并且有一个在运行时动态创建目录和文件的进程。正如预期的那样,目录owner:group
具有nobody:nogroup
。
问题是默认的 umask 产生了如下权限:
drwxr-x--- 2 nobody nogroup 4096 Sep 6 20:17 /shares/dra/rman/ORCL/mtd_inputs_2024-08-27/scott/datafile
该目录由另一台 Linux 服务器上的客户端通过 Oracle RMAN 作业创建。它稍后会调用 Oracle DDL 命令来创建 Oracle Directory 对象,从而允许 Oracle 访问该 Linux 目录。
当 RMAN 尝试访问该层次结构中的目录时,我收到错误。在 Google 上搜索时,这些错误在 Oracle 支持中有一些结果,包括此注释。 该注释让我想到,也许 Oracle Directory 对象无法访问目录,因为没有“全局”访问权限。
目录是在 RMAN 作业期间动态创建的,因此我无法提前更改权限。
这个任务是一个长期运行的任务,在接近尾声时,它会创建一个新目录,并且显然有一个子进程试图访问它,我很确定这是由于目录权限造成的。
有没有办法更改默认的 umask 以产生适用777
于nobody
用户 ID 的目录权限?我无法在客户端用户 ID 上更改它。
/etc/password 中的 nobody 条目显示不存在的主目录和 /usr/sbin/nologin shell:
Prompt> grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
版本:
Prompt> uname -a
Linux project01 4.19.0-26-amd64 #1 SMP Debian 4.19.304-1 (2024-01-09) x86_64 GNU/Linux
Prompt> cat /etc/debian_version
10.13
客户端正在运行 Oracle Linux Server 版本 7.9。
更新:我在 /etc/exports 中对相关服务器的输入如下所示:
Prompt> grep /shares/dra /etc/exports
/shares/dra exampledev01(rw,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534)
由于您必须
all_squash
通过nobody:nogroup
NFS 生效,并且无法在客户端更改 umask,我认为唯一剩下的选择是在创建动态目录的目录上设置默认 ACL 。所需的命令如下:
您需要在 NFS 服务器上运行此命令。如果成功,目录中的任何新常规文件都将获得权限
-rw-rw-rw-+
和目录drwxrwxrwx+
。+
符号表示 ACL 有效;它将在 NFS 服务器上可见,但可能在 NFS 客户端上看不到。