我认为答案是“这就是它的工作方式,”但我想我会问,以防我做错了什么。
我的帐户默认的umask是0077。我是wheel的一员。
我有一个包含这个ACL的目录:
# file: .
# owner: root
# group: wheel
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:wheel:rwx
default:mask::rwx
default:other::r-x我创建一个文件,并根据上面的ACL正确地设置权限。
$ touch z
$ ls -al
drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 .
drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 ..
-rw-rw-r--+ 1 ehymowitz wheel 0 Aug 7 12:36 z现在我决定这是一个可执行文件,所以我更改了权限。这一次,它执行而不是遵循ACL,它遵循umask。
$ chmod +x z
$ ls -al
drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 .
drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 ..
-rwxrw-r--+ 1 ehymowitz wheel 0 Aug 7 12:36 z我需要指定a+x来实现这个功能。
$ chmod a+x z
$ ls -al
drwxrwsr-x+ 2 root wheel 4,096 Aug 7 12:36 .
drwxr-xr-x. 7 root root 4,096 Aug 6 17:31 ..
-rwxrwxr-x+ 1 ehymowitz wheel 0 Aug 7 12:36 z我想我只是不明白为什么touch会根据ACL创建一个文件,但是chmod会忽略ACL来调整权限。
发布于 2018-08-07 13:13:48
您正在见证Unix/Linux权限的更微妙之一。当您从要创建文件的父目录调用touch命令时,将获取ACL。ACL合并了传统的权限(模式)+ACL。
当您使用chmod时,您只是在操作您所操作的文件或目录的模式位。请记住,这些都是谨慎不同的,因此在操作它们时必须付出一定的小心。
如果使用strace,您可以看到chmod是如何工作的。首先,让我们创建一个文件,file_077:
$ rm afile_077*; umask 077; strace -s 2000 touch afile_077 > afile_077.tr 2>&1见结果:
$ ll afile_077
-rw------- 1 user1 user1 0 Aug 7 09:32 afile_077将文件的权限更改为a+x:
$ strace -s 2000 chmod a+x afile_077 > afile_077_chmod.tr 2>&1查看生成的日志:
$ cat afile_077_chmod.tr
...
umask(0) = 02
stat("afile_077", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
fchmodat(AT_FDCWD, "afile_077", 0711) = 0
...这里我们可以看到,chmod正在询问umask,然后相应地设置模式位。从不看ACL。注意:请记住,chmod的这种询问并不是说它将在其操作中包含umask的输出。
发布于 2018-08-07 12:53:47
chmod的显着特征
man chmod
字母ugoa控制哪些用户访问文件的权限将被更改:拥有该文件(u)的用户、文件组(g)中的其他用户、不属于文件组(o)的其他用户或所有用户(a)。如果所有这些都没有给出,效果就好像(a)被给出了,但是在umask中设置的位不受影响。
如果你想检查一些关于ACL的相关想法,我找到了一个信息丰富的答案。它允许您查看设置文件权限的系统调用的确切细节。(谢谢slm!)
然而,对于如何使用这些细节,这不一定是一个很好的介绍。当您开始使用默认ACL(或传统的set-GID)时,nix权限非常奇怪。目前,对于最一致的行为,您想要的umask有一个限制是不支持使用系统的多用户工作站操作系统的(而且udisk用错误的权限位安装FAT文件系统)。
默认ACL可用于Windows工作站的Unix文件服务器上。我认为在某些情况下,这可能涉及使用hacky配置来有效地覆盖umask。当然,Linux可以访问Samba,然后您就可以从这个覆盖攻击^Wfeature中获益。通过使用FUSE文件系统"bindfs“,可以在Linux中配置相同的黑客。
(也就是说,相同挂载文件系统上的文件夹之间的Linux mv从来不尊重不同的默认ACL。nautilus (GNOME文件)也不会在移动时实现默认ACL。Windows资源管理器)。
https://unix.stackexchange.com/questions/461060
复制相似问题