我不明白我的 Linux 机器如何处理新文件。
我有一个 Amazon Linux AMI(基于 RHEL 的发行版),当我执行时,umask
我得到了0002
,因此每当我创建新内容时,我都会得到其他用户无法write
访问的信息。
但随后我进入我的主目录并输入:
$ mkdir myDir
$ touch myDir/myFile
$ ls -l | grep myDir
我得到
drwxrwxr-x 2 myself myself 4096 May 11 22:37 myDir
对于文件夹:
$ ls -l myDir
-rw-rw-r-- 1 myself myself 0 May 11 22:37 myFile
显然,那里发生的事情比我的还要多umask
,因为myFile
权限比仅仅保护更具限制性write
。
深入挖掘,如果我尝试:
$ sudo touch /var/run/myPidFile.pid
$ ls -l /var/run/ | grep myPidFile.pid
-rw-r--r-- 1 root root 0 May 11 22:42 myPidFile.pid
因此,myPidFile.pid
获得了更具限制性的默认权限,然后/var/run
进入myFile
我的主文件夹。
我们可以责怪,root
umask
但如果我umask
在下面运行,root
我得到的0022
确实比我的用户的限制更严格,0002
umask
但仍然没有解释如何未设置执行位权限。
那么如何了解 Linux 上文件夹的默认权限呢?
答案1
umask 是大部分难题。 Root 有不同的 umask。这是非常典型的。
您所缺少的谜题部分是 umask 是面具。当应用程序创建文件时,它会指定一些权限; umask 是这些权限的过滤器,可删除一些权限位。该文件仅具有应用程序包含的权限位。例如,想要创建不可执行文件(例如touch
)的应用程序会传递权限位 666(八进制);使用 umask 002,这会导致权限 664,即 rw-rw-r--:umask 删除了 write-other 位。创建目录时,应用程序(例如mkdir
)通常会允许执行,因此将权限指定为 777; umask 002 导致目录权限为 775,即 rwxrwxr-x。
您可以通过以下方式查看应用程序使用的权限观察它进行的系统调用。例如:
$ strace -e open,mkdir touch foo
… skipping opening of dynamically linked libraries etc. …
open("foo", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
+++ exited with 0 +++
$ strace -e open,mkdir mkdir goo
… skipping opening of dynamically linked libraries etc. …
mkdir("goo", 0777) = 0
+++ exited with 0 +++
答案2
目录需要执行权限才能更改目录或获取列表,因此当创建目录时,它会自动获取 +x 位设置。
然而,如果文件是已编译的二进制文件(c/c++/etc)或可解释的脚本(sh/bash/php/perl/etc),并且不使文件可执行,则仅需要设置执行位出于安全原因默认。