我有一个设置了以下权限的目录:
drwxr-s---. user group folder
在桌面上,我访问此文件夹并右键单击以创建一个新文件 call foo.txt
。然后使用终端,我使用命令创建了另一个文件$ touch bar.txt
。
当我检查这些文件的权限时,我有:
-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt
我正期待着-rw-r-----. user group
。组的额外写权限和其他人的读权限是怎么来的?
答案1
设置引导
这里有两种力量在起作用。第一个是在文件夹 上启用的 setgid 位folder
。
drwxr-s---. user group folder
这是s
该行开头的字符包中的 。它们是这样分组的:
d - directory
rwx - read/write/execute bits for user
r-s - read/execute/setuid bits for group
--- - nothing for other users
这r-s
意味着在此文件夹内创建的任何文件或目录都会自动将组设置为 group group
。
这就是导致文件像这样创建的foo.txt
原因:bar.txt
-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt
权限和掩码
您看到的权限是另一回事。这些由您的设置控制umask
。您可以umask
使用以下命令查看您的设置umask
:
$ umask
0002
笔记:这些位也称为“模式”位。
它是一个掩码,因此它将禁用与启用的权限相关的任何位。在这个例子中,我唯一想要关闭的是其他人的写权限。
0 - skipping for this conversation
0 - value of user bits
0 - value of group bits
2 - value of other bits
该命令中“位”的表示形式为十进制形式。因此,2 相当于二进制形式的 010,即写入位。 4 (100) 表示您希望禁用阅读。 7 (111) 表示您希望读/写/执行全部禁用。从这里开始构建它:
$ umask 007
将禁用其他用户的读/写/执行位。
那么你的文件呢?
好吧,它umask
控制创建新文件时设置的权限。因此,如果我们有以下umask
集合:
$ umask 007
并开始接触新文件,我们会看到它们像这样创建:
$ touch newfile1.txt newfile2.txt
$ ls -l |grep newfile
-rw-rw---- 1 saml saml 0 Nov 3 22:34 newfile1.txt
-rw-rw---- 1 saml saml 0 Nov 3 22:34 newfile2.txt
如果我们将其更改为其他内容,请这样说:
$ umask 037
$ ls -l |grep newfile
-rw-rw---- 1 saml saml 0 Nov 3 22:36 newfile1.txt
-rw-rw---- 1 saml saml 0 Nov 3 22:36 newfile2.txt
-rw-r----- 1 saml saml 0 Nov 3 22:35 newfile3.txt
-rw-r----- 1 saml saml 0 Nov 3 22:35 newfile4.txt
不过,它不会对我们已经创建的文件产生任何影响。看这里:
$ umask
0037
$ touch newfile1.txt newfile2.txt
$ ls -l | grep newfile
-rw-rw---- 1 saml saml 0 Nov 3 22:37 newfile1.txt
-rw-rw---- 1 saml saml 0 Nov 3 22:37 newfile2.txt
-rw-r----- 1 saml saml 0 Nov 3 22:35 newfile3.txt
-rw-r----- 1 saml saml 0 Nov 3 22:35 newfile4.txt
那么文件浏览器是怎么回事呢?
这umask
就是我所说的“软”设置。它绝不是绝对的,并且在 Unix 中可以通过多种方式相当容易地绕过。许多工具都带有开关,允许您指定权限作为其操作的一部分。
举mkdir
个例子:
$ umask
0037
$ mkdir -m 777 somedir1
$
$ ls -ld somedir1
drwxrwxrwx 2 saml saml 4096 Nov 3 22:44 somedir1
通过-m
开关我们可以覆盖umask
.该touch
命令没有此功能,因此您必须发挥创意。请参阅此 U&L 问答,标题为:可以使用命令行上设置的权限创建文件吗?就是为了这样的方法。
其他方法?只需覆盖umask
.文件浏览器很可能会执行此操作,或者完全忽略umask
并使用其配置的任何权限来放置文件。