我刚刚设置了一个 EC2 实例来使用并正在测试文件权限;但是,我注意到执行位没有被传递到较低级别(读取和写入,只是不执行)。
[ec2-user@server www]$ touch web/hi
[ec2-user@server www]$ ls -l web/
total 4
-rw-rw-r-- 1 ec2-user apache 0 May 27 19:02 hi
-rwxrwxr-x 1 ec2-user apache 43 May 27 05:15 index.php
[ec2-user@server www]$ getfacl --all-effective web/
# file: web/
# owner: ec2-user
# group: apache
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
为了让执行位传递下去,我缺少什么?
答案1
尝试测试 mkdir,这是大多数人会担心的?
touch 不会创建可执行文件。它在 sys_open() 的模式参数中屏蔽了这些位。 源代码:
133 /* Try to open FILE, creating it if necessary. */
134 fd = fd_reopen (STDIN_FILENO, file,
135 O_WRONLY | O_CREAT | O_NONBLOCK | O_NOCTTY, MODE_RW_UGO)
请注意,模式参数中没有 X。如果程序不允许,则不能强制程序创建可执行(或世界可读等)文件。很多文件创建看起来都是这样的。安装可执行文件是不太常见的情况。
touch 使用的系统调用也描述为POSIX 标准。