我无法设法将 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 位于rwx
acl 中!
让我们看看本地目录的 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 被复制到文件的权限,但是
- 修改文件权限位对应的访问ACL条目,使其不包含mode参数指定的权限之外的权限 [给予
open()
,creat()
等等]。
由于权限位掩码对应于组权限位,因此它在这里受到影响。
如果没有默认 ACL,umask
则会使用默认 ACL,但仍会进行相同的屏蔽。
这当然符合程序的通常习惯,能够将权限限制为open
创建文件时传递给的权限,无论是使用 mode 排除执行权限0666
,还是使用 mode 排除其他用户访问该文件0600
。
答案2
这两个问题已经得到了外围的回答:
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 做您想做的事情,因为很少有程序实际上明确表示它们想要创建可执行文件。