我在 Oracle Linux Server 7.8 上运行 Weblogic 安装。 weblogic 中的应用程序会将一些文件作为输出写入本地目录。该应用程序使用 Oracle Weblogic FileAdapter。
使用 setgid 设置目录:
[wesley@wesley from]$ ls -la
total 52
drwxrwsrwx 2 wesley group1 45056 Sep 14 16:15 .
drwxrwxrwx 3 wesley group1 4096 Sep 11 14:45 ..
当应用程序写入目录时,您会遇到以下情况:
[wesley@wesley from]$ ls -la
total 816
drwxrwsrwx 2 wesley group1 45056 Sep 14 16:15 .
drwxrwxrwx 3 wesley group1 4096 Sep 11 14:45 ..
-rw-rw-r-- 1 oracle oinstall 57 Sep 14 15:05 20200914150523990.txt
因此 setgid 被忽略,文件获取写入文件的进程的用户组,而不是目录的组。
只需触摸那里的文件即可按预期工作,新文件将获得正确的组:
[wesley@wesley from]$ sudo su oracle
[oracle@wesley from]$ touch abc
[oracle@wesley from]$ ll
total 0
-rw-rw-r-- 1 oracle group1 0 Sep 15 11:15 abc
应用程序是否有可能忽略 setgid 或者我配置了错误?还有什么办法可以强行组队吗?
我的下一个想法是通过检查正在写入的目录组并以编程方式将文件 chown 到正确的组来创建一个“脏”解决方法。
更新:
输出文件夹位于 NFS 安装上。大概就是这个原因。如果我将输出更改为例如 /tmp/output,该文件确实会获得正确的组:
drwxrwsrwx 2 wesley group1 4096 Sep 15 11:40 .
drwxrwxrwx. 245 root root 16384 Sep 15 11:45 ..
-rw-rw---- 1 oracle group1 824958 Sep 15 11:40 20200914150523990.txt
如果我们在安装配置或其他地方找到解决方案,我会更新。
更新2:
看来不是 NFS 问题。第一个失败的目录位于 /vip/uri/from 中,该目录链接到 NFS 上的目录。我现在在 /vip/aaa/bbb 下创建了一个目录,该目录仅在本地而不是在 NFS 上,它也有同样的问题。在其中创建的文件不会获取目录的组,而是获取写入文件的进程的用户的组。
工作目录和非工作目录的统计信息:
File: ‘/tmp/output’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fc00h/64512d Inode: 67747909 Links: 2
Access: (2777/drwxrwsrwx) Uid: (54322/wesley) Gid: (54323/group1)
Access: 2020-09-15 17:39:59.014193471 +0200
Modify: 2020-09-15 17:39:55.226794047 +0200
Change: 2020-09-15 17:39:55.226794047 +0200
Birth: -
File: ‘/vip/aaa/bbb/’
Size: 4096 Blocks: 8 IO Block: 32768 directory
Device: 2fh/47d Inode: 25954 Links: 2
Access: (2777/drwxrwsrwx) Uid: (54322/wesley) Gid: (54323/group1)
Access: 2020-09-15 17:31:19.613972000 +0200
Modify: 2020-09-15 17:30:31.016081000 +0200
Change: 2020-09-15 17:30:31.016081000 +0200
Birth: -