Linux / Unix - 使用ACL设置默认文件/文件夹权限,不设置可执行权限?

时间:2013-09-05 22:30:29

标签: linux unix default acl file-permissions

我正在尝试设置新文件或文件夹创建/上传到我的Linux(RackSpace Cloud,CentOS)服务器时的默认权限和组。

我想将目录'public'的所有子文件/文件夹设置为具有以下内容:

User - rwx
Group - 'ftp', rwx
Other - r-x

我已使用此脚本设置ACL(递归):

setfacl -R -m u::rwx,g:ftp:rwx,d:g:ftp:rwx,o::rx public/

使用getfacl返回acl会显示以下内容:

# file: public/
# owner: james
# group: ftp
# flags: -s-
user::rwx
group::rwx
group:ftp:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:ftp:rwx
default:mask::rwx
default:other::r-x

但是创建一个新文件会返回此权限(从FTP上传用户'james'的新文件时也是如此):

-rw-rw-r--+ 1 root  root      6 Sep  5 15:26 test.html

为什么不设置'x'和默认组'ftp',而是正确设置其他权限?

1 个答案:

答案 0 :(得分:1)

它没有设置执行位,因为如果应用程序显式请求,则仅使用执行权限创建文件。由于将.html文件设置为可执行文件是没有意义的,因此无论创建什么程序它都没有请求添加执行权限,因此它没有执行权限。因此,默认ACL 有效的执行权限仅适用于目录,而不适用于文件。

至于为什么默认组未设置为ftp,这更加微妙。默认ACL就是 - ACL。它不是默认的群组所有权。因此,它不会显示在ls中,而是显示在getfacl中:

# mkdir public
# setfacl -R -m u::rwx,g:ftp:rwx,d:g:ftp:rwx,o::rx public/
# getfacl public
# file: public
# owner: root
# group: root
user::rwx
group::r-x
group:ftp:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:ftp:rwx
default:mask::rwx
default:other::r-x

# echo hello, world > public/test.html
# ls -l public
total 4
-rw-rw-r--+ 1 root root 13 Aug 29 13:00 test.html
# getfacl public/test.html 
# file: public/test.html
# owner: root
# group: root
user::rw-
group::r-x                      #effective:r--
group:ftp:rwx                   #effective:rw-
mask::rw-
other::r--

请注意,ftp可以正常访问该文件,而其他人则不能:

# cd public
# su nobody -s /bin/bash -C "touch test.html"
touch: cannot touch `test.html': Permission denied
# su ftp -s /bin/bash -C "touch test.html"
#