尽管有更严格的 umask,为什么我的主目录中的文件被创建为世界可写的?

rsu*_*rez 11 umask centos

我意识到新文件和目录的权限表现得有点奇怪。首先,umask 似乎返回了正确的答案:

$ umask
0002
Run Code Online (Sandbox Code Playgroud)

这意味着对我的用户和我的组具有完全访问权限,对世界其他地方没有写访问权限,没有 suid。但是如果我在 $HOME 中创建一个文件,它看起来是这样的:

$ ls -l testfile 
-rw-rw-rw- 1 robe robe 0 mar 16 12:58 testfile
Run Code Online (Sandbox Code Playgroud)

即,给每个人写访问权限。目录也会发生同样的情况:

$ ls -ld testdir
drwxrwxrwx 2 robe robe 6 mar 16 13:00 testdir
Run Code Online (Sandbox Code Playgroud)

我认为这与使用 umask 0000 而不是 0002 相同。我在所有 /etc 中搜索了一些更改默认 0002 或 0022 的 umask 实例,但没有找到。这是默认的 CentOS 5.5 安装。为什么会发生这种情况的任何提示?

rsu*_*rez 4

我不知道回答我自己的问题是否合适。如果情况并非如此,请编辑们就此提出建议。提前致谢。

我想我已经解决了这个谜团:问题是 XFS 卷上缺少默认 ACL。以下是受影响的目录之一 /srv/backups 的 ACL 条目:

# file: srv/backups
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
Run Code Online (Sandbox Code Playgroud)

每当我执行“mkdir test”或“touch testfile”时,它都会给出权限 777。所以我这样做了:

setfacl -m d:u::rwx /srv/backups
Run Code Online (Sandbox Code Playgroud)

像这样保留 ACL:

# file: srv/backups
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x
Run Code Online (Sandbox Code Playgroud)

以前(据说)没有 ACL,但现在有了。当我执行“ls -l”时,我可以看到权限附加了“+”号。神奇的是,现在“mkdir test”和“touch testfile”可以使用预期的权限:

# ls -l testfile 
-rw-r--r-- 1 root root 0 Dec 20 10:00 testfile
# ls -ld testdir
drwxr-xr-x+ 2 root root 6 Dec 20 10:00 testdir
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生这种情况。我想 XFS 不喜欢没有默认的 ACL,并且当它发生时表现得很奇怪。另外,我只在 CentOS 中看到过这种情况,在 Debian/Ubuntu 中没有。也许它与内核中的XFS版本有关,或者类似的东西。不知道。

不管怎样,这对我来说已经解决了。非常感谢所有的建议:-)