使用 ACL 设置“x”(可执行)位

使用 ACL 设置“x”(可执行)位

我无法设法将 x 位设置为创建的文件。

archemar@foobar:~/D> echo echo hello world > v.sh
archemar@foobar:~/D> ls -l v.sh
-rw-rw-r--+ 1 archemar group1 17 Apr 12 08:12 v.sh

没有x位,让我们看看acl

archemar@foobar:~/D> getfacl v.sh
# file: v.sh
# owner: archemar
# group: group1
user::rw-
group::rwx                      #effective:rw-
group:group1:rwx             #effective:rw-
mask::rw-
other::r--

group1 位于rwxacl 中!

让我们看看本地目录的 acl

archemar@foobar:~/D> getfacl .
# file: .
# owner: FTP_D_adm
# group: admin
user::rwx
group::rwx
group:group2:rwx
group:admin:rwx
group:group1:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:group1:rwx
default:mask::rwx
default:other::r-x

我是 group1 的成员:

archemar@foobar:~/D> id
uid=1001(archemar) gid=1001(group1) groups=1001(group1),16(dialout),33(video)

让我们尝试执行

archemar@foobar:~/D> ./v.sh
-bash: ./v.sh: Permission denied

设置 g+x 很简单,但实际文件将通过 ftp 传输。有没有办法设置位 x ?

操作系统是 suse 11.4,目录是 NFS 3 挂载的,ACL 在文件系统上设置。

答案1

我不认为你可以强制使用ACL一个许可位。

使用Linux ACL 手册页作为参考,默认 ACL 被复制到文件的权限,但是

  1. 修改文件权限位对应的访问ACL条目,使其不包含mode参数指定的权限之外的权限 [给予open()creat()等等]

由于权限位掩码对应于组权限位,因此它在这里受到影响。

如果没有默认 ACL,umask则会使用默认 ACL,但仍会进行相同的屏蔽。

这当然符合程序的通常习惯,能够将权限限制为open创建文件时传递给的权限,无论是使用 mode 排除执行权限0666,还是使用 mode 排除其他用户访问该文件0600

答案2

这两个问题已经得到了外围的回答:

umask 如何影响 ACL?

https://superuser.com/questions/180545/setting-differing-acls-on-directories-and-files

相关位通常来自man setfacl

perms 字段是表示 > 权限的字符组合:读 (r)、写 (w)、执行 (x)、仅当文件是目录或已具有某个用户 (X) 的执行权限时才执行。 或者,perms 字段可以是八进制数字 (0-7)。

(强调我的)

答案中第一个问题的相关部分@slm♦如下:

总结一下

  • 文件不会获得执行权限(屏蔽或有效)。我们使用哪种方法并不重要:ACL、umask 或 mask & ACL。

  • 目录可以获得执行权限,但这取决于屏蔽字段如何设置。

  • 为 ACL 权限下的文件设置执行权限的唯一方法是使用 chmod 手动设置它们。

这基本上意味着您似乎无法使用 ACL 做您想做的事情,因为很少有程序实际上明确表示它们想要创建可执行文件。

相关内容